Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   !!Error de filas !! (https://www.clubdelphi.com/foros/showthread.php?t=76130)

Darkseratul 11-10-2011 00:34:47

!!Error de filas !!
 
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



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

Acces amigo
 
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

Muchas gracias
 
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 ???

Código Delphi [-]
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):

Código Delphi [-]
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

Gracias caral voy a checarlo
 
muchas gracias caral lo voy a checar y te digo como me fue :D


La franja horaria es GMT +2. Ahora son las 10:07:16.

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