Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Una duda con TADODataSet (https://www.clubdelphi.com/foros/showthread.php?t=44350)

LordSarevok 06-06-2007 14:17:59

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);


LordSarevok 13-06-2007 16:48:42

No se os ha ocurrido nada verdad? :/

Otra "pega" es que al ejecutar alguna insercion/update/delete no tengo mas remedio que meterle un sleep de un segundo porque si no al hacer un select nada mas escribir algo, no aparece en la consulta.


La franja horaria es GMT +2. Ahora son las 03:01:14.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi