[Borland] Probleem bij TTable filter

Pagina: 1
Acties:

  • hneel
  • Registratie: Maart 2001
  • Laatst online: 17:13

hneel

denkt er het zijne van

Topicstarter
Ik zit met het volgende probleem: Ik heb een TDBGrid gekoppeld aan een TTable. Allemaal rechtoe-techtaan. Daar wil ik een tekst-filter op los laten. Nou heb ik al gegoogled en geleerd dat je de 'Filter' parameter daar niet voor kan gebruiken omdat die alleen werkt als de substring aan het begin zit. als alternatief wordt het gebruik van de OnFilterRecord event aangeraden. Goed. Geprobeerd en dat lijkt te werken. Alleen als er niks gevonden wordt krijg ik een error messagebox met de melding ""invalid variant type conversion".

Ik gebruik nu de volgende code:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
void __fastcall TFormViewEditComponents::ButtonSearchClick(TObject *Sender)
{
  if( Edit1->Text.Length() )
    TableComponents->Filtered = true;
  else
    TableComponents->Filtered = false;
}

void __fastcall TFormViewEditComponents::TableComponentsFilterRecord(
      TDataSet *DataSet, bool &Accept)
{
  Accept = DataSet->FieldByName("Description Local")->AsString.Pos( Edit1->Text ) ? true : false;
}


Wanneer er niks door het filter komt heeft hij dus een probleem. Wat kan ik hier aan doen?

  • hneel
  • Registratie: Maart 2001
  • Laatst online: 17:13

hneel

denkt er het zijne van

Topicstarter
Ik heb het al gevonden. De oorzaak lag in een OnGetText eventhandler welke op een van de tabel-kolommen zat. Deze kon er niet goed tegen als de tabel leeg was. Het kwam op zich dus niet van het OnFilterRecord event.

Even een
code:
1
 if( DataSourceComponents->DataSet->RecordCount > 0 )
in de OnGetText eventhandler, en de zaak was opgelost...

  • Kool
  • Registratie: September 1999
  • Niet online
Een tip, de TQuery gebruiken is veel efficienter dan een TTable met een filter, omdat TTable altijd alle records ophaalt, ook als je een filter instelt. TQuery haalt uiteraard alleen die records op waar je om vraagt.