delphi
procedure TFImport.btnImportarClick(Sender: TObject); begin {*** DESHABILITAMOS LOS BOTONES PARA EVITAR VOLVER PRESIONAR MIENTRAS CORRE EL PROCESO ***} btnImportar.Enabled := False; btnCerrar.Enabled := False; {*** SI LA TABLA NO ESTA ABIERTA PUES DEBEMOS ABRIRLO ***} if not DM.dbfEmpleados.Active then DM.dbfEmpleados.Open; PB.Max := DM.dbfEmpleados.RecordCount; DM.dbfEmpleados.First; While not DM.dbfEmpleados.Eof do begin {*** VERIFICAMOS SI EXISTE EN LA BD ***} DM.QImpExiste.Close; DM.QImpExiste.Parameters.ParamByName('ECode').Value := DM.dbfEmpleados.fieldbyname('code').AsString; DM.QImpExiste.Open; if DM.QImpExiste.RecordCount > 0 then begin //SI HAY UNA COINCIDENCIA {*** PROCEDEMOS ACTUALIZAR EL DATO EXISTENTE ***} DM.QUpdate.Parameters.ParamByName('ENombre').Value := DM.dbfEmpleados.FieldByName('name').AsString; DM.QUpdate.Parameters.ParamByName('EApellido').Value := DM.dbfEmpleados.FieldByName('lastname').AsString; DM.QUpdate.Parameters.ParamByName('EDpto').Value := DM.dbfEmpleados.FieldByName('cdepart').AsString; DM.QUpdate.Parameters.ParamByName('ECargo').Value := DM.dbfEmpleados.FieldByName('codpos').AsString; DM.QUpdate.Parameters.ParamByName('ETurno').Value := DM.dbfEmpleados.FieldByName('shift1').AsString; DM.QUpdate.ExecSQL; CUpdated := CUpdated + 1; //sumamos uno si es actualizado PB.StepIt; lbUpdated.Caption := IntToStr(CUpdated); end else begin {*** DE LO CONTRARIO INSERTAMOS UNO NUEVO ***} DM.QImport.Parameters.ParamByName('ECode').Value := DM.dbfEmpleados.FieldByName('code').AsString; DM.QImport.Parameters.ParamByName('ENombre').Value := DM.dbfEmpleados.FieldByName('name').AsString; DM.QImport.Parameters.ParamByName('EApellido').Value := DM.dbfEmpleados.FieldByName('lastname').AsString; DM.QImport.Parameters.ParamByName('EDptoID').Value := DM.dbfEmpleados.FieldByName('cdepart').AsString; DM.QImport.Parameters.ParamByName('ECargo').Value := DM.dbfEmpleados.FieldByName('codpos').AsString; DM.QImport.Parameters.ParamByName('ETurno').Value := DM.dbfEmpleados.FieldByName('shift1').AsString; DM.QImport.ExecSQL; CNew := CNew + 1; //sumamos uno si es nuevo PB.StepIt; lbNew.Caption := IntToStr(CNew); end; lbDato.Caption := '('+DM.dbfEmpleados.FieldByName('code').AsString+') - '+DM.dbfEmpleados.FieldByName('lastname').AsString+','+DM.dbfEmpleados.FieldByName('name').AsString; DM.dbfEmpleados.Next; Application.ProcessMessages; end; DM.dbfEmpleados.Close; ShowMessage('¡PROCESO COMPLETADO!'); btnCerrar.Enabled := True; end;
El resultado es el siguiente:
Como pueden ver los campos Nombre, Apellido, DptoID, Cargo y Turno se repiten el mismo valor, en cambio el campo Codigo si hace la importación correcta, de 7,350 registros se repiten esos valores en los campos mencionados en los primeros 6,848 registros, luego de ahí ya cambia, ¿qué podría estar pasando?.
Saludos.