Cita:
Empezado por jscubillos5
Siguiendo con la solución de mi problema encontre vía web que solo era cuestión de configurar la propiedad SQLDIALECT pasarla de 1 a 3, y listo, a bueno y en el nombre campo se debe llamar así: Código Delphi [-]NombreCampo:= IBQueryExtraerDatosTablas.FieldList[Index].FieldName;
ya que como lo tenia antes llama es el valor del campo o el valor deñ registro
|
Hola foro, ya he logrado conseguir que de una base de datos se consulten todas las tablas y pasar los registros de estas tablas a otra base de datos el codigo va así:
Código Delphi
[-]
procedure TDataModuleCarga.ExtraerDatos(RutaBaseDatos, ArchivoExcepciones:String); var NombreTabla, NombreCampo, SentenciaInsertar, ValorCampo, Codigo_Agencia, RutaArchivoSalida: String;
Index: Integer;
Archivo: TextFile;begin
RutaArchivoSalida:= ExtractFilePath(ArchivoExcepciones) + 'Lock.txt'; IBDatabaseSanGil.DatabaseName:= RutaBaseDatos; IBQueryObtenerCodigo_Agencia.Open; Codigo_Agencia:= IBQueryObtenerCodigo_Agencia.fieldbyname('AGENCIA').AsString; AssignFile(Archivo, RutaArchivoSalida); Rewrite(Archivo); Writeln(Archivo, 'Archivo lock insertaciones'); IBDatabaseSanGil.Open; try IBQueryTablas.Open; while not IBQueryTablas.Eof do begin
NombreCampo:= ''; NombreTabla:= Trim(IBQueryTablas.fieldbyname('nombre_tabla').AsString); IBQueryExtraerDatosTablas.SQL.Text:= 'select * from ' + NombreTabla;
IBQueryExtraerDatosTablas.Open; for Index:= 0 to IBQueryExtraerDatosTablas.FieldCount -1 do begin
NombreCampo:=NombreCampo + ', ' + IBQueryExtraerDatosTablas.FieldList[Index].FieldName; end;
Delete(NombreCampo, 1, 1);
while not IBQueryExtraerDatosTablas.Eof do begin
ValorCampo:= ''; for Index:= 0 to IBQueryExtraerDatosTablas.FieldCount -1 do
begin
ValorCampo:= ValorCampo + ', ' + IBQueryExtraerDatosTablas.FieldList[Index].Text;
end;
Delete(ValorCampo, 1, 1); if DebeProcesarTabla(ArchivoExcepciones, NombreTabla) then
begin SentenciaInsertar:= 'INSERT INTO ' + NombreTabla + ' (' + NombreCampo + ', CODIGO_AGENCIA' + ' )' + ' VALUES ' + ' (' + ValorCampo + ', ' + Codigo_Agencia + ' );';
try
Writeln(Archivo, SentenciaInsertar); finally
end;
end
else
begin
SentenciaInsertar:= 'INSERT INTO ' + NombreTabla + ' (' + NombreCampo + ' )' + ' VALUES ' + ' (' + ValorCampo + ' );';
try
Writeln(Archivo, SentenciaInsertar);
finally
end;
end;
IBQueryExtraerDatosTablas.Next; end;
IBQueryTablas.Next; end;
IBQueryExtraerDatosTablas.Close; finally
CloseFile(Archivo); IBDatabaseSanGil.Close; end;
end;
Finalmente seria colocar que por cada inserción se executa una consulta IBQUERY en la base de datos con el SQL.TEXT:= SentenciaInsercion;
Luego se debe ejecutar Consulta.EXEC; y este código deberia ir debajo de cada sentencia de insertar y por encima del archivo del lock, con esto se garantiza que el insert que sea escrito en el lock se haya procesado antes en la base de datos y listo
.