Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Bases de datos > MS SQL Server
Register FAQ Members List Calendar Guía de estilo Today's Posts

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 03/11/2022
giantonti1801 giantonti1801 is offline
Miembro
 
Join Date: Oct 2022
Posts: 143
Poder: 4
giantonti1801 Va por buen camino
Talking duda de Update usando label.caption

Buena noche no logro congeniar con esta formula:
Quiere hacer un Update en la base de dato SQL de algunos campo:
Code:
        begin
        ADOQueryUpdate.SQL.Clear;
        ADOQueryUpdate.SQL.Add( 'UPDATE Tiket SET' );
        ADOQueryUpdate.SQL.Add( 'Estatus = 'OLD');
        ADOQueryUpdate.SQL.Add(' WHERE Item = ' +Trim(Label3.Caption));
        ADOQueryUpdate.ExecSQL;
        //ADOQueryUpdate.Refresh;
        end;
el acxion se ejecuta con un Speedbuton

En el label3 tengo el numero de registro dentro de la base de datos llamado ITEM, esta imformacion es traida por otra consulta SQL la cual Funciona sin ningun problema.
Lo que pretendo hacer es hacer un UPDATE de la tabla TIKET donde le cambio el valor que tiene el campo ESTATUS a 'OLD' especificamente del registro contenido dentro de Label3.caption, Claro esta que tebo modificar otros campos tambien con la misma condicion todos contenidos en los label.caption. pero ahora queria probar con uno solo y si funcionaba le agtregaba lo demas. Al momento de ejecutarlo me da un error que dice que no consigue el campo OLD.
Aqui donde digo yo, 'los misterios del SQL son infinito'.....
Reply With Quote
  #2  
Old 03/11/2022
dec's Avatar
dec dec is offline
Moderador
 
Join Date: Dec 2004
Location: Alcobendas, Madrid, España
Posts: 13,145
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

Si no me equivoco, lo que ocurre es que las comillas no están bien utilizadas, al menos en esta parte:

Código Delphi [-]
ADOQueryUpdate.SQL.Add( 'Estatus = 'OLD');

De hecho... no sé cómo te compila eso... pero en fin, sea como sea, creo que al menos esa parte de la consulta debería quedar así:

Código Delphi [-]
ADOQueryUpdate.SQL.Add( 'Estatus = "OLD"');

... puesto que el error se refiere a que se está usando "OLD" literalmente, como si fuese el nombre de un "campo", y, por eso no encuentra ese "campo". En la posible solución "OLD" se encierra entre comillas, de modo que ya no se trata de un "campo", sino del valor que le quieres dar al campo "Estatus".

Investiga en todo caso sobre cómo "parametrizar" consultas SQL en Delphi, puesto que considero que se evitan problemas de este tipo y se obtienen mejores garantías de que las consultas van a funcionar y además las propias consultas quedan "más elegantes".
__________________
David Esperalta
www.decsoftutils.com
Reply With Quote
  #3  
Old 03/11/2022
kuan-yiu's Avatar
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Join Date: Jun 2006
Location: Galicia. España.
Posts: 1,017
Poder: 22
kuan-yiu Va camino a la fama
Comillas.
Código Delphi [-]
ADOQueryUpdate.SQL.Add( 'Estatus = 'OLD');
Código Delphi [-]
ADOQueryUpdate.SQL.Add( 'Estatus = "OLD" ');
ADOQueryUpdate.SQL.Add( 'Estatus = ' +QuotedStr('OLD'));
Y de paso parametriza, que siempre es buena idea:
Código Delphi [-]
ADOQueryUpdate.SQL.Add(' WHERE Item =:valor');
 ParamByName('valor').AsString := Trim(Label3.Caption);
Reply With Quote
  #4  
Old 03/11/2022
dec's Avatar
dec dec is offline
Moderador
 
Join Date: Dec 2004
Location: Alcobendas, Madrid, España
Posts: 13,145
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

Quote:
Originally Posted by kuan-yiu View Post
Y de paso parametriza, que siempre es buena idea:
Código Delphi [-]
ADOQueryUpdate.SQL.Add(' WHERE Item =:valor');
 ParamByName('valor').AsString := Trim(Label3.Caption);
¡Haz caso a quien sabe!
__________________
David Esperalta
www.decsoftutils.com
Reply With Quote
  #5  
Old 03/11/2022
giantonti1801 giantonti1801 is offline
Miembro
 
Join Date: Oct 2022
Posts: 143
Poder: 4
giantonti1801 Va por buen camino
Quote:
Originally Posted by kuan-yiu View Post
Comillas.
Código Delphi [-]
ADOQueryUpdate.SQL.Add( 'Estatus = 'OLD');
Código Delphi [-]
ADOQueryUpdate.SQL.Add( 'Estatus = "OLD" ');
ADOQueryUpdate.SQL.Add( 'Estatus = ' +QuotedStr('OLD'));
Y de paso parametriza, que siempre es buena idea:
Código Delphi [-]
ADOQueryUpdate.SQL.Add(' WHERE Item =:valor');
 ParamByName('valor').AsString := Trim(Label3.Caption);
Gracias por responder amigo:
Aun no me rindo, pero aun tampoco tengo la solucion colocando el codigo tal cual tu mencionaste me da un erro que lo voy a adjuntar

Code:
begin
        Close;
        ADOQueryUpdate.SQL.Clear;
        ADOQueryUpdate.SQL.Add( 'UPDATE Tiket SET');
        ADOQueryUpdate.SQL.Add( 'Estatus = "OLD" ');
        ADOQueryUpdate.SQL.Add( 'Estatus = ' +QuotedStr('OLD'));
        ADOQueryUpdate.SQL.Add(' WHERE Item =:valor');
        ADOQueryUpdate.Parameters.ParamByName('Valor').Value := StrToInt(Label3.Caption);
        ADOQueryUpdate.ExecSQL;
        end;
Hay una cosa que no entiendo del código y talvez alli el error
Código Delphi [-]
ADOQueryUpdate.SQL.Add(' WHERE Item =:valor');
yo no temg ningún campo o resultado que se llame 'valor', por lo que puedo asumir que este 'valor' sea una constante que abajo se le esta pasando el valor contenido en el Label3.caption, y de ser asi en el futuro tengo que hacer lo mismo con cada campo a la cual le voy a pasar el valor de un label?

Yo no se y quiero entender como una instrucion tan simple el SQL
Código SQL [-]
 Update Tiket set Estatus = 'NEW' Where Item = '2'
donde solo quiero cambiar el valor que esta en el 2 y colocarle un valor contenido en un label se ha convertido en un problema

Last edited by giantonti1801 : 29/03/2023 at 20:43.
Reply With Quote
  #6  
Old 03/11/2022
kuan-yiu's Avatar
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Join Date: Jun 2006
Location: Galicia. España.
Posts: 1,017
Poder: 22
kuan-yiu Va camino a la fama
Puse dos opciones para la misma linea, jeje, no tienes que usar las dos, sino la que prefieras: con comillas o con QuotedStr (que es la que a mi me gusta más).
Por eso te da error, piensa que son dos campos y espera una coma en medio.
Reply With Quote
  #7  
Old 03/11/2022
giantonti1801 giantonti1801 is offline
Miembro
 
Join Date: Oct 2022
Posts: 143
Poder: 4
giantonti1801 Va por buen camino
Quote:
Originally Posted by kuan-yiu View Post
Puse dos opciones para la misma linea, jeje, no tienes que usar las dos, sino la que prefieras: con comillas o con QuotedStr (que es la que a mi me gusta más).
Por eso te da error, piensa que son dos campos y espera una coma en medio.

Si puedo entender eso pero a cual te refiere, talvez seria de ayuda si escribiera el codigo tal cual como deberia ir.

Muchas gracias por tu ayuda
Reply With Quote
  #8  
Old 03/11/2022
giantonti1801 giantonti1801 is offline
Miembro
 
Join Date: Oct 2022
Posts: 143
Poder: 4
giantonti1801 Va por buen camino
Quote:
Originally Posted by giantonti1801 View Post
Si puedo entender eso pero a cual te refiere, talvez seria de ayuda si escribiera el codigo tal cual como deberia ir.

Muchas gracias por tu ayuda
Listo, ya con tu ayuda pude resolver el problema, muchissimas gracias....

Código Delphi [-]
begin
        Close;
        ADOQueryUpdate.SQL.Clear;
        ADOQueryUpdate.SQL.Add( 'UPDATE Tiket SET');
        ADOQueryUpdate.SQL.Add( 'Estatus = ' +QuotedStr('OLD'));
        ADOQueryUpdate.SQL.Add(' WHERE Item =:valor');
        ADOQueryUpdate.Parameters.ParamByName('Valor').Value := StrToInt(Label3.Caption);
        ADOQueryUpdate.ExecSQL;
        end;

Para ayudar a otros foreros que tengan el mismo problema el codigo quedo Asi.
Reply With Quote
  #9  
Old 04/11/2022
Casimiro Noteví's Avatar
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Join Date: Sep 2004
Location: En algún lugar.
Posts: 32,700
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Quote:
Originally Posted by giantonti1801 View Post
...
Creo que ya es momento de que le eches un vistazo a nuestra guía de estilo, gracias.
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Cambiar el caption de un Label(LinkLabel, etc) en tiempo de ejecución Missael Delphi para la web 2 19/09/2018 23:14
label.caption en 2 renglones ingel Varios 5 16/04/2018 23:13
No cambia caption el label giulichajari Varios 2 07/07/2015 05:08
Caption de Label en varias filas Novatin C++ Builder 6 03/07/2013 05:24
Pierdo datos de memo.text a label.caption jgarcias2 OOP 7 18/04/2011 19:27


All times are GMT +2. The time now is 08:51.


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