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;
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; conn.Commit;
ShowMessage('Ingreso correcto');
SpeedButton6Click(Sender);
except conn.Rollback;
ShowMessage('Error al ingresar los datos '+#13+'Verifique sus datos');
end;end;
espero haberme explicado y espero me podai ayudar