Du skal have gang i noget SQL, dvs.
SELECT * FROM dintabel
WHERE titel LIKE %"+edit1.text+"%
Kroning kan du hjælpe mig med hvordan jeg bygger det op så den virker til 2 tabeller?
Altså hvis den ene radiobuttons er trykket så på tabel1 og hvis den anden radiobuttons er trykket så på tabel2?
Kan man gøre sådan her så den kan søge i flere felter på en gang?
og er det den rigtige måde jeg har lavet det på?
Den kommer ikke fra med min dbgrid når jeg trykker på søg hvad har jeg da gjort galt?
procedure TForm2.Button1Click(Sender: TObject);
begin
if radiobutton1.Checked=true then
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text:= 'SELECT * FROM dvd WHERE titel, genre LIKE "%' + edit1.Text + '%"';
ADOQuery1.Open;
end;
if radiobutton2.Checked=true then
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text:= 'SELECT * FROM vhs WHERE titel, genre LIKE "%' + edit1.Text + '%"';
ADOQuery1.Open;
end;
end;
Jeg vil mene det skal være:
ADOQuery1.SQL.Text:= 'SELECT * FROM dvd WHERE titel LIKE "%'+edit1.Text+'%" OR genre LIKE "%'+edit1.Text+'%"';
Får du ikke en SQL fejl med din opstilling?
Du kunne også gøre proceduren lidt enklere:
procedure TForm2.Button1Click(Sender: TObject);
var
DB : string;
begin
if radiobutton1.Checked=true then
DB:='dvd'
else if radiobutton2.Checked=true then
DB:='vhs';
ADOQuery1.Close;
ADOQuery1.SQL.Text:= 'SELECT * FROM '+DB+' WHERE titel, genre LIKE "%' + edit1.Text + '%"';
ADOQuery1.Open;
end;
og jeg mener self. med denne linie:
ADOQuery1.SQL.Text:= 'SELECT * FROM '+DB+' WHERE titel LIKE "%'+edit1.Text+'%" OR genre LIKE "%'+edit1.Text+'%"';
vil den automatisk åbne mit dbgrid?
Hvad mener du med det? Du skal sætte din DBGrids DataSource til at benytte en DataSource som har din ADOQuety1 som DataSet.
En Query bør ikke bestå af sammensatte strenge. Brug i stedet den indbyggede Params (i ado Parameters) og du slipper for mange problemer senere hen (såsom om du skal bruge " eller ' til strenge eller, ikke mindst, om en dato skal angives mm/dd/yyyy eller dd/mm/yyyy). Man bør heller ikke lave 'select * ... ', men explicit angive de felter der er brug for. Det er sløset og ineffektiv programmering (undskyld kroning, men det er det, ligesom at undlade at bruge parametre er det).
'SELECT * FROM Album WHERE titel like "%' + edit1.Text + '%"' and genre = ''CD''';
bør være
Query.SQL.Text :=
'SELECT navn, laengde, udgivet, BARCode, antal, pris, stand FROM Album WHERE titel like %:titel% and genre = :genre';
with Query.ParamByName('titel') do
begin
DataType := ftString;
Value := 'Orphans';
end;
with Query.ParamByName('genre') do
begin
DataType := ftInteger;
AsInteger := 1; // 1 for CD, 2 for DVD, 3 for ...
end;
if Query.Active then
Query.Close;
Query.Open;