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 22-11-2016
pepe1853 pepe1853 is offline
Registrado
NULL
 
Registrado: nov 2016
Posts: 4
Poder: 0
pepe1853 Va por buen camino
Error SQL - UPDATE _ SET

Buenas tardes , les comento mi inquietud no encuentro manera de ejecutar mi consulta update
al ejecutarla parece que funciona todo bien con el mensaje de una supuesta inserción, pero luego me figura el siguiente error Token unknow - line1, colum9 SET

Código Delphi [-]
procedure TForm4.btnAceptarClick(Sender: TObject);

   var
    pro_IDproducto:String;
    pro_Nombre: String;
    pro_IDproveedor: String;
    pro_precioventa: String;
    pro_preciocosto: String;
    pro_stock: String;
    pro_estado: String;
    pro_categoria: String;
    consulta: String;

    begin
    pro_IDproducto:= DBEdit8.Text;
    pro_nombre:= DBENombre.Text;
    pro_IDproveedor:= DBEdit1.Text;
    pro_precioventa:= DBEPVenta.Text;
    pro_preciocosto:= DBEPCosto.Text;
    pro_stock:= DBEStock.Text;
    pro_estado:= DBEEstado.Text;
    pro_categoria:=DBECategoria.Text;


consulta:='UPDATE PRODUCTOS SET PRO_IDPROVEEDOR=:'+pro_IDproveedor+', PRO_NOMBRE=:'+pro_nombre+', PRO_PRECIOVENTA=:'+pro_precioventa+',
PRO_PRECIOCOSTO=:+'pro_preciocosto+', PRO_STOCK=:'+pro_stock+', PRO_ESTADO=:'+pro_estado+', PRO_CATEGORIA=:'+pro_categoria+' WHERE PRO_IDPRODUCTO=:'+pro_IDproducto+'';

    SQLQPROVEEDORES.SQL.text:=consulta;
    SQLQPROVEEDORES.ExecSQL;
    SQLQPROVEEDORES.ApplyUpdates;
    ShowMessage(consulta);

Espero por favor que alguien me pueda auxiliar! Gracias de antemano.

creo que lo publique en el sector equivocado al tema,por favor alguien lo podría mover si es así gracias!
Responder Con Cita
  #2  
Antiguo 23-11-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola pepe 1853, bienvenido a los foros de Club Delphi y como acostumbramos con los que ingresan te invitamos a que leas nuestra guía de estilo.

No revisé a fondo el código de la sentencia SQL pero en principio tendrías que usar la función QuotedStr al modo de:
Código Delphi [-]
  consulta := 'UPDATE PRODUCTOS SET PRO_IDPROVEEDOR=: '+ QuotedStr(pro_IDproveedor) + ...
Pero, de todos modos te aconsejo que acostumbres a usar parámetros, evita la inyección SQL y además es mucho mas claro de visualizar.

La modidificación que deseas hacer usando parámetros, quedaría mas o menos así:
Código Delphi [-]
...
var
  qy: TSQLQuery;
begin
  qy := SQLQPROVEEDORES;
  qy.Close;
  qy.SQL.Clear;
  qy.SQL.Add('UPDATE PRODUCTOS');
  qy.SQL.Add('SET PRO_IDPROVEEDOR = :IDPROVEED, PRO_NOMBRE = :NOMBRE,');
  qy.SQL.Add('PRO_PRECIOVENTA = :PVENTA, PRO_PRECIOCOSTO = :PCOSTO,');
  qy.SQL.Add('PRO_STOCK = :STOCK, PRO_ESTADO = :ESTADO, PRO_CATEGORIA = :CATEG');
  qy.SQL.Add('WHERE PRO_IDPRODUCTO = :IDPRODUC');
  qy.ParamByName('IDPROVEED').Value := DBEdit1.Text;;
  qy.ParamByName('NOMBRE').Value    := DBENombre.Text;
  qy.ParamByName('PVENTA').Value    := DBEPVenta.Text;
  qy.ParamByName('PCOSTO').Value    := DBEPCosto.Text;
  qy.ParamByName('STOCK').Value     := DBEStock.Text;
  qy.ParamByName('ESTADO').Value    := DBEEstado.Text;
  qy.ParamByName('CATEG').Value     := DBECategoria.Text;
  qy.ParamByName('IDPRODUC').Value  := DBEdit8.Text;
  qy.ExecSQL;
...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 23-11-2016
pepe1853 pepe1853 is offline
Registrado
NULL
 
Registrado: nov 2016
Posts: 4
Poder: 0
pepe1853 Va por buen camino
Muchas gracias ecfisa por tu respuesta y la bienvenida , tuve en cuenta todo lo que me comentaste, probé de las dos maneras, la primera por inyección agregándole la función que me señalaste, me funciona de igual manera que como lo tenia planteado anteriormente, parece que funciona pero cuanto toco refresh en la dbgrid me tira exactamente el mismo error, la segunda que me proporcionaste me tira el siguiente error "invalid varian type cast", ya no se que hacer, mi consulta insert funciona de maravilla pero con el update no logro hacerla funcionar. agrego como esta confeccionada mi tabla de datos por las dudas.
Código SQL [-]
PRO_IDPRODUCTO:  INTEGER
PRO_IDPROVEEDOR: INTEGER
PRO_NOMBRE: VARCHAR
PRO_PRECIOVENTA: FLOAT
PRO_PRECIOCOSTO: FLOAT
PRO_STOCK : SAMLLINT
PRO_ESTADO: CHAR(40)
PRO_CATEGORIA: CHAR (40)

Espero poder encontrar una solución, y muchísimas gracias por tu tiempo!
Saludos!
Responder Con Cita
  #4  
Antiguo 23-11-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por pepe1853 Ver Mensaje
...
la segunda que me proporcionaste me tira el siguiente error "invalid varian type cast", ya no se que hacer, mi consulta insert funciona de maravilla pero con el update no logro hacerla funcionar. agrego como esta confeccionada mi tabla de datos por las dudas.
Código SQL [-]
PRO_IDPRODUCTO:  INTEGER
PRO_IDPROVEEDOR: INTEGER
PRO_NOMBRE: VARCHAR
PRO_PRECIOVENTA: FLOAT
PRO_PRECIOCOSTO: FLOAT
PRO_STOCK : SAMLLINT
PRO_ESTADO: CHAR(40)
PRO_CATEGORIA: CHAR (40)
Dado el mensaje de error que mencionas, intenta asignar los valores de las columnas indicando su tipo:
Código Delphi [-]
...  
  qy.ParamByName('IDPROVEED').AsInteger := StrToInt( DBEdit1.Text );     // o, DBEdit1.Field.AsInteger; ...
  qy.ParamByName('NOMBRE').AsString     := DBENombre.Text;
  qy.ParamByName('PVENTA').AsFloat      := StrToFloat( DBEPVenta.Text ); // o, DBEPVenta.Field.AsFloat; ...
  qy.ParamByName('PCOSTO').AsFloat      := StrToFloat( DBEPCosto.Text );
  qy.ParamByName('STOCK').AsInteger     := StrToInt( DBEStock.Text );
  qy.ParamByName('ESTADO').AsString     := DBEEstado.Text;
  qy.ParamByName('CATEG').AsString      := DBECategoria.Text;
  qy.ParamByName('IDPRODUC').AsInteger  := StrToInt(DBEdit8.Text);
...
Estoy suponiendo que usas los componentes dbExpress, lo anterior podría no ser así con otros. Por cierto, ¿ A que RDBMS te estas conectando ?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 23-11-2016
pepe1853 pepe1853 is offline
Registrado
NULL
 
Registrado: nov 2016
Posts: 4
Poder: 0
pepe1853 Va por buen camino
Thumbs up

Muchísimas gracias ecfisa!!!! me funciono perfecto asignándole los valores de las columnas indicando su tipo , quedó de mil maravillas!!
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
UPDATE Syntax Error martini002 SQL 22 26-08-2012 04:49:52
Error en Update con access ramphi Tablas planas 2 27-05-2011 21:03:36
Error: Update Failed Rogersito Plus Firebird e Interbase 7 09-09-2008 16:10:50
Error de Sintaxis en update SQL luxus SQL 3 08-08-2006 16:40:01
Error SQL - UPDATE _ SET ... Durbed Conexión con bases de datos 2 13-12-2004 18:09:05


La franja horaria es GMT +2. Ahora son las 13:33:55.


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