Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Continuando con dbExpress (https://www.clubdelphi.com/foros/showthread.php?t=3655)

mosorio 15-09-2003 23:29:44

Continuando con dbExpress
 
Hola!

Agradezco la ayuda que me han dado primero que todo a todos (valga la redundancia).

El tema es el siguiente, he logrado insertar los registros en la tabla desde el archivo texto, pero el problema es que no me permite capturar correctamente los errores que se pueden presentar. Ejemplo cuando se me presentaba ese error del character set, quería que me lo mostrara en un memo, pero no lo hace, le he colocado los números posibles en el applyupdate pero no funciona. Si coloco el -1 continúa como si nada e inserta los que pueda sin chistar, si coloco el 0 solo inserta hasta donde encuentra el error o se bloquea.
Esta es parte de la rutina que implemento:
Código:

  for iFil := 1 to sgFuente.RowCount - 1 do
    begin
      cdsDatos.Insert;
      iLinea := iFil;
      for iCol := 0 to cdsDatos.FieldCount - 1 do
        cdsDatos.Fields[iCol].AsString := sgFuente.Cells[iCol, iFil];
      cdsDatos.Post;
      try
        cdsDatos.ApplyUpdates(-1);
        mResultado.Lines.Add(Format(MLineaOK, [IntToStr(iLinea)]));
      except On E: Exception do
        mResultado.Lines.Add(Format(EInsercion, [IntToStr(iLinea)]) + E.Message);
      end;
    end;

Cuando efectúo la inserción, si todo va OK, en el memo inserta una línea con el mensaje indicado, pero si da cualquier error, debe insertar el mensaje de error y la línea afectada, con esto se puede saber cual y cuantas líneas se han migrado a la tabla y las que no saber los posibles motivos y no perder tanto tiempo.

Si estoy haciendo algo mal, espero que con esta parte del código me ayuden a aclararlo, pero creo que no esta mal, lo que sucede es que no se como poder capturar el momento cuando ocurre un error e insertar el mensaje y que continúe con el ciclo sin que se interrumpa el resto como sucede si coloco 0 al applyupdate, mostrando los mensajes de inserción satisfactoria.

Bueno amigos gracias nuevamente

Julià T. 16-09-2003 02:08:59

si no recuerdo mal el applyupdates no se queja, no genera excepción, por lo que no puedes saber de este modo cuando falla, por el contrario el applyupdates, es una funcion, y como tal devuelve un valor (concretamente el numero de errores que se ha producido), por lo que con el código modificado similar al siguiente obtendrás el resultado que buscas
Cita:

if cdsDatos.ApplyUpdates(-1)<>0 then
mResultado.Lines.Add(Format(EInsercion, [IntToStr(iLinea)]));


La franja horaria es GMT +2. Ahora son las 17:08:23.

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