PDA

Ver la Versión Completa : !!Error de filas !!


Darkseratul
11-10-2011, 00:34:47
hola amigos del club delphi
tengo un adoconection, adatable y un datasourse

tengo un problema mi aplicación va muy bien pero al cuando haga "Post" y no siempre me da este error y no se a que se deba

http://a5.sphotos.ak.fbcdn.net/hphotos-ak-ash4/311954_2303974251906_1625743672_2409023_1251730586_n.jpg

alguien sabe a que se debe este error ????

el problema es que la aplicación va muy bien pero de repente cuando haces "post" me da este error y la aplicación se queda bloqueada :confused:

Caral
11-10-2011, 01:38:37
Hola
Eso me parece que es por que no se ha actualizado correctamente.
Que BD usas?.
Saludos

Darkseratul
11-10-2011, 01:56:16
hola caral uso acces ya sabes :D
e leido algo de eso pero no doy muchas gracias

Caral
11-10-2011, 02:03:33
Hola
Tienes que hacer un CommitTrans después del post.
Eso lo que hace es que los datos queden bien guardados.
El proceso es:
BeginTrans // cuando se inicia la transaccion
CommitTrans // cuando se termina de hacer lo que se quiere
Y si hay algun problema:
RollbackTrans
Saludos

Neftali [Germán.Estévez]
11-10-2011, 10:05:41
En el caso de Access "a veces" es debido a falta de claves primarias en las tablas. No me preguntes porqué pero el algunos casos pasa.

Si tienes PK en todas las tablas, ni caso.
¿Otra pregunta? ¿Es una aplicación concurrente?

Darkseratul
11-10-2011, 20:48:41
hola muchas gracias por contestar a los 2

Caral tu siempre ayudándome se te agradece ya le eche una mirada a lo que comentas pero no logro entenderlo ???

procedure TfrmMain.Button1Click(Sender: TObject);
var
i: Integer;
begin
conMDB.Open;
conMDB.BeginTrans;
conMDB.Execute('DELETE * FROM TABLA1;', i);
if MessageDlg('¿Elliminar ' + IntToStr(i) + ' registros?', mtWarning, [mbYes, mbNo], 0) = mrYes then
conMDB.CommitTrans;
conMDB.Close
end;

:confused::confused:

muchas gracias neftali por tu pronta respuesta si de hecho mis tablas no tenían claves primarias ya las he aplicado a mi base pero a un deves en cuando me sale el error ya no tan seguido como antes pero a un sale :(

Caral
12-10-2011, 03:11:00
Hola
Digamos que tienes un adoQuery y quieres borrar ciertos datos (mas o menos como tu ejemplo):
Las Transacciones se hacen sobre el ADOConnection, algo asi (suponiendo que el adoconnection este en el datamodule):


procedure TfrmMain.Button1Click(Sender: TObject);
begin
DataModule1.AdoConnection1.BeginTrans; // comienzo la transaccion
try // trate de
AdoQuery1.sql.text:= 'DELETE * FROM TABLA1 where micampo = :Midato'; //Borre de mi tabla segun mi dato
AdoQuery1.Parameters[0].value:= tudato; // le doy el dato
AdoQuery1.ExecSQL; // lo ejecuto
DataModule1.AdoConnection1.CommitTrans; // lo guardo
end;
except // creo un excepción
on E:Exception do DataModule1.AdoConnection1.RollbackTrans; // si pasa algo no cambio nada en la bd
MessageDlg('No fue posible completar la transacción',mtError,[mbOK],0); // muestro un mensaje
end;

Creo que esta claro, si tienes dudas avisa.
Saludos

Darkseratul
12-10-2011, 23:50:55
muchas gracias caral lo voy a checar y te digo como me fue :D