Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   TIBQuery: Evento OnBeforeOpen (https://www.clubdelphi.com/foros/showthread.php?t=89940)

Angel.Matilla 07-03-2016 11:04:06

TIBQuery: Evento OnBeforeOpen
 
Estoy trabajando con BCB 6.

Para simplificar código quería hacer que dos TIBQuery que tengo llamaran a los mismos eventos OnAfterOpen y OnBeforeOpen.
Con el primero de ellos no tengo problema y con el evento definido así me funcionan los dos:
Código:

void __fastcall TForm1::AfterOpen(TDataSet *DataSet)
{
    DataSet->Last();
    DataSet->First();
}
//---------------------------------------------------------------------------

pero con el otro el código que he puesto no va:
Código:

void __fastcall TForm1::BeforeOpen(TDataSet *DataSet)
{
    DataSet->Prepare();
}
//---------------------------------------------------------------------------

Ya he comprobado que el método Prepare() es propio del query y no del DataSet. ¿Cómo tendría que definir un query genérico para que ese evento me sirviera para ambos TIBQuery? No sé si me he logardo explicar.

He probado a definir ese query con
Código:

TIBQuery *qQuery = new TIBQuery(this);
y tratar de heredar las propiedades del DataSet, pero no acabo de dar con la manera.

AgustinOrtu 07-03-2016 16:07:30

Facil, castea el objeto DataSet a TIBQuery:

Código PHP:

void __fastcall TForm1::BeforeOpen(TDataSet *DataSet)
{
     
TIBQuery(DataSet) ->Prepare();



Angel.Matilla 07-03-2016 17:48:41

Cita:

Empezado por AgustinOrtu (Mensaje 503037)
Facil, castea el objeto DataSet a TIBQuery:

No; me da error al compilar (E2288 Pointer to structure required on left side of -> or ->*)
Código:

void __fastcall TForm1::BeforeOpen(TDataSet *DataSet)
{
    TIBQuery(DataSet)->Prepare();
}
//----------------------------------------------------------------------------


AgustinOrtu 07-03-2016 17:58:24

Bueno en realidad no he usado nunca C++ Builder :p

Pero la idea es castear la referencia de DataSet a la clase TIBQuery

Ejemplo en la documentacion

Código PHP:

void __fastcall TForm1::BeforeOpen(TDataSet *DataSet)
{
     
TIBQuery *Query dynamic_cast<TIBQuery *>(Sender);
     if (
Query)
     
Query ->Prepare();



Angel.Matilla 07-03-2016 18:19:59

Cita:

Empezado por AgustinOrtu (Mensaje 503056)
Código PHP:

void __fastcall TForm1::BeforeOpen(TDataSet *DataSet)
{
     
TIBQuery *Query dynamic_cast<TIBQuery *>(Sender);
     if (
Query)
     
Query ->Prepare();



De acuerdo. Me estaba empeñando en hacerlo a "lo bruto". Ese código que me has puesto es el que vale. Muchísimas gracias.


La franja horaria es GMT +2. Ahora son las 20:29:40.

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