Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Error Insert SQL!! (https://www.clubdelphi.com/foros/showthread.php?t=82237)

XcamX 12-02-2013 17:08:32

Error Insert SQL!!
 
Buenos dias a todos, necesito si alguien me puede ayudar por favor.
Paso a describir el error que me da una consulta de insercion en SQL, estoy trabajando con delphi 6 y bases de MySql.

La descripcion del error es esta "Operation no Applicable" en la linea SqlGrabar.ExecSQL.

Código Delphi [-]
with SqlGrabar do
begin
active:=false;
Sql.Clear;
SQL.add('INSERT INTO creditos(idcredito,idcliente,fechacred,tipoventa,montoprestado,interes,cantcuotas,tipopago,idemp,fec  hafin,interesmora,diacobro,estado,montocuota,montototal)'+
'value(:idcred,:idcliente,:feccred,:tventa,:montoprest,:inte,:cantc,:tpago,:idemp,:fecfin,:intemora,  :diacobro,:estado,:montoc,:montot)');
ParamByName('idcred').asinteger:=strtoint(label3.caption);
ParamByName('idcliente').asinteger:=strtoint(edit3.text);
ParamByName('feccred').AsDateTime:=strtodate(maskedit1.text);
ParamByName('tventa').asstring:=combobox3.text;
ParamByName('montoprest').AsFloat:=strtofloat(abfedit1.text);
ParamByName('inte').asinteger:=strtoint(abfedit2.text);
ParamByName('cantc').asinteger:=strtoint(abfedit3.text);
ParamByName('tpago').asstring:=combobox5.text;
ParamByName('idemp').asstring:=label33.caption;
ParamByName('fecfin').asDateTime:=strtodate(listacuota.Cells[0,2]);
ParamByName('intemora').asinteger:=0;
ParamByName('diacobro').asstring:=combobox4.text;
ParamByName('estado').asstring:='DEBE';
ParamByName('montoc').asfloat:=strtofloat(abfedit4.text);
ParamByName('montot').asfloat:=strtofloat(abfedit13.text);
SqlGrabar.ExecSQL;
end;
end;
dm.Creditos.Refresh;

Si alguien me pudiera dar una ayudita para encontrar ese error les estaria muy agradecido.

Casimiro Notevi 12-02-2013 17:40:38

Has puesto "value" en lugar de "values"

XcamX 12-02-2013 18:00:39

Casimiro agradesco tu respuesta pero la sentencia es "value", de todas formas probe con "values" y me da el mismo error

Casimiro Notevi 12-02-2013 18:11:04

No, amigo, no es value, es values

Código:

mysql> INSERT INTO table (a,b,c) VALUES (1,2,3)
Cita:

SQL.add('INSERT INTO creditos(idcredito,idcliente,fechacred,tipoventa,montoprestado,interes,
cantcuotas,tipopago,idemp,fec...hafin,interesmora,diacobro,estado,montocuota,montototal)'+ 'value(:idcred,:idcliente,:feccred,:tventa,:montoprest,:inte,:cantc,:tpago,:idemp,
:fecfin,:intemora, :diacobro,:estado,:montoc,:montot)');
Ahí tienes el error

olbeup 12-02-2013 18:53:47

Hola XcamX,

Es VALUES, según el enlace se puede utilizar, pero fíjate en todos los ejemplos que utiliza VALUES no VALUE

Que ojo de halcón tienes Casimiro

Un saludo.

XcamX 12-02-2013 20:05:59

Hola amigos, ya probe con values pero me sigue dando el error, con respecto a fechafin asi se llama el campo en la base de datos, y fecfin es el nombre del parametro al que le asigno el valor, no me equivoque al poner el nombre.

Casimiro Notevi 12-02-2013 20:10:35

Vamos a ver, ¿pero has visto tu código?, no has puesto fechafin, has puesto:
fec..hafin

Con 2 espacios por medio.

XcamX 12-02-2013 20:25:40

tenes razon, asi salio el codigo cuando lo puse aca, pero revisando el codigo en el programa esta bien puesto fechafin lo subo de nuevo para que lo veas si?

Código Delphi [-]
with SqlGrabar do
begin
active:=false;
Sql.Clear;
SQL.add('INSERT INTO creditos(idcredito,idcliente,fechacred,tipoventa,montoprestado,interes,cantcuotas,tipopago,idemp,
               fechafin,interesmora,diacobro,estado,montocuota,montototal)'+
        'value(:idcred,:idcliente,:feccred,:tventa,:montoprest,:inte,:cantc,:tpago,:idemp,
               :fecfin,:intemora,:diacobro,:estado,:montoc,:montot)');
    ParamByName('idcred').asinteger:=strtoint(label3.caption);
    ParamByName('idcliente').asinteger:=strtoint(edit3.text);
    ParamByName('feccred').AsDateTime:=strtodate(maskedit1.text);
    ParamByName('tventa').asstring:=combobox3.text;
    ParamByName('montoprest').AsFloat:=strtofloat(abfedit1.text);
    ParamByName('inte').asinteger:=strtoint(abfedit2.text);
    ParamByName('cantc').asinteger:=strtoint(abfedit3.text);
    ParamByName('tpago').asstring:=combobox5.text;
    ParamByName('idemp').asstring:=label33.caption;
    ParamByName('fecfin').asDateTime:=strtodate(listacuota.Cells[0,2]);
    ParamByName('intemora').asinteger:=0;
    ParamByName('diacobro').asstring:=combobox4.text;
    ParamByName('estado').asstring:='DEBE';
    ParamByName('montoc').asfloat:=strtofloat(abfedit4.text);
    ParamByName('montot').asfloat:=strtofloat(abfedit13.text);
    ExecSQL;
end;
end;
dm.Creditos.Refresh;

saludos

XcamX 12-02-2013 20:27:05

ahi lo hizo de nuevo hace ese espacio, fijate que en la linea de abajo tambien lo hace y en el codigo original no lo tiene

un abrazo che y gracias por el interes.

Casimiro Notevi 12-02-2013 21:01:45

Bien, pero quita ese "value" y ponlo correctamente, y por si acaso pon un espacio delante y detrás del values para separarlo del paréntesis.

Casimiro Notevi 12-02-2013 21:08:45

Mira esto.

Caral 13-02-2013 00:35:26

Hola
Código Delphi [-]
with SqlGrabar do
begin
active:=false;
SQL.text:= 'INSERT INTO creditos ( idcredito, idcliente, fechacred, tipoventa, montoprestado, interes, cantcuotas, tipopago, idemp, '+
           ' fechafin, interesmora, diacobro, estado, montocuota, montototal ) '+
           'values ( :idcred, :idcliente, :feccred, :tventa, :montoprest, :inte, :cantc, :tpago, :idemp, '+
           ' :fecfin, :intemora, :diacobro, :estado, :montoc, :montot )' ;
    ParamByName('idcred').asinteger:=strtoint(label3.caption);
    ParamByName('idcliente').asinteger:=strtoint(edit3.text);
    ParamByName('feccred').AsDateTime:=strtodate(maskedit1.text);
    ParamByName('tventa').asstring:=combobox3.text;
    ParamByName('montoprest').AsFloat:=strtofloat(abfedit1.text);
    ParamByName('inte').asinteger:=strtoint(abfedit2.text);
    ParamByName('cantc').asinteger:=strtoint(abfedit3.text);
    ParamByName('tpago').asstring:=combobox5.text;
    ParamByName('idemp').asstring:=label33.caption;
    ParamByName('fecfin').asDateTime:=strtodate(listacuota.Cells[0,2]);
    ParamByName('intemora').asinteger:=0;
    ParamByName('diacobro').asstring:=combobox4.text;
    ParamByName('estado').asstring:='DEBE';
    ParamByName('montoc').asfloat:=strtofloat(abfedit4.text);
    ParamByName('montot').asfloat:=strtofloat(abfedit13.text);
    ExecSQL;
end;
Saludos

XcamX 13-02-2013 01:55:42

gracias caral por tu ayuda pero me sigue dando el mismo error

saludos

Caral 13-02-2013 02:18:57

Hola
No se cual es el error ?.
Yo veo varias cosas:
1- Es posible que el query SqlGrabar no este bien conectado o incluso tenga que estar activo.
2- No se en mysql pero a mi me gusta mas usar params o parameters que parambyname.
3- Es posible que las fechas que las sacas de string esten generando algun problema.
No se.
Saludos

XcamX 13-02-2013 02:54:58

muchisimas gracias caral, al final eran las fechas. si anda con la sentencia 'value'

un abrazo grande

Casimiro Notevi 13-02-2013 10:19:38

Cita:

Empezado por XcamX (Mensaje 454941)
muchisimas gracias caral, al final eran las fechas. si anda con la sentencia 'value'
un abrazo grande

Por lo visto mysql acepta ambas:


INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),... [ ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... ]


La franja horaria es GMT +2. Ahora son las 18:03:17.

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