Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   !!!error de sintaxis en el INSERT INTO (https://www.clubdelphi.com/foros/showthread.php?t=38140)

huwabe78 04-12-2006 20:40:51

!!!error de sintaxis en el INSERT INTO
 
Q tal, unas ves mas con dudas, ahora tengo un error de sintaxis en el INSERT INTO, ya no puedo mas de modificar y reveer cosas, por favor si alguien me puede echar una mano estaria mas que agradecido.

el codigo es el siguiente:

Código Delphi [-]
procedure TFacturacion.Button1Click(Sender: TObject);
var TOTALD: string;
    PRECIO_UNIT : string;
begin
ADOQuery1.close;
ADOQuery1.SQL.clear;
ADOQuery1.SQL.add ('SELECT * FROM productos');
ADOQuery1.SQL.add ('WHERE codigo = '+Edit1.Text+'');
try
ADOQuery1.open;
except
end;
if strtoint(Edit2.Text) > ADOQuery1.FieldByName('stock').AsInteger
then begin
showmessage ('INGRESE UNA CANTIDAD ACORDE A '+ADOQuery1.FieldByName('stock').AsString+' UNIDADES');
edit2.SetFocus;
edit2.SelectAll;
      end
else begin
TOTALD:= inttostr(ADOQuery1.FieldByName('precio').Value * ADOQuery1.FieldByName('stock').Value);
PRECIO_UNIT:=ADOQuery1.FieldByName('precio').Asstring;
ADOQuery3.close;
ADOQuery3.SQL.clear;
ADOQuery3.SQL.add ('INSERT INTO facturaciones (num_fact,producto,Imp_prod,cant_prod,cliente,fecha,importe_total)');
ADOQuery3.SQL.add ('VALUE ('+inttostr (numfac)+','+edit1.Text+','+PRECIO_UNIT+','+edit2.text+','+edit3.Text+','+datetostr(DATE)+','+TOTALD  +')');
try
ADOQuery3.ExecSQL;
except
end;
     end;
end;

Caral 04-12-2006 20:55:27

Hola huwabe78
Tal vez si colocas la sentencia diferente se veria el error de sintaxis mejor.
Yo lo haria asi:
Código Delphi [-]
ADOQuery3.close;
ADOQuery3.SQL.clear;
ADOQuery3.SQL.Text'INSERT INTO facturaciones (num_fact,producto,Imp_prod,cant_prod,cliente,fecha,importe_total)' +
'VALUE ('+inttostr (numfac)+','+edit1.Text+','+PRECIO_UNIT+','+edit2.text+','+edit3.Text+','+datetostr(DATE)+','+TOTALD  ');
try
Tal vez asi puedas huvicar el error mejor.
Saludos

roman 04-12-2006 20:57:03

Justo antes del ADOQuery3.ExecSQL coloca la línea:

Código Delphi [-]
ShowMessage(ADOQuery3.SQL.Text);

Esto te mostrará como queda el texto final de la consulta SQL. Muy posiblemente así te des cuenta de donde está el error (que generalmente se debe a que los valores del los Edits no son lo que uno piensa). Si aún así no percibes la causa, coloca aquí el texto del ShowMesaage para que podamos examinarlo.

Otra cosa: en lo sucesivo te pido que uses las etiquetas [delphi] para publicar código delphi tal como he hecho yo por tí en esta ocasión.

// Saludos

luisgutierrezb 04-12-2006 21:48:11

pues a primera vista hay valores alfanumericos que no les pones comillas ademas de la fecha, y otra cosa, segun yo es VALUES no VALUE...

vtdeleon 05-12-2006 00:37:31

Intenta usar parametros (Params)

Código Delphi [-]
With AdoQuery3 do 
begin
  ...
  ...
  SQL.add ('INSERT INTO facturaciones (num_fact, producto, Imp_prod, cant_prod, cliente, fecha, importe_total)');
  SQL.add ('VALUE (:fact, :Prod, :IProd, :CantProd, :Client, :fecha, :Total');
  With Parameters do
  begin
    ParamByName('fact').Value:=numfact;
    ParamByName('prod').Value:=Edit1.text;
    ParamByName('IProd').Value:=Precion_Unit;
    ParamByName('CantProd').Value:=Edit2.Text;
    ParamByName('Client').Value:1=Edit3.Text;
    ParamByName('Fecha').Value:=Date;
    ParamByName('total').Value:=TOTALD;
    ...
  end;
  ...
Quizas veas que es mas codigo...

Edito:Corrigiendo AsValue por Value

nachoalbano 05-12-2006 00:45:55

Utilizando Parámetros?
 
Buenas.
Porqué no realizas en tiempo de diseño la escritura de la query en el atributo SQL del componente ADOQuery. Lo que tendrás que hacer es poner lo siguiente:

Código SQL [-]
 
INSERT INTO facturaciones (num_fact,producto,Imp_prod,cant_prod,cliente,fecha,importe_total)
VALUES (:numfac, :param1, :param2, :PRECIO_UNIT, :param3, :param4, getdate(), :TOTALD)

Los valores que tienen dos puntos adelante son parámetros, los mismos se configuran desde el atributo parameters del ADOQuery, donde podés seleccionar de que tipo son. Generalmente el componente detecta los tipos de datos esperados y configura automáticamente cada tipo de dato de cada parámetro.

Ahora lo que deberías hacer es cargar los valores de los parámetros con
Código Delphi [-]
ADOQuery1..Parameters.ParamByName('numfac').value = inttostr (numfac);
// asi con todos los parámetros

Espero que te ayude

PD: en la query habias puesto value y es values


La franja horaria es GMT +2. Ahora son las 20:57:59.

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