Oprettet tir. d. 19. december 2006 kl. 10:17:56

delphiuser
delphiuser (9.495 point. Point ude: 0)

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.....

Skrevet tir. d. 19. december 2006 kl. 10:27:06| #1

kroning
kroning (32.420 point)
www.kroning.dk
Du skal have gang i noget SQL, dvs.

SELECT * FROM dintabel
WHERE titel LIKE %"+edit1.text+"%

Skrevet tir. d. 19. december 2006 kl. 19:37:32| #2

delphiuser
delphiuser (9.495 point)
Kroning kan du hjælpe mig med hvordan jeg bygger det op så den virker til 2 tabeller?

Skrevet tir. d. 19. december 2006 kl. 20:36:11| #3

kroning
kroning (32.420 point)
www.kroning.dk
Altså hvis den ene radiobuttons er trykket så på tabel1 og hvis den anden radiobuttons er trykket så på tabel2?

Skrevet ons. d. 20. december 2006 kl. 14:38:01| #4

delphiuser
delphiuser (9.495 point)
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;

Skrevet ons. d. 20. december 2006 kl. 20:17:24| #5

kroning
kroning (32.420 point)
www.kroning.dk
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?

Skrevet ons. d. 20. december 2006 kl. 20:21:33| #6

kroning
kroning (32.420 point)
www.kroning.dk
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;

Skrevet ons. d. 20. december 2006 kl. 20:22:26| #7

kroning
kroning (32.420 point)
www.kroning.dk
og jeg mener self. med denne linie:

ADOQuery1.SQL.Text:= 'SELECT * FROM '+DB+' WHERE titel LIKE "%'+edit1.Text+'%" OR genre LIKE "%'+edit1.Text+'%"';

Skrevet ons. d. 20. december 2006 kl. 21:56:39| #8

delphiuser
delphiuser (9.495 point)
vil den automatisk åbne mit dbgrid?

Skrevet ons. d. 20. december 2006 kl. 22:04:03| #9

kroning
kroning (32.420 point)
www.kroning.dk
Hvad mener du med det? Du skal sætte din DBGrids DataSource til at benytte en DataSource som har din ADOQuety1 som DataSet.

Skrevet tir. d. 02. januar 2007 kl. 23:55:34| #10

hrc
hrc (32.732 point)
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;

Skrevet ons. d. 28. juli 2010 kl. 14:00:22| #11


Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Irriterende timeout i Delphi 7 på en win7 64 bits platform

Oprettet den 2. februar 2012 kl. 12.17
nca giver 60 point for svar | Giv et svar »

Manglende danske tegn

Oprettet den 24. januar 2012 kl. 16.12
hugopedersen giver 60 point for svar | Giv et svar »

Sikre mig at form er færdigoprettet

Oprettet den 24. januar 2012 kl. 10.01
hugopedersen giver 100 point for svar | Giv et svar »

Seneste guides

Installer win 7
Den gode bruger


   




Tips & Tricks fra PC World

Teaser billede

Her er fem sjove danske websider du skal kende

Trænger dine lattermuskler til en omgang fitness på dansk? Vi viser vej til fem websider fyldt med humor og vanvittig satire.


Anmeldelser fra PC World

Teaser billede

Test: Denne super-tablet er iPads hårdeste konkurrent

Eee Pad Transformer Prime er frygtindgydende med sin quadcore processor og evne til at trylle sig om til bærbar. Apple bør kigge i bagspejlet, for Asus' tablet-pc kommer buldrende - og gør det...


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Nu kan du snart hente Windows 8

Den nye offentlige betaversion af Windows 8 er klar i denne måned.


Nyheder fra Computerworld

Teaser billede

Måske snart slut med Androids helt store problem

Android-platformen har længe været plaget af et særligt problem. Men måske er problemet nu ved at være elimineret.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger