Ver Mensaje Individual
  #1  
Antiguo 25-11-2009
Avatar de voldemmor
voldemmor voldemmor is offline
Miembro
 
Registrado: ago 2006
Posts: 232
Reputación: 18
voldemmor Va por buen camino
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,cupacion,'+
                      ':sexo,:canton,arroquia,: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
__________________
tu mente es tu mas presiado tesoro, cultiva tu conocimiento
Responder Con Cita