Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-03-2008
caifan_0883 caifan_0883 is offline
Miembro
 
Registrado: nov 2005
Ubicación: Los Mochis, Mexico
Posts: 42
Poder: 0
caifan_0883 Va por buen camino
Se pierden datos en Insercion Masiva

Hola compañeros foreros.
Me surgio un problemilla, estoy insertando unos 2500 registros de excel a un BD en Firebird 2.0. Todo funciona "bien". No salta error alguno.
Pero al momento de checar los datos hay algunos de ellos que no aparecen cierto dato que necesito.
Estoy insertando en una Tabla llamada ARTICULOS y en otra CODIGOS.
Me aparece el articulo pero el codigo, el cual hace referencia.

Aqui les dejo la parte de mi codigo para ver si me podrian ayudar donde esta mi error. Gracias y Saludos.

Código:
procedure TForm1.BtnArticulosClick(Sender: TObject);
Var
   Excel:Variant;
   DescCorta,DescNormal,CodigoB1,CodigoB2,CodigCateg,Categ:String;
   I,J,Aux,IdCateg,IdArt:Integer;
begin
   Aux:=0;
   IBQuery1.Active:=False;
 
   Excel:=CreateOleObject('Excel.Application');
   Excel.WorkBooks.Open(Ruta+'\NARTE.xls');
   For I:=1 to 2552 Do
     Begin
        IBQuery1.SQL.Clear;
        IBQuery2.SQL.Clear;
        CodigCateg:=Copy(Excel.Cells[I,1].Value,0,3);
        CodigoB2:=Excel.Cells[I,1].Value;
        DescNormal:=Trim(Copy(Excel.Cells[I,2].Value,0,44));
        DescCorta:=Trim(Copy(Excel.Cells[I,2].Value,0,19));
        CodigoB1:=Copy(Excel.Cells[I,3].value,0,13);
        For J:=0 to LBCategorias.Items.Count-1 Do
           Begin
              If CodigCateg = Copy(LbCategorias.Items[J],0,3) then
                Begin
                 Aux:=J;
                 Break;
                End;
           End;
 
        Categ:=Trim(Copy(LbCategorias.Items[Aux],4,15));
        IBQueryAux.SQL.Clear;
        IBQueryAux.SQL.Text:='Select CLAVE From CATEGORIAS Where Nombre=:IdNombre';
        IBQueryAux.ParamByName('IdNombre').AsString:=Categ;
        IBqueryAux.Open;
        IdCateg:=IBQueryAux.FieldByname('Clave').AsInteger;
 
         With IBQuery1 Do
            Begin
               SQL.Text:='Insert into ARTICULOS (DESC_CORTA,DESC_LARGA,PRECIO1,PRECIO2,';
               SQL.Add('PRECIO3,PRECIO4,ULT_COSTO,COSTOPROM,DESC_AUTO,');
               SQL.Add('EXISTENCIA,MINIMO,MAXIMO,CATEGORIA,DEPARTAMENTO,TIPO,');
               SQL.Add('UNIDADE,CANTIDAD_CNT,PROVEEDOR1,PROVEEDOR2,IVA,');
               SQL.Add('FECHA_CAP,FECHA_UMOV,ESTATUS,ULTVENTA,ULTCOMPRA,UTILIDAD)');
               SQL.Add(' Values (:Vari2,:Vari3,:Vari4,:Vari5,:Vari6,:Vari7,');
               SQL.Add(':Vari8,:Vari9,:Vari10,:Vari11,:Vari12,:Vari13,');
               SQL.Add(':Vari14,:Vari15,:Vari16,:Vari17,:Vari18,:Vari19,');
               SQL.Add(':Vari20,:Vari21,:Vari22,:Vari23,:Vari24,:Vari25,');
               SQL.Add(':Vari26,:Vari27)');
               //ParamByName('Vari1').AsInteger:=I;
               ParamByName('Vari2').AsString:=DescCorta;
               ParamByName('Vari3').AsString:=DescNormal;
               ParamByName('Vari4').AsFloat:=1.00;
               ParamByName('Vari5').AsFloat:=0.00;
               ParamByName('Vari6').AsFloat:=0.00;
               ParamByName('Vari7').AsFloat:=0.00;
               ParamByName('Vari8').AsFloat:=1.00;
               ParamByName('Vari9').AsFloat:=1.00;
               ParamByName('Vari10').AsString:='N';
               ParamByName('Vari11').AsFloat:=0.00;
               ParamByName('Vari12').AsFloat:=0.00;
               ParamByName('Vari13').AsFloat:=0.00;
               ParamByName('Vari14').AsInteger:=IdCateg;
               ParamByName('Vari15').AsString:='';
               ParamByName('Vari16').AsInteger:=3;
               ParamByName('Vari17').AsInteger:=1;
               ParamByName('Vari18').AsString:='N';
               ParamByName('Vari19').AsString:='';
               ParamByName('Vari20').AsString:='';
               ParamByName('Vari21').AsFloat:=0.00;
               ParamByName('Vari22').AsDateTime:=Date;
               ParamByName('Vari23').AsDateTime:=Date;
               ParamByName('Vari24').AsString:='A';
               ParamByName('Vari25').AsString:='';
               ParamByName('Vari26').AsString:='';
               ParamByName('Vari27').AsString:='';
               ExecSQL;
               Transaction.Commit;
            End;
         IBQuery1.SQL.Clear;
         IBQuery1.SQL.Text:='Select CLAVE From ARTICULOS Where Desc_Corta=:Descrip';
         IBQuery1.ParamByName('Descrip').AsString:=DescCorta;
         IBQuery1.Open;
         IdArt:=IBQuery1.FieldByName('Clave').AsInteger;
 
With IBQuery1 Do
             Begin
                 SQL.Text:='Insert into CODIGOS (ARTICULO,CODIGO,TIPO) Values (:IdArt,:IdCod,:IdTip)';
                 ParamByName('IdArt').AsInteger:=IdArt;
                 ParamByName('IdCod').AsString:=CodigoB1;
                 ParamByName('IdTip').AsString:='P';
                 ExecSQL;
                 Transaction.Commit;
             End;
End;
Como datos, manejo los componentes de la Pestaña Interbase, Delphi 7 y FireBird 2.0 Saludos.

Los datos de articulos se insertan correctamente y los de codigos de barra algunos no. Cuando habla de algunos son unos 400 registros que no pone el codigo, y el los demas estan correctamente los datos.

Saludos y Gracias de Nuevo
__________________
Da conocimiento a los que no saben.

Última edición por caifan_0883 fecha: 26-03-2008 a las 16:12:04. Razón: Falta de datos.
Responder Con Cita
  #2  
Antiguo 26-03-2008
Avatar de gmontes
gmontes gmontes is offline
Miembro
 
Registrado: jul 2004
Ubicación: Culiacán, Sinaloa, México
Posts: 668
Poder: 20
gmontes Va por buen camino
tengo el mismo problema y esto es lo que me respondieron

http://www.clubdelphi.com/foros/showthread.php?t=54468

reinstale firebird con la ultima version y donde ya estaba instalado

lo desinstale y busque eliminar los archivos fbclient.dll y gds32.dll en <system32> y reinstale de nuevo. fue la ultima sugerencia.


suerte
__________________
Todos llevamos nuestros demonios a cuestas..
Responder Con Cita
  #3  
Antiguo 26-03-2008
caifan_0883 caifan_0883 is offline
Miembro
 
Registrado: nov 2005
Ubicación: Los Mochis, Mexico
Posts: 42
Poder: 0
caifan_0883 Va por buen camino
Cita:
Empezado por gmontes Ver Mensaje
tengo el mismo problema y esto es lo que me respondieron

http://www.clubdelphi.com/foros/showthread.php?t=54468

reinstale firebird con la ultima version y donde ya estaba instalado

lo desinstale y busque eliminar los archivos fbclient.dll y gds32.dll en <system32> y reinstale de nuevo. fue la ultima sugerencia.


suerte
Gracias GMontes (Paisa). Ya habia checado tu post, pero habia descartado reinstalar otro motor de Firebird, pensando que era error mio en el codigo o habia descartado alguna otra cosa.
Pero en estos momento voy a buscar la version de firebird que te proponen en el otro post.

Gracias por la ayuda y gracias.
__________________
Da conocimiento a los que no saben.
Responder Con Cita
  #4  
Antiguo 26-03-2008
caifan_0883 caifan_0883 is offline
Miembro
 
Registrado: nov 2005
Ubicación: Los Mochis, Mexico
Posts: 42
Poder: 0
caifan_0883 Va por buen camino
Igual

Bueno desistale el Firebird version 2.0.0.12748 y me baje e instale la version recomendada 2.0.3.12981.

Hice la pruebas de insercion.

Y nada todo sigue igual como con la version anterior. A lo mejor es algo en mi codigo o algun dato que se me paso.

Saludos y gracias.
__________________
Da conocimiento a los que no saben.
Responder Con Cita
  #5  
Antiguo 26-03-2008
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Analisando un poco el codigo, lo unico que se me ocurre es que se este produciendo un error en la insercion de los codigos.

La sospecha es que la seleccion de registros este dando 0 registros, esto debido a la comparacion de 2 strings que estas haciendo Desc_Corta=escrip';

Supongamos que:
Desc_Corta='Azucar'
escrip='AZUCAr'

Al realizar la seleccion con Where Desc_Corta=escrip';, esta dara cero registros.

Código Delphi [-]
IBQuery1.SQL.Clear;
         IBQuery1.SQL.Text:='Select CLAVE From ARTICULOS Where Desc_Corta=escrip'; //Sugiero Upper->(Desc_Corta)=Upper(escrip)       IBQuery1.ParamByName('Descrip').AsString:=DescCorta;
         IBQuery1.Open;

         If IBQuery1.RecordCount=0 Then
            //No se encontro ningun registro que cumpla la condicion Where;
        
         
         IdArt:=IBQuery1.FieldByName('Clave').AsInteger;
         //Si no se encontraron registros IdArt=0;

Espero que sirva en algo...

Saludos desde
Concepcion-Chile
Responder Con Cita
  #6  
Antiguo 27-03-2008
caifan_0883 caifan_0883 is offline
Miembro
 
Registrado: nov 2005
Ubicación: Los Mochis, Mexico
Posts: 42
Poder: 0
caifan_0883 Va por buen camino
Cita:
Empezado por cloayza Ver Mensaje
Analisando un poco el codigo, lo unico que se me ocurre es que se este produciendo un error en la insercion de los codigos.

La sospecha es que la seleccion de registros este dando 0 registros, esto debido a la comparacion de 2 strings que estas haciendo Desc_Corta=escrip';

Supongamos que:
Desc_Corta='Azucar'
escrip='AZUCAr'

Al realizar la seleccion con Where Desc_Corta=escrip';, esta dara cero registros.


Código Delphi [-]IBQuery1.SQL.Clear;
IBQuery1.SQL.Text:='Select CLAVE From ARTICULOS Where Desc_Corta=escrip'; //Sugiero Upper->(Desc_Corta)=Upper(escrip) IBQuery1.ParamByName('Descrip').AsString:=DescCorta;
IBQuery1.Open;

If IBQuery1.RecordCount=0 Then
//No se encontro ningun registro que cumpla la condicion Where;


IdArt:=IBQuery1.FieldByName('Clave').AsInteger;
//Si no se encontraron registros IdArt=0;





Espero que sirva en algo...

Saludos desde
Concepcion-Chile

Gracias por contestar Cloayza.

Conforme a lo que me sugieres sobre el Upper, todo el catalogo que quiero manejar esta en mayusculas por eso descarto esa posibilidad.

Y donde pongo el codigo para la seleccion de la CLAVE de la tabla ARTICULOS, es un valor autoincrementable y ademas primaria, entonces lo guardo en una variable lo que me lanza el Query.

De todos modos voy a realizar eso del UPPER por si las malditas moscas.

Muchas Gracias por contestar y Saludos desde Los Mochis, Sinaloa, México.
__________________
Da conocimiento a los que no saben.
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
Error en alta masiva de datos en una sóla transacción afxe Firebird e Interbase 3 07-05-2007 10:27:38
Insercion masiva de una BD a otra BD oscjae Firebird e Interbase 5 15-12-2006 20:25:49
Insercion de datos con un dbgrid luxus Conexión con bases de datos 2 26-10-2006 17:02:55
Insercion masiva de registros MUY LENTA Balda Firebird e Interbase 10 24-03-2004 21:40:21
Inserción masiva en MySQL Morfo MySQL 3 09-01-2004 18:05:33


La franja horaria es GMT +2. Ahora son las 00:18:07.


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