Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   String Con comillas (https://www.clubdelphi.com/foros/showthread.php?t=1590)

agonzalez 19-06-2003 19:14:21

String Con comillas
 
nesesito generar una instruccion SQL de la siguiente forma:

Select * from tabla Where tabla.mes <= '12';

Pasa que el mes se ingresa por un Edit, Si coloco

Query.Sql.Add('Select * from tabla Where tabla.mes <= '+Edit1.text+';')

el resultado seria
Select * from tabla Where tabla.mes <= 12;

Sin las comillas en el 12
y si coloco

Query.Sql.Add('Select * from tabla Where tabla.mes <= ''+Edit1.text+'';')

el resultado seria
Select * from tabla Where tabla.mes <= '+Edit1.text+';

En vez del Text que tiene el Edit1 coloca "Edit1.text"

¿Que hago?


Exitos
Gracias

andres1569 19-06-2003 19:24:25

Si el campo mes es de tipo numérico, no hace falta que pongas comillas. Si es de tipo String, o Char, o Varchar ... entonces la función de Delphi QuotedStr evita quebraderos de cabeza:

Query1.SQL.Add ('Select * from tabla Where tabla.mes <= ' + QuotedStr (Edit1.text));

agonzalez 19-06-2003 21:29:27

Ya la implemente de la siguiente manera:

Query.Sql.Add('Select * from tabla Where tabla.mes <= '+chr(39)+Edit1.text+chr(39)+';')

ensaye el QuotedStr y funciona tambien.

Gracias
Exitos

delphi.com.ar 19-06-2003 21:55:32

No te recomiendo el del Chr(39), mas por una cuestión personal que por otra cosa, tenés que saber que Chr es una función y estas usando una función de System para crear un caracter, el compilador de Delphi es bastante inteligente y comprende que esta función puede ser cambiada por una constante (#39), pero no debemos abusar de las bondades del compilador, creo que es mucho mas prolijo definirlas como constantes (Insisto que es una opinión personal).
De todos modos te recomiendo utilizar la función QuotedStr, porque si el text del Edit1 contiene un #39, QuotedStr las duplica y evita errores.

Probá esto y vas a ver que falla
Código:

Edit1.text := 'Juan D''Arienzo';
Query.Sql.Add('Select * from tabla Where tabla.mes <= '#39 + Edit1.text + #39';')

y/o
Código:

Query.Sql.Add('Select * from tabla Where tabla.mes <= ''' + Edit1.text + ''';')
Solución
Código:

Edit1.text := 'Juan D''Arienzo';
Query.Sql.Add('Select * from tabla Where tabla.mes <= ' + QuotedStr(Edit1.text) + ';')

Para trabajar con diferentes tipos de datos, y que nuestro código sea protable entre diferentes servidores de bases de datos, te recomiendo usar parámetros.

emili 24-06-2003 14:42:35

Otra manera de pasarle los valores a un TQuery es de la siguiente manera:

Query.Active:=False;
Query.Sql.Add('Select * from tabla Where tabla.mes <= :MES ');
ParamByName('MES').AsString:= Edit1.text ;
Query.Active:=True;

De esta manera puedes pasar parametros sin problemas de comillas, etc. En el caso de que el mes fuera numérico solo cambiarias la asignación al parametro:

ParamByName('MES').AsInteger:= strtoint(Edit1.text);

Saludos!!

Bacterion 24-06-2003 16:28:37

Todo lo que te dicen está bien, supongo, pero el fallo que tenías era en:

Query.Sql.Add('Select * from tabla Where tabla.mes <= ''+Edit1.text+'';')

que en una cadena, para indicar un caracter comilla simple (') debes poner dos (como ocurre en c con la barra /, creo recordar)

Luego tu linea quedaría como:
Query.Sql.Add('Select * from tabla Where tabla.mes <= '''+Edit1.text+''';')

así de sencillo.
Ahora, si me dejas indicarte algo, prefiero que uses lo que dice emili de usar parámetros. Y si en vez de estar creandolas al vuelo, lo pegas en un datamodule, mejor que mejor (menos trabajo) y si encima te dejas cambiar la query una y otra vez para usarla para distintas consultas, mucho mejor (sobre todo para tí, para mantener el código).

delphi.com.ar 24-06-2003 17:24:39

Lo que te recomienda emili, es lo que te había recomendado anteriormente
Cita:

Posteado originalmente por delphi.com.ar
Para trabajar con diferentes tipos de datos, y que nuestro código sea portable entre diferentes servidores de bases de datos, te recomiendo usar parámetros.
Una gran ventaja del uso de parámetros, es que con los tipos más específicos de cada motor, como fecha y hora, te olvidas de hacer conversiones extrañas, y tu aplicación termina siendo compatible con múltiples motores. (Siempre que uses ANSI en las consultas)

Saludos!

Bacterion 24-06-2003 18:52:48

Cierto, la recomendación de los parámetros fue de delphi.com.ar...
nada, como esto es curro de equipo:

Recuerda, Bacterion ecomienda que sigas (con matices) la explicación de Emili de la sugerencia de delphi.com.ar

richardfloflo 02-03-2017 07:51:16

problema delphi
 
hola muy buenas noches tengo un problema con este tema del manejo del QoutedStr
el caso es el siguiente estoy tratando de convertir los datos varchar

qryRepoDetailExc.sql.Add(' QuotedStr (grado_ultima_inscripcion) ,');
me marca error quisiera saber si la sintaxis es correcta

ojala y me puedan ayudar esto me tiene de cabeza...

saludos....

newtron 02-03-2017 09:47:47

Cita:

Empezado por richardfloflo (Mensaje 513887)
hola muy buenas noches tengo un problema con este tema del manejo del QoutedStr
el caso es el siguiente estoy tratando de convertir los datos varchar

qryRepoDetailExc.sql.Add(' QuotedStr (grado_ultima_inscripcion) ,');
me marca error quisiera saber si la sintaxis es correcta

ojala y me puedan ayudar esto me tiene de cabeza...

saludos....

Hola.

Si no me equivoco mejor así...

Código Delphi [-]
qryRepoDetailExc.sql.Add(QuotedStr (grado_ultima_inscripcion)+',');

Saludos

richardfloflo 02-03-2017 22:42:19

error delphi quotedStr
 
hola buena tarde hice algunas pruebas y me sigue marcando error

.......
qryRepoDetailExc.sql.Add('nvl(c.c_semestre, 0))) as grado_autorizado,');
qryRepoDetailExc.sql.Add(QuotedStr (grado_ultima_inscripcion)+','); <--------- marca error en esta linea
qryRepoDetailExc.sql.Add(' 0 AÑO_ultima_inscripcion,');
...

ojala y me puedan ayudar
gracias

saludoss

Casimiro Notevi 02-03-2017 22:49:05

Bienvenido a clubdelphi, como siempre aconsejamos a los nuevos, no olvides leer nuestra guía de estilo, gracias por tu colaboración :)


Y recuerda poner los tags al código fuente, ejemplo:



Gracias :)

Además, explica mejor el problema, dices que sale un error y no nos has copiado el mismo, no somos adivinos ;)

richardfloflo 02-03-2017 23:08:24

Una disculpa por no explicar mas estoy utilizando QuotedStr pero al momento de correr el programa me marca error
es un qry que estoy armando en la primera parte del codigo lo tengo asi

qryRepoDetailExc.sql.Add('gg.descripcion Grado_Ultima_Inscripcion,');

de aqui lo obtengo
qryRepoDetailExc.sql.Add('padron.grado_escolar gg');
es de tipo varchar


esta parte esta en el union

Código Delphi [-]
qryRepoDetailExc.sql.Add('nvl(c.c_semestre, 0))) as grado_autorizado,');
qryRepoDetailExc.sql.Add(QuotedStr (grado_ultima_inscripcion)+','); <--------- marca error en esta linea 
qryRepoDetailExc.sql.Add(' 0 AÑO_ultima_inscripcion,');

agregue algunas lineas mas de código para ver si necesita paréntesis o comillas, mi problema creo q es de sintaxis


me marca este error
[Error] fCapturaE2.pas(3544): Undeclared identifier: 'grado_ultima_inscripcion'

saludos

Casimiro Notevi 02-03-2017 23:11:48

Cita:

Empezado por richardfloflo (Mensaje 513933)
me marca este error:
Código:

[Error] fCapturaE2.pas(3544): Undeclared identifier: 'grado_ultima_inscripcion'

Bien, ¿y existe grado_ultima_inscripcion?

richardfloflo 03-03-2017 07:46:41

solucion QuotedStr
 
amigos esta es la solución


Código Delphi [-]
ryRepoDetailExc.sql.Add(' ' + QuotedStr('') + ' Grado_Ultima_Inscripcion,');


gracias por la ayuda
saludos..


La franja horaria es GMT +2. Ahora son las 18:06:39.

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