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