Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #3  
Antiguo 15-05-2012
ErYcK ErYcK is offline
Miembro
NULL
 
Registrado: abr 2012
Posts: 26
Poder: 0
ErYcK Va por buen camino
OK ahi va el codigo:

Código:
void __fastcall TXPrincipal::ToolButton2Click(TObject *Sender)
{

         if(OpenDialog1->Execute())
        {
                int col =0;
                int cont=0;
                String referencia ="";
                Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
                //Muestro la con un ProgressBar la carga de un StringGrid donde organizo los datos del Memo 
                XCarga->Show();
                XCarga->ProgressBar1->Min = 0;
                XCarga->ProgressBar1->Max = Memo1->Lines->Count;
                for (int i =0; i <= Memo1->Lines->Count; i++)
                {
                        XCarga->ProgressBar1->Position = i;

                        for (int j=1; j<= Memo1->Lines->Strings[i].Length();j++)
                        {

                                if (Memo1->Lines->Strings[i][j] == ';')
                                {
                                        if (referencia != "")
                                                StringGrid1->Cells[col][i] = referencia;
                                        referencia = "";
                                        col++;
                                        cont++;
                                        if (cont>60)
                                        {
                                                cont =0;
                                                col=0;
                                                break;
                                        }
                                }
                                if (Memo1->Lines->Strings[i][j] != ';')
                                {
                                        referencia = referencia +Memo1->Lines->Strings[i][j];
                                }

                        }

                }
        }
        // StringGrid Cargado
        XCarga->Close();
        XDatos->TCategorias->Open();
        XDatos->TSubCat1->Open();
        XDatos->TSubCat2->Open();
        XDatos->TSubCat3->Open();
        XDatos->TMarcas->Open();
        XDatos->QRecorreProductos->Open();
        XDatos->TCaracteristicas->Open();
        // abro las tablas y consultas que voy a necesitar 
        bool existe = false;
        int cont=0;
        XCarga->Show();
        XCarga->ProgressBar1->Min = 1;
        XCarga->ProgressBar1->Max = StringGrid1->RowCount;
        //Recorro el StringGrid 
        for (int f=1;f<=StringGrid1->RowCount;f++)
        {
                XCarga->ProgressBar1->Position = f;
                existe = false;
                XDatos->QRecorreProductos->First();
                //Recorro la tabla de productos con una Query para comprobar que el producto no este ya en la BD    
                while (!XDatos->QRecorreProductos->Eof)
                {
                        if (XDatos->QRecorreProductosREFERENCIA->Value == StringGrid1->Cells[0][f])
                                     existe = true;
                        XDatos->QRecorreProductos->Next();
                }

            if (!existe && StringGrid1->Cells[0][f]!="")
            {
             // Si no existe ya y el campo del StringGrid correspondiente a la referencia no esta vacio
             // Comienzo a asignar valores al nuevo producto 
                        XDatos->QProductos->Append();
                        XDatos->QProductosREFERENCIA->Value = StringGrid1->Cells[0][f];
                        XDatos->QProductosESTADO->Value = StringGrid1->Cells[1][f];
                        bool esta=false;
                        XDatos->TCategorias->First();
                        // compruebo k la categoria exista, si no es asi la añado    
                        while(!XDatos->TCategorias->Eof)
                        {
                                if (StringGrid1->Cells[2][f] == XDatos->TCategoriasCATEGORIA->Value)
                                {
                                        XDatos->QProductosCATEGORIA->Value=XDatos->TCategoriasCodCategoria->Value;
                                        {
                                        esta=true;
                                        }
                                }
                                XDatos->TCategorias->Next();
                        }
                        if (!esta)
                        {
                                XDatos->TCategorias->Append();
                                XDatos->TCategoriasCATEGORIA->Value = StringGrid1->Cells[2][f];
                                XDatos->TCategorias->Post();
                                XDatos->QProductosCATEGORIA->Value=XDatos->TCategoriasCodCategoria->Value;
                        }
                        bool esta2=false;
                        XDatos->TSubCat1->First();
                        // compruebo k la SubCategoria1 exista, si no es asi la añado 
                        while(!XDatos->TSubCat1->Eof)
                        {
                                if (XDatos->TSubCat1CATEGORIA->Value == XDatos->QProductosCATEGORIA->Value && XDatos->TSubCat1SUBCAT1->Value == StringGrid1->Cells[3][f] && XDatos->TSubCat1->FieldByName("SUBCAT1") != "")
                                {
                                        XDatos->QProductosSUBCAT1->Value= XDatos->TSubCat1CodSUBCAT1->Value;
                                        esta2=true;
                                }
                                XDatos->TSubCat1->Next();
                        }
                        if (!esta2)
                        {
                                XDatos->TSubCat1->Append();
                                XDatos->TSubCat1SUBCAT1->Value = StringGrid1->Cells[3][f];
                                XDatos->TSubCat1CATEGORIA->Value = XDatos->QProductosCATEGORIA->Value;
                                XDatos->TSubCat1->Post();
                                XDatos->QProductosSUBCAT1->Value= XDatos->TSubCat1CodSUBCAT1->Value;
                        }
                        bool esta3=false;
                        XDatos->TSubCat2->First();
                        // compruebo k la SubCategoria2 exista, si no es asi la añado
                        while(!XDatos->TSubCat2->Eof)
                        {
                                if (XDatos->TSubCat2SUBCAT1->Value == XDatos->QProductosSUBCAT1->Value && XDatos->TSubCat2SUBCAT2->Value == StringGrid1->Cells[4][f] && XDatos->TSubCat2->FieldByName("SUBCAT2") != "")
                                {
                                        XDatos->QProductosSUBCAT2->Value = XDatos->TSubCat2CodSUBCAT2->Value;
                                        esta3=true;
                                }
                                XDatos->TSubCat2->Next();
                        }
                        if (!esta3)
                        {
                                XDatos->TSubCat2->Append();
                                XDatos->TSubCat2SUBCAT2->Value = StringGrid1->Cells[4][f];
                                XDatos->TSubCat2SUBCAT1->Value = XDatos->QProductosSUBCAT1->Value;
                                XDatos->TSubCat2->Post();
                                XDatos->QProductosSUBCAT2->Value = XDatos->TSubCat2CodSUBCAT2->Value;
                        }
                        bool esta4=false;
                        XDatos->TSubCat3->First();
                        // compruebo k la SubCategoria1 exista, si no es asi la añado 
                        while(!XDatos->TSubCat3->Eof)
                        {
                                if (XDatos->TSubCat3SUBCAT2->Value == XDatos->QProductosSUBCAT2->Value && XDatos->TSubCat3SUBCAT3->Value == StringGrid1->Cells[5][f] && XDatos->TSubCat3->FieldByName("SUBCAT3") != "")
                                {
                                        XDatos->QProductosSUBCAT3->Value = XDatos->TSubCat3CodSUBCAT3->Value;
                                        esta4=true;
                                }
                                XDatos->TSubCat3->Next();
                        }
                        if (!esta4)
                        {
                                XDatos->TSubCat3->Append();
                                XDatos->TSubCat3SUBCAT3->Value = StringGrid1->Cells[5][f];
                                XDatos->TSubCat3SUBCAT2->Value = XDatos->QProductosSUBCAT2->Value;
                                XDatos->TSubCat3->Post();
                                XDatos->QProductosSUBCAT3->Value = XDatos->TSubCat3CodSUBCAT3->Value;

                        }
                        XDatos->QProductosPRODUCTO->Value = StringGrid1->Cells[6][f];
                        XDatos->QProductosKEY->Value = StringGrid1->Cells[7][f];

                        bool esta5=false;
                        XDatos->TMarcas->First();
                        // compruebo k la Marca exista, si no es asi la añado
                        while(!XDatos->TMarcas->Eof)
                        {
                                if (XDatos->TMarcasMARCA->Value == StringGrid1->Cells[8][f])
                                {
                                        XDatos->QProductosMARCA->Value = XDatos->TMarcasCodMARCA->Value;
                                        esta5=true;
                                }
                                XDatos->TMarcas->Next();
                        }
                        if (!esta5)
                        {
                                XDatos->TMarcas->Append();
                                XDatos->TMarcasMARCA->Value = StringGrid1->Cells[8][f];
                                XDatos->TMarcas->Post();
                                XDatos->QProductosMARCA->Value = XDatos->TMarcasCodMARCA->Value;
                        }
                        XDatos->QProductosDESCRIPCION->Value = StringGrid1->Cells[9][f];
                        XDatos->QProductosFOTOS->Value = StringGrid1->Cells[10][f];
                        XDatos->QProductosCATEGORIAX->Value = StringGrid1->Cells[11][f];
                        XDatos->QProductosCATEGORIAS->Value = StringGrid1->Cells[12][f];
                        //Confirmo el insert de productos  
                        XDatos->QProductos->Post();
                        // A partir de aqui los datos son de la tabla caracteristicas
                        for(int c=13;c<=StringGrid1->ColCount;c++)
                        {
                                if (StringGrid1->Cells[c][f]!="")
                                {
                                        if (c % 2 !=0)
                                        {
                                        XDatos->TCaracteristicas->Append();
                                        XDatos->TCaracteristicasCATEGORIA->Value = XDatos->QProductosCATEGORIA->Value;
                                        XDatos->TCaracteristicasSUBCAT1->Value = XDatos->QProductosSUBCAT1->Value;
                                        XDatos->TCaracteristicasSUBCAT2->Value = XDatos->QProductosSUBCAT2->Value;
                                        XDatos->TCaracteristicasSUBCAT3->Value = XDatos->QProductosSUBCAT3->Value;
                                        XDatos->TCaracteristicasref->Value = XDatos->QProductosREFERENCIA->Value;
                                        XDatos->TCaracteristicasCARACTERISTICA->Value = StringGrid1->Cells[c][f];
                                        XDatos->TCaracteristicasVALOR->Value = StringGrid1->Cells[c+1][f];
                                        // Confirmo la insercion de datos en caracteristicas 
                                        XDatos->TCaracteristicas->Post();
                                        }
                                }
                        }
             //Cuento las veces que aparece un espacio sin datos en el StringGrid 
             if (StringGrid1->Cells[0][f]=="")
                        cont ++;
             //Si aparecen mas de 100 espacios corto el proceso
             if (cont > 100)
                        break;
             }
        }
        XDatos->QRecorreProductos->Close();
        DBGrid1->Refresh();
}
He dejado comentarios en el codigo que indican lo que voy haciendo.

Soy bastante novato y provablemen te esto se podria hacer de alguna forma mas sencilla, no lo se, pero lo que me tarda es abusivo, gracias por contestar tan rapido
Responder Con Cita
 



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
CreateForm demasiado lento kverna Varios 6 06-03-2008 14:32:14
Procedure en Firebird lento o IbQuery lento capo979 Firebird e Interbase 14 17-07-2007 21:35:36
Demasiado lento programa Manuel Varios 1 27-10-2005 18:10:08
Proceso lento al dar enter sobre un boton Walterdf Varios 1 05-04-2005 18:20:50
Interbase demasiado lento diegofhernando Conexión con bases de datos 2 12-09-2003 22:05:24


La franja horaria es GMT +2. Ahora son las 19:25:06.


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