Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   query con problemas de casteo (https://www.clubdelphi.com/foros/showthread.php?t=96199)

jars 13-04-2023 22:54:49

query con problemas de casteo
 
Hola gente.
Tengo una tabla en Firebord 2.5 donde hay un campo skill =Char(2) y tengo que armar una clausula where de la siguiente forma:

...

WHERE SKILL IN (11,14,12,16,12)
...

Se que podría armarla entrecomillando cada valor pero estos valores me viene de un programa externo y siempre son distintos.
El query lo armo dinámicamente.
Hay alguna forma?

Gracias

Neftali [Germán.Estévez] 14-04-2023 07:55:05

Cita:

Empezado por jars (Mensaje 551148)
Se que podría armarla entrecomillando cada valor pero estos valores me viene de un programa externo y siempre son distintos.
El query lo armo dinámicamente.
Hay alguna forma?

No acabo de entender el problema que tienes.
Si "montas" el query dinámicamente (al final es un string) no hay problema en ir añadiendo los valores "que te llegan del programa externo". Basta con concatenar los strings.

Para el tema de las comillas, revisa QuotedStr.

Tal vez no estoy entendiendo el problema, porque no lo veo por ninguna parte... ;)

jars 14-04-2023 14:16:41

Lo que recibo es esta variable SkillSet := '03,11,09,45' y con esta variable armo el query así:

Código:

    query := 'SELECT * FROM TBLRECS '+
                  'WHERE CALLDATE >= '+QuotedStr(df)+' AND CALLDATE <='+QuotedStr(dt)' +
                  ' AND SKILL IN ('+SkillSet+')';

El campo SKILL es Char(2) y ejecutándolo así me da el error: Overflow occurred during data type conversion.
conversion error from string " ".

No se como resolverlo?

jars 14-04-2023 15:16:11

Solucionado, no me había dado cuenta de parsearlo y usar QuotedStr
Gracias German,

cloayza 17-04-2023 14:33:56

Estimado colega, solo una sugerencia, yo prefiero el uso de parametros en las consultas, queda el código sql mas legible.

Aquí una variación, que espero tome a bien.
Código Delphi [-]
Qry.Sql.Clear;
Qry.Sql.Add('SELECT * FROM TBLRECS');
Qry.Sql.Add('WHERE (CALLDATE >= : DF AND CALLDATE <=: DT');
Qry.Sql.Add('           AND POSITION(SKILL IN :SkillSeet)>0');
Qry.ParamByName('DF').AsDate:=DF;
Qry.ParamByName('DT').AsDate:=DT;
Qry.ParamByName('SkillSeet').AsString:=SkillSeet;
Qry.Open;

Saludos cordiales

Neftali [Germán.Estévez] 17-04-2023 16:02:59

Cita:

Empezado por cloayza (Mensaje 551167)
...yo prefiero el uso de parametros en las consultas, queda el código sql mas legible.


^\||/
Por supuesto, siempre que se puedan usar parámetros, tal como dice [cloayza], mejor.
Te evitarás problemas con los diferentes tipos de datos.


La franja horaria es GMT +2. Ahora son las 10:54:58.

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