Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-07-2013
Avatar de jscubillos5
jscubillos5 jscubillos5 is offline
Miembro
NULL
 
Registrado: jul 2013
Ubicación: Bogotá
Posts: 44
Poder: 0
jscubillos5 Va por buen camino
Continuando con este post

Hola comunidad, pues he leido los libors que me dieron y los recursos que he encontrado en la web, y he llegado a este punto:

Código Delphi [-]
procedure TDataModuleCarga.ExtraerDatos(RutaBaseDatos:String);
var NombreTabla, NombreCampo: String;
Index: Integer;
begin
  IBDatabaseSanGil.DatabaseName:= RutaBaseDatos;
  IBDatabaseSanGil.Open;
  try
    IBQueryTablas.Open;
    while not IBQueryTablas.Eof do
    begin
      NombreTabla:= IBQueryTablas.fieldbyname('nombre_tabla').AsString;
      IBQueryExtraerDatosTablas.SQL.Text:= 'select * from ' + NombreTabla;
      IBQueryExtraerDatosTablas.Open;
      for Index:= 0 to IBQueryExtraerDatosTablas.FieldCount -1 do
      begin
        NombreCampo:= IBQueryExtraerDatosTablas.FieldList[Index].Text;
      end;
    end;
    IBQueryExtraerDatosTablas.Close;
  finally
    IBDatabaseSanGil.Close;
  end;
end;

Cuando ejecuto este código arroja el siguiente error: Dynamic SQL Error SQL error code = -804 Data type unknown Client SQL dialect 1 does not support reference to BIGINT data type, ¿Alguien sabe el por que de este error?
Responder Con Cita
  #2  
Antiguo 19-07-2013
Avatar de jscubillos5
jscubillos5 jscubillos5 is offline
Miembro
NULL
 
Registrado: jul 2013
Ubicación: Bogotá
Posts: 44
Poder: 0
jscubillos5 Va por buen camino
Hola comunidad

Cita:
Empezado por jscubillos5 Ver Mensaje
Hola comunidad, pues he leido los libors que me dieron y los recursos que he encontrado en la web, y he llegado a este punto:


Código Delphi [-]procedure TDataModuleCarga.ExtraerDatos(RutaBaseDatos:String);
var NombreTabla, NombreCampo: String;
Index: Integer;
begin
IBDatabaseSanGil.DatabaseName:= RutaBaseDatos;
IBDatabaseSanGil.Open;
try
IBQueryTablas.Open;
while not IBQueryTablas.Eof do
begin
NombreTabla:= IBQueryTablas.fieldbyname('nombre_tabla').AsString;
IBQueryExtraerDatosTablas.SQL.Text:= 'select * from ' + NombreTabla;
IBQueryExtraerDatosTablas.Open;
for Index:= 0 to IBQueryExtraerDatosTablas.FieldCount -1 do
begin
NombreCampo:= IBQueryExtraerDatosTablas.FieldList[Index].Text;
end;
end;
IBQueryExtraerDatosTablas.Close;
finally
IBDatabaseSanGil.Close;
end;
end;




Cuando ejecuto este código arroja el siguiente error: Dynamic SQL Error SQL error code = -804 Data type unknown Client SQL dialect 1 does not support reference to BIGINT data type, ¿Alguien sabe el por que de este error?
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
Responder Con Cita
  #3  
Antiguo 22-07-2013
Avatar de jscubillos5
jscubillos5 jscubillos5 is offline
Miembro
NULL
 
Registrado: jul 2013
Ubicación: Bogotá
Posts: 44
Poder: 0
jscubillos5 Va por buen camino
Respuesta de la pregunta

Cita:
Empezado por jscubillos5 Ver Mensaje
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); //Creo un método
var NombreTabla, NombreCampo, SentenciaInsertar, ValorCampo, Codigo_Agencia, RutaArchivoSalida: String;
Index: Integer; 
Archivo: TextFile;// Cargo varias variables a usar
begin
  RutaArchivoSalida:= ExtractFilePath(ArchivoExcepciones) + 'Lock.txt'; // Decidi crear un archivo de lock, para saber que inserciones se generan
  IBDatabaseSanGil.DatabaseName:= RutaBaseDatos; //Le asigno la ruta de conexión a una base de datos
  IBQueryObtenerCodigo_Agencia.Open; //Abro una consulta
  Codigo_Agencia:= IBQueryObtenerCodigo_Agencia.fieldbyname('AGENCIA').AsString; //Cargo en una variable el valor de la consulta anterior
  AssignFile(Archivo, RutaArchivoSalida); // Asigno el archivo del lock y la ruta de ubicación del mismo
  Rewrite(Archivo); //Luego lo reescribo si ya existe
  Writeln(Archivo, 'Archivo lock insertaciones'); //Escribo un titulo al archivo
  IBDatabaseSanGil.Open; //Abro la primera consulta para extraer los datos
  try // Lo encierro en un try 
    IBQueryTablas.Open; // Abro la consulta de las tablas
    while not IBQueryTablas.Eof do //Mientras la consulta de las tablas no termine hago
    begin
      NombreCampo:= ''; // Asigno un valor nulo a la variable
      NombreTabla:= Trim(IBQueryTablas.fieldbyname('nombre_tabla').AsString); // Obtengo el nombre de la tabla de la consulta
      IBQueryExtraerDatosTablas.SQL.Text:= 'select * from ' + NombreTabla;
      // Luego cargo los datos de la consulta con la cual voy a extraer todos los campos y datos de la tabla
      IBQueryExtraerDatosTablas.Open; // Abro la consulta
      for Index:= 0 to IBQueryExtraerDatosTablas.FieldCount -1 do // Recorro los campos o nombres de los campos por cada tabla
      begin
        NombreCampo:=NombreCampo + ', ' + IBQueryExtraerDatosTablas.FieldList[Index].FieldName; //Lo asigno a una variable
      end;
      Delete(NombreCampo, 1, 1); 
      //Elimino el primer item de Nombre campo, puesto que es una coma al ejecutar el script arrojara una excepción
      while not IBQueryExtraerDatosTablas.Eof do //Mientras extraer datos no tenga fin hago
      begin
        ValorCampo:= ''; // Al igual que con NombreCampo, inicializo el valor de campo en nulo o vacio
        for Index:= 0 to IBQueryExtraerDatosTablas.FieldCount -1 do
        begin
          ValorCampo:= ValorCampo + ', ' + IBQueryExtraerDatosTablas.FieldList[Index].Text;
          //Al igual que el anterior cargo el valor del campo en una variable string
        end;
        Delete(ValorCampo, 1, 1); //Elimino el primer caracter igual que en el anterior, puesto que es una coma
        if DebeProcesarTabla(ArchivoExcepciones, NombreTabla) then 
        //Valido si la tabla no debe ser procesa, es decir no todas las tablas que estoy recorriendo, deseo insertar los mismos valores
        //El método DebeProcesarTabla es una function retorna verdadero o falso. 
        begin  //Aquí ya realizo el proceso de crear la sentencia de inserción .
          SentenciaInsertar:= 'INSERT INTO ' + NombreTabla + ' ('  + NombreCampo + ', CODIGO_AGENCIA' + ' )' + ' VALUES ' + ' (' + ValorCampo +  ', ' + Codigo_Agencia + ' );'; 
          try
           Writeln(Archivo, SentenciaInsertar); //Escribo la linea en el archivo del lock
           finally
           //CloseFile(Archivo); 
//Comentarie esto por que cada vez que el archivo se iba creando iba generando un error en la proxima vuelta del bucle
           end;
        end
        else
        begin
          SentenciaInsertar:= 'INSERT INTO ' + NombreTabla + ' ('  + NombreCampo + ' )' + ' VALUES ' + ' (' + ValorCampo + ' );';
          try
           Writeln(Archivo, SentenciaInsertar);
           finally
           //CloseFile(Archivo);
           end;
        end;
        IBQueryExtraerDatosTablas.Next; //Para no entrar a un bucle finito
      end;
      IBQueryTablas.Next; //Para no entrar a un bucle finito
    end;
    IBQueryExtraerDatosTablas.Close; //Cierro las consultas
  finally
    CloseFile(Archivo); //Cierro el archivo
    IBDatabaseSanGil.Close; //Cierro la conexión a la base de datos.
  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 .

Última edición por Casimiro Notevi fecha: 22-07-2013 a las 18:30:36.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
como seleccionar fila de un dbgrid y que se me guarden los datos en una tabla rogercito Varios 11 04-10-2011 21:35:35
Como copiar los datos de una tabla a otra Shidalis Varios 2 21-07-2005 14:34:32
Seleccionar registros en una tabla, envio, e insercion en otra tabla!! EfrainSanmiguel Conexión con bases de datos 3 21-10-2004 01:12:43
Como insertar datos de una tabla en otra tabla? Salomon Firebird e Interbase 1 28-08-2003 11:29:40
Como mostrar los datos para luego insertarlos? judoboy OOP 8 14-05-2003 09:51:51


La franja horaria es GMT +2. Ahora son las 18:47:45.


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
Copyright 1996-2007 Club Delphi