Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-11-2022
giantonti1801 giantonti1801 is offline
Miembro
 
Registrado: oct 2022
Posts: 143
Poder: 2
giantonti1801 Va por buen camino
Update repetido el primero Funciona pero el segundo no

Hola amigo tengo una consulta tengo esta instrucion pegada a un boton

Código Delphi [-]
 Begin
           ADOQueryUpdate.Open;
            ADOQueryUpdate.SQL.ADD('update tiket set Estatus = :Estatus,Usuario= :Usuario WHERE Item = :Item');
            ADOQueryUpdate.Parameters.ParamByName ('Estatus').Value := 'OLD';
            ADOQueryUpdate.Parameters.ParamByName ('Usuario').value := Label4.Caption;
            ADOQueryUpdate.Parameters.ParamByName ('Item').value := Label3.Caption;
            ADOQueryUpdate.ExecSQL;
            ShowMessage ('LO GRABE');
                begin
                ADOQuery1.Close;
                ADOQuery1.Open;
                    begin
                     Label1.Caption := 'A00' + ADOQuery1.fieldbyname('Item').asstring;
                     Label3.Caption := ADOQuery1.fieldbyname('Item').asstring;
                     Image3.Visible := true;
                     ShowMessage ('SIGUIENTE');
                     
                     end

Cuando lo ejecuto por primera vez me funciona perfecto pero al ejecutarlo por segunda vez me da error, posiblemente hay algo que esto dejando abierto o cerrado o no lo se pero no me deja avanzar,
Responder Con Cita
  #2  
Antiguo 04-11-2022
giantonti1801 giantonti1801 is offline
Miembro
 
Registrado: oct 2022
Posts: 143
Poder: 2
giantonti1801 Va por buen camino
Update fecha actual

hola amigo, quiero al momento de hace un update colocar tambien que me guarde DATETIME() NOW

Código Delphi [-]
ADOQueryUpdate.Open;
            ADOQueryUpdate.SQL.ADD('update tiket set Estatus = :Estatus,Usuario= :Usuario WHERE Item = :Item');
            ADOQueryUpdate.Parameters.ParamByName ('Estatus').Value := 'OLD';
            ADOQueryUpdate.Parameters.ParamByName ('Usuario').value := Label4.Caption;
            ADOQueryUpdate.Parameters.ParamByName ('Item').value := Label3.Caption;
            ADOQueryUpdate.ExecSQL;

quiero incorporarlo aqui en esta instrucion mi campo en la base de datos es de tipo TIMESTAMP yo se que la mejor forma de hacer es a travez de un tiger en la base de datos pero no supe hacerlo. Cabe destacar que ya tengo un campo de la base de datos de tipo timestamp la cual se guarda la fecha y hora al momento de crear un registro, pero quiero hacer uno tambien que guarde la fecha y la hora de las modificaciones.
Responder Con Cita
  #3  
Antiguo 04-11-2022
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Deberías mencionar el texto del error, pero yo apostaría a que te dice que el SQL no está bien formado.

Código Delphi [-]
Begin
   ADOQueryUpdate.Open;
   // Primero borro lo que hubiera, ya que la segunda vez se agregará otra línea al SQL
   ADOQueryUpdate.SQL.Clear;
   ADOQueryUpdate.SQL.ADD('update tiket set Estatus = :Estatus,Usuario= :Usuario WHERE Item = :Item');
...

También supongo que para poder modificar el SQL deberías tener el ADOQuery Cerrado (haciendo ADOQueryUpdate.Close).
Responder Con Cita
  #4  
Antiguo 04-11-2022
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Para que guarde la fecha de modificación lo mejor, como comentas, es hacerlo por trigger.
Suele ser sencillo. Por ejemplo, en Firebird sería algo así
Código SQL [-]
create trigger ticket_bu0 for ticket active before update position 0
as
begin
    new.fecha_ultima_modificacion = 'NOW';
end

Si lo quieres hacer en el update sería parecido:
Código Delphi [-]
ADOQueryUpdate.SQL.ADD('update tiket set Estatus = :Estatus,Usuario= :Usuario, fecha_ultima_modificacion = ''NOW'' WHERE Item = :Item');

A tener en cuenta: ¿Qué fecha deseas utilizar?
La del servidor de base de datos o la del ordenador que ejecuta la aplicación.
Puede ser que el ordenador esté en España y el servidor hospedado en Estados Unidos, con una diferencia horaria que necesitas tener en consideración.

Si deseas la fecha del ordenador, deberás pasarla por parámetro:
Código Delphi [-]
ADOQueryUpdate.SQL.ADD('update tiket set Estatus = :Estatus,Usuario= :Usuario, fecha_ultima_modificacion = :fecha_ultima_modificacion WHERE Item = :Item');
...
ADOQueryUpdate.Parameters.ParamByName ('fecha_ultima_modificacion').Value := Now;
Responder Con Cita
  #5  
Antiguo 04-11-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por giantonti1801 Ver Mensaje
...
Creo que ya es momento de que le eches un vistazo a nuestra guía de estilo, gracias.
Responder Con Cita
  #6  
Antiguo 04-11-2022
giantonti1801 giantonti1801 is offline
Miembro
 
Registrado: oct 2022
Posts: 143
Poder: 2
giantonti1801 Va por buen camino
Cita:
Empezado por duilioisola Ver Mensaje
Deberías mencionar el texto del error, pero yo apostaría a que te dice que el SQL no está bien formado.

Código Delphi [-]
Begin
   ADOQueryUpdate.Open;
   // Primero borro lo que hubiera, ya que la segunda vez se agregará otra línea al SQL
   ADOQueryUpdate.SQL.Clear;
   ADOQueryUpdate.SQL.ADD('update tiket set Estatus = :Estatus,Usuario= :Usuario WHERE Item = :Item');
...

También supongo que para poder modificar el SQL deberías tener el ADOQuery Cerrado (haciendo ADOQueryUpdate.Close).
gracias, pero en que momento o parte del codigo los cierro con ADOQueryUpdate.Close porque creeme no se si sera esto pero me sigue dando error.

Código Delphi [-]
ADOQueryUpdate.Open;
            ADOQueryUpdate.SQL.Clear;
            ADOQueryUpdate.SQL.ADD('update tiket set Estatus = :Estatus,Usuario= :Usuario WHERE Item = :Item');
            ADOQueryUpdate.Parameters.ParamByName ('Estatus').Value := 'OLD';
            ADOQueryUpdate.Parameters.ParamByName ('Usuario').value := Label4.Caption;
            ADOQueryUpdate.Parameters.ParamByName ('Item').value := Label3.Caption;
            ADOQueryUpdate.ExecSQL;

Última edición por giantonti1801 fecha: 29-03-2023 a las 20:43:36.
Responder Con Cita
  #7  
Antiguo 04-11-2022
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
Te estás complicando demasiado por querer ir rápido. Como te han recomendado te iría bien un repaso general sobre SQL y componentes Delphhi que manejan SQL.
Prueba cada sentencia SQL contra la BD que usas, consulta la ayuda de Delphi, la de la BD, busca en Google...

Siempre es bueno parametrizar (o sea poner "=:") porque evita ciertos errores y problemas.

Siempre que lo sepas PASA EL PARÁMETRO CON TIPO.
Usar ".Value" solo para casos muy concretos en los que no puedas concretar, porque sino puedes tener problemas con los nulos, los blancos... y deberías especificar el tipo de parámetro lo que lo complica todo mucho más y resulta innecesario para lo que necesitas.

".AsString" si es string, varchar...
".AsInteger" si es integer...
".AsFloat" si es extended, double...
Código Delphi [-]
// Aquí defines la consulta
ADOQueryUpdate.SQL.Clear;
ADOQueryUpdate.SQL.ADD('update tiket set Estatus = :Estatus,Usuario= :Usuario WHERE Item = :Item');
ADOQueryUpdate.prepare; // Con esto le dices que la vas a usar muchas veces

// Ejecutas SOLO esto por cada modificación
ADOQueryUpdate.ParamByName ('Estatus').AsString:= 'OLD';
ADOQueryUpdate.ParamByName ('Usuario').AsString:= Label4.Caption;
// Si 'Item' es tipo entero o float ponlo y transforma el caption como corresponda: strToInt(Label3.Caption)
ADOQueryUpdate.ParamByName ('Item').AsString:= Label3.Caption; 
ADOQueryUpdate.ExecSQL;
Responder Con Cita
  #8  
Antiguo 04-11-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Es que va dando palos de ciego por todos lados, así no sirve porque, aunque consiguiera hacerlo funcionar, no sabría el porqué funcionó.
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
No me funciona el keyword shortcut cuando el programa esta inactivo o segundo plano!! Jorgeeyv Varios 6 06-03-2018 10:24:37
Update con Inner Join Funciona en Access pero no en firebird Acanol Firebird e Interbase 7 27-05-2012 01:25:48
funciona bien en windows 7 64b pero en XP no funciona ASAPLTDA Varios 5 06-05-2011 16:24:50
No me funciona UPDATE maravert PHP 4 26-11-2009 17:21:37
Update!!!, pero solo para un registro ELINK Firebird e Interbase 6 08-01-2008 20:26:41


La franja horaria es GMT +2. Ahora son las 23:35: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
Copyright 1996-2007 Club Delphi