Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-04-2009
HELBERT GARCIA HELBERT GARCIA is offline
Miembro
 
Registrado: nov 2007
Posts: 24
Poder: 0
HELBERT GARCIA Va por buen camino
cargar plano txt en tabla sql server desde delphi 6

Neftali, necesito cargar un plano.txt a una tabla sql server de 200.000 registros a una velocidad conciderable, pues el proceso que utilizo actualmente me tarda hora y necesito minutos 5 tal vez.

creo que tu tienes la experiencia y muy seguramente me puedas ayudar a solucionar este problema.
te lo agradezco
Responder Con Cita
  #2  
Antiguo 08-04-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Hola Helbert, bienvenido a los foros.

Aunque yo sea el Administrador de los foros, piensa que hay muchas más gente que sabe del tema y te aseguro que muchos de ellos bastante más que yo.

Para comprender lo que estás haciendo y cómo se puede mejorar, primero debes explicar cómo estás haciendo actualmente la importación de Datos desde la tabla plana a SQL Server.

¿Lo estás haciendo desde un programa Delphi? ¿Qué componentes estás utilizando? ¿Utilizas transacciones?

Estaría bien que colocaras algo de código.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 08-04-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Hola.
Acabo de hacer una sencilla prueba de importar utilizando ADO, 10.000 registros desde un fichero plano a una tabla de SQL Server (servidor remoto) y tarda apenas 20 sg.

Así que estaría bien que describieras cómo estás haciendo el proceso.

NOTA: Para el fichero TXT he accedido con un ADOTable y el driver de Jet4.
NOTA: Para la tabla de SQL Server otro ADOTable.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 08-04-2009
HELBERT GARCIA HELBERT GARCIA is offline
Miembro
 
Registrado: nov 2007
Posts: 24
Poder: 0
HELBERT GARCIA Va por buen camino
Neftali, gracias por responder
estoy utilizando este codigo delphi en el cual para insertar los campos a la tabla lo hagopor un procedimiento almacenado llamado Splanoswinsiob

Código Delphi [-]
 
procedure TFrmplanoWinsiob.BitBtn1Click(Sender: TObject);
var
F: TextFile;
cadena:string;
i : Integer;
begin
NomPlanoToImp := Trim(edtArchivo.Text);
if Archivo <> nil then
  Begin
    Archivo.Clear;
    Archivo.LoadFromFile(NomPlanoToImp);
    reArchivo.Lines.LoadFromFile(NomPlanoToImp);
  End;
  if reArchivo.Lines.Count = 0 then
  Begin
    ShowMessage('No a definido el archivo a LEER');
    Exit;
  End;
  if MessageDlg('Seguro de LEER datos ?',mtConfirmation,[mbYes,mbNo],0) = mrYes then
   begin
     AssignFile(F,edtArchivo.Text);  
   end;
  try
    for i:=1 to Archivo.Count-2 do
    Begin
      Cadena := Archivo.Strings[i];
   with  Splanoswinsiob do
     begin
      params[0].Asstring :=Copy(Cadena,1,9);
      params[1].Asstring :=Copy(Cadena,10,13);
      params[2].Asstring :=Copy(Cadena,14,21);
      params[3].Asstring:=Copy(Cadena,22,36);
      params[4].Asstring:=Copy(Cadena,37,51);
      params[5].Asstring:=Copy(Cadena,52,53);
      params[6].Asstring:=Copy(Cadena,54,55);
      params[7].Asstring:=Copy(Cadena,56,57);
      params[8].Asstring:=Copy(Cadena,58,72);
      params[9].Asstring :=Copy(Cadena,73,112);
      params[10].Asstring :=Copy(Cadena,113,137);
      params[11].Asstring :=Copy(Cadena,138,140);
      params[12].Asstring :=Copy(Cadena,141,144);
      params[13].Asstring :=Copy(Cadena,145,152);
      params[14].Asstring :=Copy(Cadena,153,162);
      params[15].Asstring := Copy(Cadena,163,166);
      params[16].Asstring :=Copy(Cadena,167,206);
      params[17].Asstring :=Copy(Cadena,207,221);
      params[18].Asstring :=Copy(Cadena,222,246);
      params[19].Asstring :=Copy(Cadena,247,249);
      params[20].Asstring :=Copy(Cadena,250,250);
      params[21].Asstring :=Copy(Cadena,251,270);
      params[22].Asstring :=Copy(Cadena,271,311);
      params[23].Asstring :=Copy(Cadena,312,327);
      params[24].Asstring :=Copy(Cadena,328,370);
      ExecProc;
      end;
          end;
          except
      raise;
  end;

Última edición por Neftali [Germán.Estévez] fecha: 08-04-2009 a las 17:29:04.
Responder Con Cita
  #5  
Antiguo 08-04-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Para posteriores mensaje utiliza TAG's cuando pongas código Delphi, verás que se lee mejor.
Este ya te lo modifico yo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 08-04-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por HELBERT GARCIA Ver Mensaje
Neftali, gracias por responder estoy utilizando este codigo delphi en el cual para insertar los campos a la tabla lo hagopor un procedimiento almacenado llamado Splanoswinsiob
Hola Helbert. Pues he probado un código similar al tuyo porque tenía dudas sobre los Copy, pero el tiempo total de insertar 10.000 registros ha sido similar al anterior; Unos 20 segundos. Cosa que me hace pensar que no va por aquí la lentitud. Deberías mirar qué hace exactamente el StoredProc. También el tema de Red. Puedes poner una marca de tiempo después de cada insert para estimar qué está tardando en hacer una vuelta del bucle.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por Neftali [Germán.Estévez] fecha: 08-04-2009 a las 17:56:57.
Responder Con Cita
  #7  
Antiguo 08-04-2009
HELBERT GARCIA HELBERT GARCIA is offline
Miembro
 
Registrado: nov 2007
Posts: 24
Poder: 0
HELBERT GARCIA Va por buen camino
este es el procedimiento que estoy usando

CREATE PROCEDURE spplanowinsiob
(
@conse char (9),--0
@cod_suc char (4),--1
@fec_operacion char (8),--2
@vlr_nominal char(15),--3
@vlr_pesos char (15),--4
@tip_moneda char (2),--5
@form_pago char (2),--6
@tip_iden char (2),--7
@num_iden char (15),--8
@nom_razsoc char (40),--9
@dir_eccion char (25),--10
@cod_depart char (3),--11
@cod_munic char (4),--12
@cod_inditel char (8),--13
@num_tel char (10),--14
@tip_transac char (4),--15
@nom_remit char (40),--16
@n_idremit char (15),--17
@tp_idremit char (25),--18
@pais_orig char (3),--19
@Ori_desti char (1),--20
@ciuor_dest char (20),--21
@entidad char (40),--22
@num_cuenb char (16),--23
@detalle char (43)--24
)
AS
begin
Insert into PLANOWINSIOB(conse,cod_suc,fec_operacion,vlr_nominal,vlr_pesos,tip_moneda,
form_pago,tip_iden,num_iden,nom_razsoc,dir_eccion,cod_depart,cod_munic,cod_inditel,
num_tel,tip_transac,nom_remit,n_idremit,tp_idremit,pais_orig,Ori_desti,ciuor_dest,
entidad,num_cuenb,detalle)
Values (@conse,@cod_suc,@fec_operacion,@vlr_nominal,@vlr_pesos,@tip_moneda,
@form_pago,@tip_iden,@num_iden,@nom_razsoc,@dir_eccion,@cod_depart,@cod_munic,@cod_inditel,
@num_tel,@tip_transac,@nom_remit,@n_idremit,@tp_idremit,@pais_orig,@Ori_desti,@ciuor_dest,
@entidad,@num_cuenb,@detalle)
end
GO
Responder Con Cita
  #8  
Antiguo 08-04-2009
HELBERT GARCIA HELBERT GARCIA is offline
Miembro
 
Registrado: nov 2007
Posts: 24
Poder: 0
HELBERT GARCIA Va por buen camino
estoy utilizando un StoredProc no un ADOStoredProc
Responder Con Cita
  #9  
Antiguo 08-04-2009
HELBERT GARCIA HELBERT GARCIA is offline
Miembro
 
Registrado: nov 2007
Posts: 24
Poder: 0
HELBERT GARCIA Va por buen camino
ya lo resolvi, gracias
Responder Con Cita
  #10  
Antiguo 08-04-2009
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Poder: 19
Faust Va por buen camino
Angry

Cita:
Empezado por HELBERT GARCIA Ver Mensaje
ya lo resolvi, gracias
Pero dinos ¿como?
__________________
Herr Heins Faust
Responder Con Cita
  #11  
Antiguo 08-04-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por HELBERT GARCIA Ver Mensaje
ya lo resolvi, gracias
¿Dónde estaba el problema de lentitud?
Sería interesante saberlo para posteriores consultas.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #12  
Antiguo 13-04-2009
HELBERT GARCIA HELBERT GARCIA is offline
Miembro
 
Registrado: nov 2007
Posts: 24
Poder: 0
HELBERT GARCIA Va por buen camino
estaba utilizando una conexion BDE la cambie por ADO y envie el procedimiento correspondiente a este y funciono: antes cargado 200.000 registros se demoraba 3 horas ahora lo hace en 7 minutos

Gracias
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
Generar archivo delimitado desde tabla SQL Server delphisenda MS SQL Server 1 28-06-2007 23:21:09
Crear tabla en una BD en Server A desde consulta en tabla B en server B joaquinalberto MySQL 1 18-05-2007 10:39:27
Como Cargar Archivo Plano mauroacev Conexión con bases de datos 3 17-03-2005 22:43:13
Cargar un TTreeView desde una tabla hibero OOP 8 15-07-2004 19:43:33
Crear tabla temporal en SQL Server desde Delphi oneromm SQL 1 23-12-2003 21:09:22


La franja horaria es GMT +2. Ahora son las 19:55:58.


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