Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   problemas al grabar con Sql... (https://www.clubdelphi.com/foros/showthread.php?t=65693)

BPL 07-01-2010 15:36:44

problemas al grabar con Sql...
 
Hola a toditos...

la verdad ya habia reportado este problemita que tengo, pero nadie contesto espero que ahora si, en un cachito que tengo........

yo trabajo con DBF, motor de BDD ADVANTAGE, Red Novell

tengo la sgte funcion hecha en delphi, para grabar en una tabla

Datamodule.tabla1.AdsConnection.BeginTransaction ;
TRY
QrAux.SQL.Clear ;
QrAux.SQL.Add('Insert Into tabla (campo1,campo2,campo3)') ;
QrAux.SQL.Add('Values (Dato1,Dato2,Dato3)') ;
QrAux.ParamByName('Dato1').AsInteger := valor1
QrAux.ParamByName('Dato2').AsInteger := valor2
QrAux.ParamByName('Dato3').AsInteger := valor3
QrAux.ExecSQL ;
QrAux.Close ;
EXCEPT
Datamodule.tabla1.AdsConnection.Rollback ;
RAISE
END ;
Datamodule.Tabla1.AdsConnection.Commit ;
Datamodule.Tabla1.Close;
ShowMessage('SE GRABO EXITOSAMENTE EL REGISTRO....');

pues bien el problema es que en cierta ocasiones eso si la minoria, me duplica el dato en la tabla grabandolo mas de una vez, si no es al mismo segundo es casi al mismo segundo.
en mi programa me doy la lata despues de grabar revisar y enviar msg si ocurrio esto...pero es un lata....

podria alguien ayudarme plis....este problema me tiene ahogada....

gracias, a todos y feliz año, sobretodo a los que me contestaran.....

rgstuamigo 07-01-2010 15:59:24

Segun veo, tal ves es por que no estas creando los parametros como deberia ser:
Haber intenta asi:
Código Delphi [-]
Datamodule.tabla1.AdsConnection.BeginTransaction ;
TRY
QrAux.SQL.Clear ;
QrAux.SQL.Add('Insert Into tabla (campo1,campo2,campo3)') ;
QrAux.SQL.Add('Values (:dato1,:dato2,:dato3)');//aqui no habias puesto los dos punto ( : ) para los parametros
QrAux.ParamByName('dato1').AsInteger := valor1
QrAux.ParamByName('dato2').AsInteger := valor2
QrAux.ParamByName('dato3').AsInteger := valor3
QrAux.ExecSQL ;
//QrAux.Close ;//<--Esto quisas esta por demas
EXCEPT
Datamodule.tabla1.AdsConnection.Rollback ;
RAISE
END ;
Datamodule.Tabla1.AdsConnection.Commit ;
Datamodule.Tabla1.Close;
ShowMessage('SE GRABO EXITOSAMENTE EL REGISTRO....');
Saludos...:)

BPL 07-01-2010 16:03:08

no si los tengo puesto, pero aqui se tranformaban en caritas por eso los obvie...

gracias ... pero igual ayudame.......

Neftali [Germán.Estévez] 07-01-2010 16:07:52

¿En qué momento llamas a este código?
¿Puede ser que lo estés llamando más de una vez?

Sólo viendo esto es difícil (por no decir imposible) que este código grabe dos registros iguales a no se que se llame dos veces (al menos así lo veo yo).

Si utilizas TAG's cuando escribas código delphi los mensajes se leerán mejor.

BPL 07-01-2010 19:03:10

que lata eso no es porque me aseguro de apagar el boton despues de grabar...


La franja horaria es GMT +2. Ahora son las 23:35:21.

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