Avatar billede delphiuser Mester
19. december 2006 - 10:17 Der er 10 kommentarer og
1 løsning

søgning

Hej eksperter. jeg er i gang med at lave en kartotek hvor jeg skal bruge en søgemaskine. men jeg har nu et problem med dette. for den skal kunne søge i to tabeller men hver for sig. så jeg har brugt nogle radiobuttons til at bestemme hvilken tabel den søger i. men kan ikke rigtig få den til at virke. håber i kan hjælpe mig. smider lige noget kode ind så i kan se hvad jeg har lavet. men lige inden da en beskrivelse af selve funktionen...

meningen er at når jeg skriver noget i mit søgefelt og vælger om det skal være dvd, vhs, musik. Så skal den åbne en dbgrid hvor det man har søgt på kommer frem. og findes det ikke det man søger på skal den ikke fortage sig noget. men trykker man på søg uden at skrive noget i feltet skal den komme med en besked om at du skal indtaste noget i søgefeltet.

nå men her kommer det kode jeg ville mene kunne bruges.

procedure TForm2.Button1Click(Sender: TObject);
begin
if radiobutton1.Checked then
begin
  if Adotable1.Locate('titel', edit1.Text, [])=true then
    begin
      groupbox1.Visible:=true;
      dbgrid1.Visible:=true;
      dbgrid2.Visible:=false;
    end
else
    showmessage('Der skal indtastes noget...');
end;
begin
if radiobutton2.Checked then
  begin
  if adotable2.Locate('titel', edit1.Text, [])=true then
    begin
      groupbox1.Visible:=true;
      dbgrid1.Visible:=false;
      dbgrid2.Visible:=true;
    end;
end
  else
  showmessage('Der skal indstastes noget...');
end;

håber i kan hjælpe mig, på forhånd tak.....
Avatar billede kroning Nybegynder
19. december 2006 - 10:27 #1
Du skal have gang i noget SQL, dvs.

SELECT * FROM dintabel
WHERE titel LIKE %"+edit1.text+"%
Avatar billede delphiuser Mester
19. december 2006 - 19:37 #2
Kroning kan du hjælpe mig med hvordan jeg bygger det op så den virker til 2 tabeller?
Avatar billede kroning Nybegynder
19. december 2006 - 20:36 #3
Altså hvis den ene radiobuttons er trykket så på tabel1 og hvis den anden radiobuttons er trykket så på tabel2?
Avatar billede delphiuser Mester
20. december 2006 - 14:38 #4
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;
Avatar billede kroning Nybegynder
20. december 2006 - 20:17 #5
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?
Avatar billede kroning Nybegynder
20. december 2006 - 20:21 #6
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;
Avatar billede kroning Nybegynder
20. december 2006 - 20:22 #7
og jeg mener self. med denne linie:

ADOQuery1.SQL.Text:= 'SELECT * FROM '+DB+' WHERE titel LIKE "%'+edit1.Text+'%" OR genre LIKE "%'+edit1.Text+'%"';
Avatar billede delphiuser Mester
20. december 2006 - 21:56 #8
vil den automatisk åbne mit dbgrid?
Avatar billede kroning Nybegynder
20. december 2006 - 22:04 #9
Hvad mener du med det? Du skal sætte din DBGrids DataSource til at benytte en DataSource som har din ADOQuety1 som DataSet.
Avatar billede hrc Mester
02. januar 2007 - 23:55 #10
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;
Avatar billede delphiuser Mester
28. juli 2010 - 14:00 #11
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester