Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Insertar con zquery (https://www.clubdelphi.com/foros/showthread.php?t=53565)

schaka 24-02-2008 03:00:52

Insertar con zquery
 
Hola que tal , tengo un problema para insertar registros en una tabla usando zquery, que he llamado Remision en este caso , he intentado de varias maneras , pero no he podido hacerlo , aqui les pongo mis codigos que utilizo para insertar, no se cual sea el problema pero no lo hace, espero alguien pueda ayudarme , gracias.


Código Delphi [-]
 Remision.SQL.Add('INSERT INTO remision (clave,Producto,PrecioU,cantidad,Precio,descuento,subtotal) VALUES(:Clave,: producto,: precioU,: Cantidad,: precio,: Descuento,: Subtotal)');
Remision.ParamByName('Clave').AsString := DProductos.Fields[0].AsString;
Remision.ParamByName('producto').AsString := DProductos.Fields[1].AsString;
Remision.ParamByName('precioU').AsInteger := DProductos.Fields[4].AsInteger;
Remision.ParamByName('precio').AsInteger:= DProductos.Fields[3].AsInteger;
Remision.ParamByName('Cantidad').AsInteger:= 100;
Remision.ParamByName('Descuento').AsInteger:= 200;
Remision.ParamByName('Subtotal').AsInteger := 300;

  Remision.ExecSQL;

schaka 24-02-2008 03:03:52

aqui les pongo otra forma que utilice


Código Delphi [-]
Clave:=DProductos.Fields[0].AsString;
  producto:=DProductos.Fields[1].AsString;
  precioU:=DProductos.Fields[4].AsString;
  precio:=DProductos.Fields[3].AsString;
  Descuento:= '100' ;
  Subtotal:= '200' ;
  Cantidad :='300';

 consulta:='INSERT INTO remision VALUES(clave,Producto,PrecioU,cantidad,Precio,descuento,subtotal)'; 
Remision.close;
Remision.sql.clear;
Remision.sql.add(consulta);
 Remision.open;
 Remision.ExecSQL;

En este ultimo parece solo me inserta valores NULL en mi tabla

schaka 24-02-2008 04:00:43

y tambien de esta otra forma y no he podido hacerlo con exito

Código Delphi [-]
Clave:=DProductos.Fields[0].AsString;
  producto:=DProductos.Fields[1].AsString;
  precioU:=DProductos.Fields[4].AsString;
  precio:=DProductos.Fields[3].AsString;
  Descuento:= '100' ;
  Subtotal:= '200' ;
  Cantidad :='300';

 consulta:='Insert Into remision (clave,Producto,PrecioU,cantidad,Precio,descuento,subtotal) '+
   'values ('+Clave+','+producto+','+precioU+','+Cantidad+','+precio+','+Descuento+','+Subtotal+')';
Remision.close;
 Remision.sql.clear;
  Remision.sql.add(consulta);
  Remision.open;
 Remision.ExecSQL;

Lepe 24-02-2008 13:55:52

El primer método es el correcto y la forma más habitual. Lo único que veo es que separas los nombres de parámetros de los dos puntos en el sql. Quizás Zeos no tenga en cuenta ese pequeño detalle, no sé.


Por lo demás debe funcionar:

Código SQL [-]
VALUES(:Clave,: producto,: precioU,: Cantidad,: precio

Debería ser:

Código SQL [-]
VALUES(:Clave, :producto, :precioU, :Cantidad, ..

Saludos

schaka 24-02-2008 20:19:05

Bueno `pues los dos puntos que parecen separados, no lo estan , pero aun asi me manda errror de sintaxis al querer insertar, no se a que se deba, gracias

Lepe 24-02-2008 20:55:49

¿qué error exactamente? Eso suele ayudar antes de imaginar que se trate de transacciones ;).

Saludos

schaka 24-02-2008 21:04:43

SQL error :you have an error in your SQL sintaxis; check the manual that corresponds toyour MYSQL server version for the right sintax to use near ;INSERT INTO remision (clave,Producto,PrecioU,cantidad,Precio,descuento,subtotal )

Uso delphi 7 y mysql 5, gracias

Caral 24-02-2008 21:15:06

Hola
Aparte de lo dicho por Lepe en lo que coincido plenamente, hay que tener en cuenta que estas usando ADD, eso quiere decir que si hay alguna sentencia en el query se añadira ocasionando errores (por eso me gusta mas text)
que tal asi:
Código Delphi [-]
Remision.Clear;
Remision.Close;
 Remision.SQL.Add('INSERT INTO remision (clave,Producto,PrecioU,cantidad,Precio,descuento,subtotal) VALUES(:Clave, :Producto, :PrecioU, :Cantidad, :Precio, :descuento, :Subtotal)');
Remision.ParamByName('Clave').AsString := DProductos.Fields[0].AsString;
Remision.ParamByName('Producto').AsString := DProductos.Fields[1].AsString;
Remision.ParamByName('PrecioU').AsInteger := DProductos.Fields[4].AsInteger;
Remision.ParamByName('Precio').AsInteger:= DProductos.Fields[3].AsInteger;
Remision.ParamByName('Cantidad').AsInteger:= 100;
Remision.ParamByName('descuento').AsInteger:= 200;
Remision.ParamByName('Subtotal').AsInteger := 300;

  Remision.ExecSQL;
Otra seria tambien quitar el AsString o AsInteger y cambiarlo por Value, aunque no creo que tenga que ver con el error.
Saludos

schaka 24-02-2008 21:34:49

Muchisimas gracias, creo que ya he podido solucionar el problema , al parecer solo tenia que anteponer las lineas
Remision.sql.Clear;
Remision.Close;

o no se que le hice ,pero ya me funciona, muchisimas gracias a todos por su ayuda,

Caral 24-02-2008 21:52:35

Hola
Por eso me gusta usar text, no hay que acordarse de limpiar el query ni nada.
Código Delphi [-]
Remision.SQL.Text:= 'INSERT INTO remision (clave,Producto,PrecioU,cantidad,Precio,descuento,subtotal) '+
                    'VALUES(:Clave, :Producto, :PrecioU, :Cantidad, :Precio, :descuento, :Subtotal)';
Remision.ParamByName('Clave').AsString := DProductos.Fields[0].AsString;
Remision.ParamByName('Producto').AsString := DProductos.Fields[1].AsString;
Remision.ParamByName('PrecioU').AsInteger := DProductos.Fields[4].AsInteger;
Remision.ParamByName('Precio').AsInteger:= DProductos.Fields[3].AsInteger;
Remision.ParamByName('Cantidad').AsInteger:= 100;
Remision.ParamByName('descuento').AsInteger:= 200;
Remision.ParamByName('Subtotal').AsInteger := 300;
Remision.ExecSQL;
La diferencia es sencilla y sutil pero ayuda, por lo menos a mi.
Saludos


La franja horaria es GMT +2. Ahora son las 08:06:27.

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