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 18-08-2006
kman kman is offline
Miembro
 
Registrado: dic 2005
Ubicación: República Dominicana.
Posts: 67
Poder: 19
kman Va por buen camino
Problemas con las comillas al conformar una consulta SQL

Saludos Amigos!

Estoy intentando hacer una actulización de un registro en una tabla y me ha dado la lata:

Código Delphi [-]
procedure TFrLoad.FormCreate(Sender: TObject);
var timer: string;
begin
  edit1.text:= datetostr(now);
  timer:='"%'+edit1.Text+'%"';
With    Module.QrPasswords
Do Begin
Close;
SQL.clear;
SQL.add('SELECT * FROM PASSWORDS where Fecha_Inactiva like '+timer);
SQL.add('UPDATE PASSWORDS SET Status_Password = '0' where Status_Password = '1'');
Open;
end;
end;
end.
Pretendo hacer esto para cuando el programa cargue las claves de usuarios que se han vencido cambien de estado de activo a inactivo y el usuario tenga que cambiar su clave. Pero con '0' me da error de semicolon y si pongo "0" me da error de sintaxis: Falta operador.
La base de datos es de Access, no sé si soporta UPDATE, me gustaría usar Replace, pero leí que no lo soporta.

Agradeciendo sus ayudas de Antemano
Su Amigo Kman.

Última edición por kman fecha: 18-08-2006 a las 00:58:09.
Responder Con Cita
  #2  
Antiguo 18-08-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Código Delphi [-]
SQL.add('UPDATE PASSWORDS SET Status_Password = ''0'' where Status_Password = ''1''');

Fíjate que cuando se quiere incluir en una cadena (que en Delphi se presentan entre comillas simples) el propio símbolo de las comillas simples, esto puede hacerse duplicando dicho símbolo, para que Delphi lo tome como tal y no como el "final de una cadena".
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 18-08-2006
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Dependerá tambien de a que tipo de dato esta definido el campo status_password
__________________

Responder Con Cita
  #4  
Antiguo 18-08-2006
kman kman is offline
Miembro
 
Registrado: dic 2005
Ubicación: República Dominicana.
Posts: 67
Poder: 19
kman Va por buen camino
Gracias por responder (y corregir el título ).

Dec: Olvidé mencionarlo, ya había intentado hacerlo como me dices, pero aún me da el Syntax ErrorMissing Operator), Qué operador se requiere? Es solo introducción de caracteres, no es operación lo que hago.

ContraVeneno: Ahora que lo mencionas es de tipo numérico single, (hmm.Será ese mi problema?)

Se puede o no se puede usar REPLACE con ACCESS??

Última edición por kman fecha: 18-08-2006 a las 01:59:07.
Responder Con Cita
  #5  
Antiguo 18-08-2006
nemesio nemesio is offline
Miembro
 
Registrado: nov 2005
Ubicación: Isla de Margarita, Venezuela
Posts: 377
Poder: 19
nemesio Va por buen camino
Si es numérico, entonces quita las comillas al cero y colocalo directamente:
Código SQL [-]
SQL.add('UPDATE PASSWORDS SET Status_Password = 0 where Status_Password = 1');
saludos
Responder Con Cita
  #6  
Antiguo 18-08-2006
kman kman is offline
Miembro
 
Registrado: dic 2005
Ubicación: República Dominicana.
Posts: 67
Poder: 19
kman Va por buen camino
Cita:
Empezado por nemesio
Si es numérico, entonces quita las comillas al cero...
saludos
Lo mismo, Syntax ErrorMissing operator) Qué operador?
Responder Con Cita
  #7  
Antiguo 18-08-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Yo nunca he visto que en una misma consulta se pueda introducir 2 sqls distintas, una de selección y otra de actualización sin estar anidadas.

Algo del tipo:
Código SQL [-]
  update .... where (select * from ...)
Si es correcto, pero tú estas metiendo 2 sqls totalmente independientes dentro de la misma consulta. La solución sería lanzar la consulta 1 vez con el SELECT y otra vez con el UPDATE cuando se necesite.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 18-08-2006
kman kman is offline
Miembro
 
Registrado: dic 2005
Ubicación: República Dominicana.
Posts: 67
Poder: 19
kman Va por buen camino
Cita:
Empezado por Lepe
Yo nunca he visto que en una misma consulta se pueda introducir 2 sqls distintas...
Cita:
Empezado por Lepe
Si es correcto, pero tú estas metiendo 2 sqls totalmente independientes dentro de la misma consulta.
Saludos Lepe.
Me gustaría que me explicaras, o me mostraras un código(verás soy un poquito novato).
Pensaba que con el Select estaba realizando un tipo de filtro en base a la fecha y que apartir de ahí el update se realizaría, pensaba estar en lo correcto ya que el error de sintaxis apunta a una falta de operador no de otra cosa.

Última edición por kman fecha: 18-08-2006 a las 15:15:19.
Responder Con Cita
  #9  
Antiguo 18-08-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
El error de "falta operador" lo puede dar simplemente porque falte el punto y coma final de la instrucción SELECT. Es decir, encuentra un error, muestra el mensaje y no sigue procesando el sql restante.... de ahí que el error que muestra no coincide con el error verdadero.

Ya que has explicado un poco más lo que quieres hacer, creo que la solución sería esta:
Código SQL [-]
UPDATE PASSWORDS SET Status_Password = 0 where Status_Password = 1 and Fecha_Inactiva like +timer

Ahora si estas restringiendo el update a la fecha y a la condición Status_Password. Lo que no me queda claro es usar comodines cuando el campo se llama Fecha. Si en el campo Fecha_inactiva guardas una fecha en formato Datetime, tendrás que acotar de otra forma la restricción, es decir:

Código Delphi [-]
quer1.sql.text := 'UPDATE PASSWORDS SET Status_Password = 0 where Status_Password = 1 and Fecha_Inactiva between :fecha1 and :fecha2'
query1.params.parambyname('fecha1').Value := strtodate(edit1);
query1.params.parambyname('fecha2').Value := strtodate(edit2);

Si el campo de fecha lo tienes declarado como Texto, no eches cuenta a lo de arriba .


Un SELECT siempre devuelve datos, en forma de filas y columnas y casi siempre necesitarás un Grid u otro control para ver los resultados.

Un UPDATE / DELETE / INSERT nunca devuelve un conjunto de datos, como mucho devuelve en su propiedad RowsAffected el número de registros afectados por la instrucción (en Access no puedo asegurar que esto último que sea cierto, no he trabajado con él).

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 18-08-2006 a las 15:33:21.
Responder Con Cita
  #10  
Antiguo 18-08-2006
kman kman is offline
Miembro
 
Registrado: dic 2005
Ubicación: República Dominicana.
Posts: 67
Poder: 19
kman Va por buen camino
Interesante Explicación!

Gracias lepe!
Ya me quedó claro lo que debo hacer, gracias por la ayuda la pondré en práctica cuando llegue a casa(Estoy En El Trabajo Fuera De Delphi).
Solo espero que Access no me de problemas.

Gracias Mil!
Responder Con Cita
  #11  
Antiguo 18-08-2006
kman kman is offline
Miembro
 
Registrado: dic 2005
Ubicación: República Dominicana.
Posts: 67
Poder: 19
kman Va por buen camino
Cita:
Empezado por kman
Solo espero que Access no me de problemas.
Al final si me dio problemas: "Current Provider does not support returning multiple recordsets from a single execution".
Cita:
Empezado por Lepe
...como mucho devuelve en su propiedad RowsAffected el número de registros afectados por la instrucción (en Access no puedo asegurar que esto último que sea cierto, no he trabajado con él).
Que suerte la mia!

Última edición por kman fecha: 18-08-2006 a las 23:37:08.
Responder Con Cita
  #12  
Antiguo 19-08-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Mirando por el foro he encontrado este hilo, donde dice que la palabra "password" access la tiene reservada, por lo que no puede usarse. En este caso era un campo que se llamaba "password", no sé si pasa lo mismo con el nombre de una tabla.

Antes de hacer modificaciones, expón el código aqui para echarle un vistazo. Al menos, la sql y el procedimiento donde lo usas.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #13  
Antiguo 19-08-2006
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Lo más sencillo para responder a tu pregunta original era utilizar comillas dobles en la consulta de SQL. SQL acepta tanto sencillas como dobles para cadenas.
de manera que
Código SQL [-]
SET USER_PASSWORD='1'
Y
Código SQL [-]
SET USER_PASSWORD="1"
son equivalentes

Así que en Delphi puedes poner:

Código Delphi [-]
  MyQuery.SQL.Add( 'UPDATE TABLA SET USER_PASSWORD="1" ');

Y no tienes problema
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #14  
Antiguo 19-08-2006
kman kman is offline
Miembro
 
Registrado: dic 2005
Ubicación: República Dominicana.
Posts: 67
Poder: 19
kman Va por buen camino
Cita:
Empezado por Lepe
...Antes de hacer modificaciones, expón el código aqui para echarle un vistazo. Al menos, la sql y el procedimiento donde lo usas.
Saludos
Lo voy a dejar como caso perdido, el cambiar el nombre de la tabla implicaría muchos cambios de códigos donde utilizo la tabla. De todas formas pude hacer algo no profesional pero hace el trabajo:Cuando el usuario introduce su ID y clave realizo una busqueda en la tabla y comparo las fecha de vencimiento que si es igual a la actual editar el campo Status_Password igual a cero y blah blah blah.

Pero si estoy agradecido de todas las ayudas en especial las de LEPE, fueron muy instructivas!
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Que significa este codigo? D-MO PHP 14 23-01-2006 10:08:21
procedimiento almacenado ayuda con este codigo pipecato Varios 5 16-12-2005 12:24:34
No me gusta este Codigo, Me ayudan?! marceloalegre Varios 5 28-10-2005 01:27:27
Por que no funciona este codigo en XP? kia Varios 3 15-10-2003 21:39:33
¿Qué significa este Código de Control??? Combat-F2D Impresión 3 18-06-2003 00:23:48


La franja horaria es GMT +2. Ahora son las 01:36:06.


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