Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Migrar Registros (https://www.clubdelphi.com/foros/showthread.php?t=93669)

feliz-58 26-12-2018 01:22:48

Migrar Registros
 
Saludos, una pregunta,
Tengo una tabla en access que tiene 3,155,602 registros, cuando intento importarlo a SQL server 2018, solo importa 65,534.

Alguna idea para migrarlos todos? o es mejor, utilizarlos desde ahi? (utilizar ambas bases de datos)

Que contiene la base de datos? la lista de RNC de mi Pais.

Casimiro Notevi 26-12-2018 11:21:40

Creo que lo más fácil es que lo leas directamente del fichero original, que es un texto normal.

Ñuño Martínez 26-12-2018 13:59:38

Fíjate que exporta justo 65.534, es decir, casi el máximo que permite direccionar con 16 bits (63.535). Me hace sospechar que hay un campo con la ID que debería ser de, al menos, 32 bit pero que se ha definido como 16. Revisa la definición de los campos.

feliz-58 26-12-2018 18:48:31

Cita:

Empezado por Casimiro Notevi (Mensaje 530179)
Creo que lo más fácil es que lo leas directamente del fichero original, que es un texto normal.

Esta en este formato.

Como esta dividido por | Solo me interesa obtener la primera, segunda y cuarta al momento de hacer una consulta.
Imagen



Cita:

Empezado por Ñuño Martínez (Mensaje 530180)
Fíjate que exporta justo 65.534, es decir, casi el máximo que permite direccionar con 16 bits (63.535). Me hace sospechar que hay un campo con la ID que debería ser de, al menos, 32 bit pero que se ha definido como 16. Revisa la definición de los campos.

Si mal no recuerdo en una de las pruebas puse todos los campos VarcharMax y hacia lo mismo...

Casimiro Notevi 26-12-2018 18:52:30

No somos adivinos y no vemos tu ordenador/computadora.

feliz-58 26-12-2018 19:32:11

Cita:

Empezado por Casimiro Notevi (Mensaje 530182)
No somos adivinos y no vemos tu ordenador/computadora.

Puse la imagen, no entiendo el porqué de tu sarcasmo, por si acaso, uso delphi 7.

Casimiro Notevi 26-12-2018 19:54:42

Cita:

Empezado por feliz-58 (Mensaje 530183)
Puse la imagen, no entiendo el porqué de tu sarcasmo, por si acaso, uso delphi 7.

No es sarcasmo :confused:
Digo que no somos adivinos porque dices que tan solo puedes traspasar una cantidad determinada de registros, pues necesitamos ver el código fuente que estás usando y la estructura de la base de datos destino.

feliz-58 26-12-2018 20:33:28

Cita:

Empezado por Casimiro Notevi (Mensaje 530184)
No es sarcasmo :confused:
Digo que no somos adivinos porque dices que tan solo puedes traspasar una cantidad determinada de registros, pues necesitamos ver el código fuente que estás usando y la estructura de la base de datos destino.

El migrado no lo hice a través de delphi, lo hice desde el mismo SQL Server importando el fichero de base de datos Access.

En su defecto, si hay alguna forma en Delphi, de buscar dentro del fichero txt y Seleccionar la información necesitada, seria un éxito.

Casimiro Notevi 26-12-2018 23:33:08

Cita:

Empezado por feliz-58 (Mensaje 530185)
El migrado no lo hice a través de delphi, lo hice desde el mismo SQL Server importando el fichero de base de datos Access.
En su defecto, si hay alguna forma en Delphi, de buscar dentro del fichero txt y Seleccionar la información necesitada, seria un éxito.

Lo tienes fácil si los campos están separados por un carácter |

feliz-58 27-12-2018 04:17:02

Cita:

Empezado por Casimiro Notevi (Mensaje 530186)
Lo tienes fácil si los campos están separados por un carácter |

He estado buscando, pero solo he visto lecturas de TXT y comprobar si existen palabras...

Casimiro Notevi 27-12-2018 09:40:13

Pues eso es, un fichero TXT y encontrar palabras, en este caso una palabra de longitud 1.
Ya sabes, abres el TextFile y la conexión a la BD.
Código:

Lees línea a línea hasta eof del fichero.
  Primer campo hasta el primer |
  Segundo campo hasta el segundo |
  Saltas un |
  Tercer campo hasta el siguiente |
  Guardas en la BD los campos
Finalmente, cierras el fichero.

Y listo.

Casimiro Notevi 28-12-2018 00:04:19

¿Has conseguido hacerlo?
¿Necesitas alguna ayuda?

feliz-58 28-12-2018 00:52:20

Cita:

Empezado por Casimiro Notevi (Mensaje 530192)
Pues eso es, un fichero TXT y encontrar palabras, en este caso una palabra de longitud 1.
Ya sabes, abres el TextFile y la conexión a la BD.
Código:

Lees línea a línea hasta eof del fichero.
  Primer campo hasta el primer |
  Segundo campo hasta el segundo |
  Saltas un |
  Tercer campo hasta el siguiente |
  Guardas en la BD los campos
Finalmente, cierras el fichero.

Y listo.

Hasta ahora buscando solo tengo esto, que es para leer caracter por caracter, pero no se como hacer que haga lo que quiero.

Código Delphi [-]
var
Lista: TStringList;
cadena ,Registro,cadena2:string;
I, k, j: Integer;
begin
  Lista:= TStringList.Create;
  try
   Lista.LoadFromFile('c:\RNC.txt');
   for I := 0 to Lista.Count - 1 do
   begin
    cadena:= Lista.Strings[i];
    k:=Length(cadena);
    for j := 0 to k do
     begin
     cadena2:=Copy(cadena,j,1);
     if cadena2='|' then
      begin
       ShowMessage(Registro);
       Registro:='';
      end
     
      else
       begin
       Registro:=Registro + cadena2;
       end
 
    end;
 
   end;
  
  finally
    Lista.Free;
 end;

end;

Si supiera como hacerlo no estaría aquí...
Mi fuerte es la reparación de laptops, Lcd, plasmas, y alguna que otra cosa dentro de la electronica, no la elaboración de código, la elaboración de código lo hago porque me gusta aprender programación.

Casimiro Notevi 28-12-2018 11:45:32

Crea un proyecto nuevo.
Añade un botón, 3 labels y un memo, por ejemplo.
En el click del botón pega esto:
Código Delphi [-]
procedure TForm1.bt1Click(Sender: TObject);
const
  crlf = chr(13)+chr(10);
var
  F : TextFile;
  cLin : string;
  iPos : Integer;
  cCampo1, cCampo2, cCampo3 : string;
begin
  // Aquí deberías conectar con tu base de datos y preparar el insert, etc.
  //
  // Ahora empezamos a leer el fichero línea a línea y vamos insertando en la BD.
  AssignFile(F,'c:\DGII_RNC.TXT');
  Reset(F);
  ReadLn(F,cLin);
  while not eof(F) do
  begin
    // primer dato, hasta el primer |
    iPos := Pos('|',cLin);
    cCampo1 := Copy(cLin,0,iPos-1);
    // Cortamos de la línea el primer dato que hemos usado
    cLin := copy(clin,iPos+1,length(cLin));
    // leemos hasta el siguiente |
    iPos := Pos('|',cLin);
    cCampo2 := Copy(cLin,0,iPos-1);
    // Cortamos de la línea ese dato que hemos usado
    cLin := copy(clin,iPos+1,length(cLin));
    // buscamos el siguiente |
    iPos := Pos('|',cLin);
    // Cortamos de la línea porque no nos sirve
    cLin := copy(clin,iPos+1,length(cLin));
    // buscamos el siguiente |
    iPos := Pos('|',cLin);
    cCampo3 := Copy(cLin,0,iPos-1);
    // lo mostramos en pantalla, si queremos
    lb1.Caption := ccampo1;
    lb2.Caption := ccampo2;
    lb3.Caption := ccampo3;
    // lo añado a un memo, tú deberías guardar los datos en tu base de datos
    mmo1.Lines.Add(ccampo1+crlf+ccampo2+crlf+ccampo3+crlf);
    // y pasamos a leer la siguiente línea
    ReadLn(F,cLin);
  end;
  CloseFile(F);
end;
Los labels los he nombrado: lb1, lb2 y lb3
El botón lo he nombrado: bt1
El memo lo he nombrado: mmo1

feliz-58 29-12-2018 02:28:59

Wow, funciona excelente Maestro, Gracias por compartir, que delphi usas?

Casimiro Notevi 29-12-2018 11:00:55

Es un delphi 2007, pero es un código estandar, funcionará en todos los delphi.

feliz-58 29-12-2018 15:19:06

Cita:

Empezado por Casimiro Notevi (Mensaje 530226)
Es un delphi 2007, pero es un código estandar, funcionará en todos los delphi.

No lo pregunto por el código, una vez tenia un delphi que era el 2007 pero una versión mas "didactica", cuando comenzabas a escribir código te salia como una ayuda predictiva. y me acorde de ellos porque en esa versión los componentes cuando los ponías en el formulario aparecían con otro nombre, en la versión normal salen como: Label1, en esa que te menciono salen lb1.

Referente al código, ya hice la importación, y le agregue dos campos mas, en total, se importaron 3,203,126

Casimiro Notevi 29-12-2018 17:13:06

Lo del renombrado es porque lo tengo configurado así con el asistente cnpack instalado.

feliz-58 29-12-2018 17:41:30

Cita:

Empezado por Casimiro Notevi (Mensaje 530231)
Lo del renombrado es porque lo tengo configurado así con el asistente cnpack instalado.

Ya lo instale, lo que mencione era algo parecido, gracias.


La franja horaria es GMT +2. Ahora son las 15:39:23.

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