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)
-   -   transaccion con ado+zeos en access 2007 (https://www.clubdelphi.com/foros/showthread.php?t=65169)

voldemmor 25-11-2009 17:09:56

transaccion con ado+zeos en access 2007
 
Hola amigos. Como siempre primero agradesco de antemano por la ayuda que me podais prestar.

Ahora el proble es.

Tengo que realizar una insercion masiva, sobre una tabla en Access 2007.
Primero cargo los datos de un excel a una stringgrid (no hay pçroblemas).

Luego tengo que enviar estos datos a mi tabla.

Uso D7. Zeos 6 y me conecto mediante la opcion ado, y Access 2007.

El problema me surge cuando hago las pruebas si los dtos estan todos correctos (sin faltantes, datos mal escritos, etc), no h ay problemas.

Pero por ejemplo si en el campo edad (entero), no existe un dato.
Me da un error
Código:

esta intentando cerrar o detener una transaccion que no ha iniciado
y los registros anteriores a este ya se han guardado.

El motivo de esto es por que si hay datos erroneos no deberia ingresarse ninguno y dar un mensaje de que revise los datos, lo corrija de ser necesarios y los ingrse nuevamente.

my codigo para la insercion es
Código Delphi [-]
var
conn :TZConnection;
i:integer;
begin
   zq1.SQL.Clear;
{cols son 8 visibles- anio y fecha no visibles en la columna}
   conn := form2.ZConnection1;
   zq1.Connection:= conn;
   conn.StartTransaction;
     try
      zq1.SQL.Text := 'INSERT INTO participantes (cedula,nombres,anio,nivel,edad,ocupacion,'+
                      'sexo,canton,parroquia,comunidad,calle,telefono,centro_educativo,zona,'+
                      'horario,estado_civil,discapacidad,bono,funcion_familia,hijos_edad_escolar,'+
                      'hijos_en_escuela,etnia,lengua,educador,ci_educador,extra1,extra2)'+
                      'VALUES(:cedula,:nombres,:anio,:nivel,:edad,:ocupacion,'+
                      ':sexo,:canton,:parroquia,:comunidad,:calle,:telefono,:centro_educativo,:zona,'+
                      ':horario,:estado_civil,:discapacidad,:bono,:funcion_familia,:hijos_edad_escolar,'+
                      ':hijos_en_escuela,:etnia,:lengua,:educador,:ci_educador,:extra1,:extra2)';
      for i := 1 to StringGrid2.RowCount -1 do
      begin
         zq1.ParamByName('cedula').AsString := StringGrid2.Cells[1,i];
         zq1.ParamByName('nombres').AsString := StringGrid2.Cells[2,i];
         zq1.ParamByName('anio').AsString := StringGrid2.Cells[0,i];
         zq1.ParamByName('nivel').AsString := StringGrid2.Cells[3,i];
         zq1.ParamByName('edad').AsInteger := StrToInt(StringGrid2.Cells[4,i]);
         zq1.ParamByName('ocupacion').AsString := StringGrid2.Cells[5,i];
         zq1.ParamByName('sexo').AsString := StringGrid2.Cells[6,i];
         zq1.ParamByName('canton').AsString := StringGrid2.Cells[7,i];
         zq1.ParamByName('parroquia').AsString := StringGrid2.Cells[8,i];
         zq1.ParamByName('comunidad').AsString := StringGrid2.Cells[9,i];
         zq1.ParamByName('calle').AsString := StringGrid2.Cells[10,i];
         zq1.ParamByName('telefono').AsString := StringGrid2.Cells[11,i];
         zq1.ParamByName('centro_educativo').AsString := StringGrid2.Cells[12,i];
         zq1.ParamByName('zona').AsString := StringGrid2.Cells[13,i];
         zq1.ParamByName('horario').AsString := StringGrid2.Cells[14,i];
         zq1.ParamByName('estado_civil').AsString := StringGrid2.Cells[15,i];
         zq1.ParamByName('discapacidad').AsString := StringGrid2.Cells[16,i];
         zq1.ParamByName('bono').AsString := StringGrid2.Cells[17,i];
         zq1.ParamByName('funcion_familia').AsString := StringGrid2.Cells[18,i];
         zq1.ParamByName('hijos_edad_escolar').AsInteger := StrToInt( StringGrid2.Cells[19,i]);
         zq1.ParamByName('hijos_en_escuela').AsInteger := StrToInt( StringGrid2.Cells[20,i]);
         zq1.ParamByName('etnia').AsString := StringGrid2.Cells[21,i];
         zq1.ParamByName('lengua').AsString := StringGrid2.Cells[22,i];
         zq1.ParamByName('educador').AsString := StringGrid2.Cells[23,i];
         zq1.ParamByName('ci_educador').AsString := StringGrid2.Cells[24,i];
         zq1.ParamByName('extra1').AsString := StringGrid2.Cells[25,i];
         zq1.ParamByName('extra2').AsString := StringGrid2.Cells[26,i];
         zq1.ExecSQL;
      end;//for
      conn.Commit;
      ShowMessage('Ingreso correcto');
      SpeedButton6Click(Sender);
     except //try
       conn.Rollback;
       ShowMessage('Error al ingresar los datos '+#13+'Verifique sus datos');
     end;//try except
end;

espero haberme explicado y espero me podai ayudar


La franja horaria es GMT +2. Ahora son las 08:06:33.

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