Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Consultas con párametros (https://www.clubdelphi.com/foros/showthread.php?t=71758)

GerTorresM 08-01-2011 18:02:24

Consultas con párametros
 
Hola a tod@s:


la situación que se me presenta en el día de hoy es la siguiente:

Estoy haciendo mantenimiento a una aplicación desarrollada utilizando delphi 6 y que emplea BDE, en orden de ideas el mantenimiento me lleva a aplicar la utilización de consultas con parámetros; hasta ahí no hay nada nuevo ni que lamentar, tan solo lo siguiente:

debe utilizar parámetros dentro de una instrucción In del SQL, el código es el siguiente:

Código Delphi [-]
  QTarifas_local:= CrearConsulta;
  QTarifas_local.OnCalcFields:= QTarifas_localCalcFields;
  Qtarifas_local.SQL.Text:= ' SELECT Tarifas.Zona, Tarifas.CodigoTipoServicio, Tarifas.Estrato '+
                            ' FROM  Tarifas ' +
                            ' Where CodigoAno =:pCodigoAno '+
                            ' And CodigoPeriodoPago =:pCodigoPeriodo ' +
                            ' And CodigoTipoServicio =:pCodigoTipoServicio'+
                            ' And Zona =:pZona ' +
                            ' And Tarifas.CodigoServicio in (:pCodigoServicio)' +
                            ' GROUP BY Tarifas.Zona, Tarifas.CodigoTipoServicio, Tarifas.CodigoServicio, Tarifas.Estrato ';

ahora sigo como la alimento

Código Delphi [-]
    with QTarifas_local do
      begin
        Close;
        ParamByName('pCodigoAno').AsInteger:= StrToInt(Self.edtTarifaAno.Text);
        ParamByName('pCodigoPeriodo').AsInteger:= Self.dblkcbbCodigoPeriodoPago.KeyValue;
        ParamByName('pCodigoTipoServicio').AsInteger:= Self.dblkcbbCodigoTipoServicio.KeyValue;
        ParamByName('pZona').AsInteger:= Self.dblkcbbZona.KeyValue;
        ParamByName('pCodigoServicio').AsString := '4,5';
        try
         Open;
        except on e: Exception do
          ShowMessage(e.Message);
        end;
      end;

y al ejecutarlo obtengo el siguiente mensaje de error

General SQL error
Data Type mismatch in criteria expression.


En un principio pense que habia algun error en la forma en la que estaba escrita la consulta y la probe por fuera dgitado la sentencia de SQL y corriendola; a continuación elimine cada parámetro encontrando que el error provenía del parámtero en string.

Entonces la pregunta es como puedo ingresar este tipo de parámteros en la consulta ?



Agradezco de antameno la colaboración que me puedan prrestar



gertorresm
Colombia

Caral 08-01-2011 19:09:19

Hola
No entiendo la parte de Self.dblkcbbCodigoPeriodoPago.KeyValue
Pero intenta asi:
Código Delphi [-]
with QTarifas_local do
      begin
        Close;
        ParamByName('pCodigoAno').Value:= StrToInt(Self.edtTarifaAno.Text);
        ParamByName('pCodigoPeriodo').Value:= Self.dblkcbbCodigoPeriodoPago.KeyValue;
        ParamByName('pCodigoTipoServicio').Value:= Self.dblkcbbCodigoTipoServicio.KeyValue;
        ParamByName('pZona').Value:= Self.dblkcbbZona.KeyValue;
        ParamByName('pCodigoServicio').Value:= '4,5';
        try
         Open;
        except on e: Exception do
          ShowMessage(e.Message);
        end;
      end;
Saludos

GerTorresM 08-01-2011 20:07:39

Parámetro de la consultas
 
Carnal:


Gracias por tu tiempo, intente en la forma en la que me dices, pero sigue enviándome el mismo error, y con referencia a tu comentario "No entiendo la parte de Self.dblkcbbCodigoPeriodoPago.KeyValue" hace referencia a un parámetro que ingresa por un DBLookComboBox.


Gracias de antemano


gertorresm
Colombia

Caral 08-01-2011 20:32:25

Hola
As intentado correr el programa con f7 o f8 ?.
Ahi te dira la linea exacta donde esta el problema.
Saludos

GerTorresM 08-01-2011 21:08:22

Otra Forma de Hacerlo
 
Gracias a to@as y es especial a Caral

Verificando en otros foros encontre una serie de contenidos que me permite plantear lo siguiente:


Código Delphi [-]
  QTarifas_local:= CrearConsulta;
  QTarifas_local.OnCalcFields:= QTarifas_localCalcFields;
  TextoQTarifas:= ' SELECT Tarifas.Zona, Tarifas.CodigoTipoServicio, Tarifas.Estrato '+
                  ' FROM  Tarifas ' +
                  ' Where CodigoAno =:pCodigoAno '+
                  ' And CodigoPeriodoPago =:pCodigoPeriodo ' +
                  ' And CodigoTipoServicio =:pCodigoTipoServicio'+
                  ' And Zona =:pZona ' +
                  ' And Tarifas.CodigoServicio in (%s)' +
                  ' GROUP BY Tarifas.Zona, Tarifas.CodigoTipoServicio, Tarifas.CodigoServicio, Tarifas.Estrato ';

y ejecutar las cosas de la siguiente forma

Código Delphi [-]
    with QTarifas_local do
      begin
        Close;
        SQL.Text:= (Format(TextoQTarifas, ['4,5,6,7']));
        ParamByName('pCodigoAno').AsInteger:= StrToInt(Self.edtTarifaAno.Text);
        ParamByName('pCodigoPeriodo').AsInteger:= Self.dblkcbbCodigoPeriodoPago.KeyValue;
        ParamByName('pCodigoTipoServicio').AsInteger:= Self.dblkcbbCodigoTipoServicio.KeyValue;
        ParamByName('pZona').AsInteger:= Self.dblkcbbZona.KeyValue;
      end;

Ahora bien se había podido reemplazar la totalidad de los parámetros por %s, pero lo deje para poder comprobar que efectivamente el error sucedía cuando se intentaba ingresar mediante parámetros un string


gracías de antemano


gertorresm
Colombia

Caral 08-01-2011 22:44:24

Hola
No se si lo pudiste solucionar o te queda alguna duda ?.
Saludos


La franja horaria es GMT +2. Ahora son las 10:19:42.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi