Ik snap totaal niet wat je met IBTable aan het doen bent.
Als je iets moet zoeken uit een tabel, maak je geen gebruik van een tabel om daarmee een query te maken. Immers zijn deze gegevens altijd aanwezig.
Hier heb je een voorbeeld van jouw code, waarbij gebruik wordt gemaakt van parameters.
Ik heb het zo opgebouwd dat je of zoekt op een nummer (id) of op de resterende velden. Ik mag er vanuit gaan dat NR in jouw voorbeeld een uniek getal is en niet belangrijk is voor je andere zoekopdrachten. Een uniek nummer geeft jou al een record terug en dan is de combinatie met de andere velden overbodig.
delphi Code:
procedure TFormMain.BitBtnZOEKClick(Sender: TObject);
var
VARsqlNR : String;
VARsqlNAAM : String;
VARsqlARTIEST : String;
VARsqlGENRE : String;
Query : string;
begin
{
Deze constructie werkt met parameters.
De querycomponent kan op basis van die gegevens de ont-
brekende waarde invullen, zodat de zoekopdracht voltooid
kan worden.
}
try
QueryF1.disablecontrols; //zet de focus uit voor de grid
QueryF1.active := false;
QueryF1.SQL.Clear;
Query := 'SELECT NR,NAAM,ARTIEST,GENRE,TITEL,JAAR FROM tracks';
// wat doet de IBTable eigenlijk?
VARsqlNR := Edit1.Text;
VARsqlNAAM := Edit2.Text;
VARsqlARTIEST := Edit3.Text;
VARsqlGENRE := Edit4.Text;
if VARsqlNR > '' then
begin
QueryF1.SQL.Text := Query + 'WHERE NR = :nr';
QueryF1.parambyname('nr').AsString := VARsqlNR;
end else
begin
QueryF1.SQL.Text := Query + 'WHERE NAAM LIKE :naam AND ' +
'AND ARTIEST LIKE artiest AND GENRE LIKE :genre';
//format maakt een string aan met een % ervoor en erna
QueryF1.parambyname('naam').AsString := format('%s%s%s','%',VARsqlNAAM,'%');
QueryF1.parambyname('artiest').AsString := format('%s%s%s','%',VARsqlARTIEST,'%');
QueryF1.parambyname('genre').AsString := format('%s%s%s','%',VARsqlGENRE,'%');
end;
QueryF1.active := true;
if QueryF1.recordcount = 0 then
showmessage('niets gevonden');
finally
QueryF1.enablecontrols; //zet de focus aan voor de grid
end;
end;
Bookmarks