Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-06-2003
agonzalez agonzalez is offline
Miembro
 
Registrado: may 2003
Ubicación: Medellin - Colombia
Posts: 52
Poder: 21
agonzalez Va por buen camino
Question 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
Responder Con Cita
  #2  
Antiguo 19-06-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
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));
__________________
Guía de Estilo
Responder Con Cita
  #3  
Antiguo 19-06-2003
agonzalez agonzalez is offline
Miembro
 
Registrado: may 2003
Ubicación: Medellin - Colombia
Posts: 52
Poder: 21
agonzalez Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 19-06-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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.
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.

Última edición por delphi.com.ar fecha: 19-06-2003 a las 21:59:13.
Responder Con Cita
  #5  
Antiguo 24-06-2003
emili emili is offline
Miembro
 
Registrado: jun 2003
Ubicación: Ontinyent (Valencia)
Posts: 14
Poder: 0
emili Va por buen camino
Smile

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!!
Responder Con Cita
  #6  
Antiguo 24-06-2003
Bacterion Bacterion is offline
Miembro
 
Registrado: may 2003
Posts: 91
Poder: 22
Bacterion Va por buen camino
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).
Responder Con Cita
  #7  
Antiguo 24-06-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #8  
Antiguo 24-06-2003
Bacterion Bacterion is offline
Miembro
 
Registrado: may 2003
Posts: 91
Poder: 22
Bacterion Va por buen camino
Wink

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
Responder Con Cita
  #9  
Antiguo 02-03-2017
richardfloflo richardfloflo is offline
Registrado
NULL
 
Registrado: feb 2017
Posts: 4
Poder: 0
richardfloflo Va por buen camino
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....
Responder Con Cita
  #10  
Antiguo 02-03-2017
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.464
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por richardfloflo Ver Mensaje
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
__________________
Be water my friend.
Responder Con Cita
  #11  
Antiguo 02-03-2017
richardfloflo richardfloflo is offline
Registrado
NULL
 
Registrado: feb 2017
Posts: 4
Poder: 0
richardfloflo Va por buen camino
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
Responder Con Cita
  #12  
Antiguo 02-03-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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
Responder Con Cita
  #13  
Antiguo 02-03-2017
richardfloflo richardfloflo is offline
Registrado
NULL
 
Registrado: feb 2017
Posts: 4
Poder: 0
richardfloflo Va por buen camino
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
Responder Con Cita
  #14  
Antiguo 02-03-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por richardfloflo Ver Mensaje
me marca este error:
Código:
 [Error] fCapturaE2.pas(3544): Undeclared identifier: 'grado_ultima_inscripcion'
Bien, ¿y existe grado_ultima_inscripcion?
Responder Con Cita
  #15  
Antiguo 03-03-2017
richardfloflo richardfloflo is offline
Registrado
NULL
 
Registrado: feb 2017
Posts: 4
Poder: 0
richardfloflo Va por buen camino
solucion QuotedStr

amigos esta es la solución


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


gracias por la ayuda
saludos..
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 17:07:31.


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
Copyright 1996-2007 Club Delphi