Pensaba compartirla cuando estuviese bien, para que no quede un codigo que no funciona del todo bien, es que no necesito dos consultas para hacer una, si no tres, el count para saber si hay resultados, la consulta en si y esta la tengo que repetir para que ese maldito eof no este a true, pero bueno, ahi va xD.
Código:
TADODataSet * __fastcall Taux::consulta(AnsiString consulta,AnsiString consulta2)
//Consulta 1 es la consulta a realizar y consulta2 el count.
{
this->ADOConnection1->Connected=true;
this->ADODataSet1->Connection=this->ADOConnection1;
this->ADODataSet1->ConnectionString=this->ADOConnection1->ConnectionString;
this->ADODataSet1->CommandText=consulta2;
this->ADODataSet1->Active=true;
this->ADODataSet1->First();
if (this->ADODataSet1->FieldByName(this->ADODataSet1->FieldDefs->Items[0]->Name)->AsInteger>0)
//si el count es >0
{
this->ADODataSet1->Active=false;
this->ADODataSet1->CommandText=consulta;
this->ADODataSet1->Active=true;
//Hacemos la consulta y retornamos el DataSet para procesarlo
return (ADODataSet1);
}
else //Si no, devolvemos un null y cerramos esta consulta.
{
this->ADODataSet1->Close();
return(NULL);
}
}
//---------------------------------------------------------------------
void __fastcall Taux::desconectar(TADODataSet *c)
{
WideString asd=c->CommandText; //Es necesario reasignar la consulta para que la repita.
c->CommandText=asd;
c->Active=true;
c->Open(); //Esta es la 3º consulta a la que me refiero.
c->Close();
}
//------------------ Un ejemplo de Procesar la Consulta -----------
TADODataSet *asd=aux->consulta("select * from...","select count(*) ....");
if (asd!=NULL)
{
while (asd->Eof!=true)
{
j++;
Tabla->Cells[0][j]=m->FieldByName("autonumerico")->AsInteger;
Tabla->Cells[1][j]=m->FieldByName("proveedor.nombre")->AsString;
....
asd->Next();
}
aux->desconectar(asd);