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 02-11-2010
Mystery Mystery is offline
Miembro
 
Registrado: jul 2007
Ubicación: Santiago de Cuba
Posts: 69
Poder: 17
Mystery Va por buen camino
Copiar Tablas

Hola ha todos bueno yo estaba tratando de copiar unas tablas de una bd en access a otra SQL Server pero como son mas de 1000 000 de registros.
he tratado de hacer lo siguiente pero me da error... si alguien me pudiese decir lo que ocurre estaria agradecido...
Código Delphi [-]
arr:=VarArrayCreate([0, TbOrigen.FieldCount-1], varVariant);
while not TbOrigen.Eof do begin
    for i:=0 to TbOrigen.FieldCount-1 do
      arr[i]:=TbOrigen.Fields[i].VALUE;
    Tb_Destino.AppendRecord(arr);
    TbOrigen.Next;
  end;
sin mas

Mystery
Responder Con Cita
  #2  
Antiguo 03-11-2010
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
El código que usas puede ser algo lento con miles de registros, pero quizá te baste con resolver el error que dices.

La pregunta de los 64 mil gatitos resucitados: ¿qué mensaje de error exacto te aparece y en qué parte del código se detiene el programa cuando ese error ocurre?

Consejo: Cuando te aparezca una ventana de error en Delphi puedes presionar Ctrl+C (copiar) para llevar el texto del error al portapapeles y luego pegarlo aquí fácilmente. Copiar y pegar, vaya, sin necesidad de seleccionar el texto de la ventana de error.

Por otra parte, considera que estás poniendo en memoria más de un millón de registros, y eso es mucho trabajo para cualquier componente de datos. Si el error es por falta de memoria, puede que hacer la operación por bloques (de manera que nunca haya más de unos cientos de registros en memoria) o emitiendo sentencias SQL Insert Into directas al servidor sean buenas alternativas.

Un abrazo de proporciones bíblicas.

Al González.
Responder Con Cita
  #3  
Antiguo 03-11-2010
Mystery Mystery is offline
Miembro
 
Registrado: jul 2007
Ubicación: Santiago de Cuba
Posts: 69
Poder: 17
Mystery Va por buen camino
Red face

Hola Al bueno primeramente creo que debo una disculpa por el mensaje tan tétrico que he enviado...
Primeramente explicare que es lo que deseo hacer…
Bueno necesito realizar una aplicación que copie la estructura y los datos de una base de datos Access (Cualquiera que especifique el usuario) a un Servidor SQL Server que yo le especifique.
Ahora bien se que existen herramientas en SQL Server que me permiten copiar datos a gran velocidad como los DTS… pero no me sirven pues la BD Access es variable por así decirlo.
Entonces no he hallado otra manera que la especificada
Código Delphi [-]
  Var
     Arr:Variant;
  begin
     arr:=VarArrayCreate([0, TbOrigen.FieldCount-1], varVariant);
    while not TbOrigen.Eof do begin
      for i:=0 to TbOrigen.FieldCount-1 do
        arr[i]:= TbOrigen.Fields[i].VALUE;
      Tb_Destino.AppendRecord([arr]);
      TbOrigen.Next;
    end;
  end;
El error que me envia es el siguiente
“Could not convert variant of type (Array Variant) into type (String).”
Ahora si en el AppendRecord lo pongo asi…
Código Delphi [-]
  Tb_Destino.AppendRecord(arr);
De todas formas Al como tu dices es muy lento pues yo lo hacia asi…
Código Delphi [-]
    while not Tb_Origen.Eof do begin
      for i:=0 to Tb_Origen.FieldCount-1 do
        Tb_Destino.Fields[i].AsString:= Tb_Origen.Fields[i].AsString;
      try
        Tb_Destino.Post;
      except
        Tb_Destino.Cancel;
      end;
      Tb_Origen.Next;
    end;
y realmente en tablas con mas de 100 000 registros se demoraba bastante. Entonces me dijeron que de la primera forma es mas rápido pero no he dado en como hacerlo.
Entonces si alguien conoce algún método distinto a este pero que sea mas optimo que no dude en publicarlo…
Mil gracias de antemano sin más
Mystery

Última edición por Mystery fecha: 03-11-2010 a las 15:29:46.
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
Copiar registros entre dos tablas radenf Varios 2 16-08-2010 13:18:14
Copiar tablas de BBDD distintas kirkhelek Firebird e Interbase 2 08-04-2010 21:23:36
Copiar tablas Access TONIAM Conexión con bases de datos 0 22-04-2005 11:36:18
ayuda al copiar dos tablas.... ronimaxh Firebird e Interbase 4 16-04-2004 17:34:39


La franja horaria es GMT +2. Ahora son las 08:42:13.


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