Avatar billede weis Nybegynder
20. april 2001 - 18:28 Der er 16 kommentarer og
1 løsning

Søgning i database

Hej...

Jeg har lavet en database til sangtekster... Den er lavet sådan at jeg har en mainForm og en IndtastningsForm. I indstatinngsformen skal man skrive sangens navn (i et edit felt) samt vælge hvilken musik type det er (i en DBComboBox, fx. jazz eller pop osv.)

På min MainForm har jeg placeret en DBListBox og et Edit felt og en ComboBox, og en knap. Så når man indtaster et søgeord i edit feltet og vælger en sangtype, og derefter trykker på knppen skal den finde en sang der passer sammen med det man søgte efter...
Sangen skal blive markeret ned i DBListboxen.

Andreas
Avatar billede kayb Nybegynder
21. april 2001 - 01:36 #1
Dette kan bruges:

Table.Locate(ComboBox.Items[ComboBox.ItemIndex],Edit1.Text,[loCaseInsensitive, loPartialKey]);

Håber det hjælper dit problem!!
Avatar billede kayb Nybegynder
21. april 2001 - 01:38 #2
Det fik jeg selfølgelig skrevet forkert, men her er det rigtige:
Table.Locate(\'Feltnavn\',Edit1.Text,[loCaseInsensitive, loPartialKey]);

Feltnavnet er det Field der skal søges i.

Avatar billede weis Nybegynder
21. april 2001 - 10:46 #3
Den virker ikke... Men så vidt jeg kunne se manglede der også noget... Den går ikke i forbindelse med min ComboBox som den også skal søge i...
Så kunne jeg også godt tænke mig at den kunne se og der stod noget i editfeltet eller comboboxen og hvis der ikke stod noget skulle den ikke søge på det...
Avatar billede martinlind Nybegynder
21. april 2001 - 12:27 #4
Hvis du skal søge i en Database tabel SKAL du bruge LOCATE, hvis du skal søge i en ListBox ( StringList, ComboBox, ListBox, Memo, osv. ) bruger du IndexOf på dine Strings property.

/Martin
Avatar billede weis Nybegynder
22. april 2001 - 10:00 #5
>>Martin

Kunne du ikke lige uddybe det lidt mere???
Avatar billede martinlind Nybegynder
22. april 2001 - 10:17 #6
Hvid det er data du har i en TTable/TQuery bruger du MyTable1.Locate();, men hvis du skal finde noget i en TStringList, som bliver bruget som Items/Lines på ComboBox, ListBox, Memo, osv skal du bruge MyMemo1.Lines.IndexOf(), det skal dog lige siges at IndexOf() søger kun på hele strenge og ikke kun noget at en streng.

/Martin
Avatar billede weis Nybegynder
22. april 2001 - 10:23 #7
>>Martin

Kunne du ikke skrive selve koden på knappen

procedure TForm1.Button1Click(Sender: TObject);
begin
  //Koden//
end;

Når den søger skal den søge efter navnet i en DBListBox. Som er på MainFormen
Avatar billede martinlind Nybegynder
22. april 2001 - 10:39 #8
Jeg forstår det sådan at du har nogle sangtekster i en table og en combo med Jazz, Rock osv. og et edit felt, med søge ord.

så det første du gør er at lave et SELECT * from <mysagtekster> WHERE MusikType = \'Jazz\';

Derefter laver du en Locate på de records du fik tilbage i din select, locate vil så finde de sangtekster hvor søgeordet optræder.

Men du skal nok ikke bruge en DBListbox til at putte dit resultat over i det er vist ikke det den er god til, men prøv lige at læs i online hjælpen, hvordan du bruger den. Jeg ville foreslå en alm listbox.

/Martin
Avatar billede jensfudge Nybegynder
23. april 2001 - 09:42 #9
Har du tabellen \"lokalt\" (paradox tabel el lign) og ikke en SQL-server ville jeg nærmere benytte filter := \'MusikType = \'\'Jazz\'\'\';
filtered := true;

frem for en sql-statement med en where clause, husk dog at sætte filtered blank og false, når du er færdig med at søge.
Avatar billede weis Nybegynder
23. april 2001 - 17:40 #10
Okay... spørgsmålet bliver lavet lidt om. Nu vil jeg kun bruge min Edit felt. Og som sagt ved tryk på en knap skal den søge i en DBListBox og finde det valgte søge ord... ordet må godt indgå i en sætning og hvis der ikke findes en sang ved det navn eller hvor søgeordet indgår skal der komme en Message der fortæller at der ikke er nogle sang ved dette \"(Søgeordet)\" navn...

Andreas
Avatar billede nico26 Nybegynder
23. april 2001 - 21:08 #11
prøv med funktionen Pos - den kan finde en substring i en string - så hvis du løber alle records igennem, og bruger pos med editfeltets text som substring skulle det virke
Avatar billede weis Nybegynder
23. april 2001 - 21:14 #12
>>nico22

Kunne du ikke foklare det lidt mere. Hvad og hvordan jeg skal gøre det og hvad jeg skal skrive...

Andreas
Avatar billede nico26 Nybegynder
23. april 2001 - 22:44 #13
hvis du har en table kaldet Table1 kan du gennemløbe den sådan her

Table1.First;
while not Table1.EOF do
begin
  //kode
  Table1.Next;
end;

hvis du nu har et felt der hedder titel af type string kan du for hver record søge efter den substring du skrev i editfeltet:
if Pos(Edit1.Text, Table1.FieldByName(\'Titel\').AsString) > 0 then
  ...


Jeg mener man kan finde substrings med SQL - kan ikke lige huske syntaksen - men det ville nok være nemmere. Hvis du koblede en TQuery på din datasource, ville DBListen kun indeholde det records, som matchede søgekriteriet
Avatar billede nico26 Nybegynder
23. april 2001 - 22:46 #14
Locate skulle også kunne bruges som kayb foreslår
Avatar billede weis Nybegynder
04. maj 2001 - 21:01 #15
Jeg har ikke lige kunnet gennemskue svarene, men prøver en gang til.
Jeg har en form med en Listbox og et edit felt og en knap. Man skal skrive sit søge ord i edit feltet og ved tryk på knappen skal den søge i listboxen, og marker det den finder. Den skal kunne søge på alle ord.
Avatar billede martinlind Nybegynder
05. maj 2001 - 14:50 #16
Jeg prøver igen så,

procedure Buuton1Click( Sender : TObject);
begin
if ListBox1.Items.IndexOf(Edit1.Text) <> -1 then
  ListBox1.ItemIndex := ListBox1.Items.IndexOf(Edit1.Text) else
ShowMessage(\'Ikke Fundet\');
end;

/Martin
Avatar billede weis Nybegynder
05. maj 2001 - 16:01 #17
Når det nu er sådan at jeg har en sangtekst der hedder \"Thats What Freinds Are For\" og en der hedder \"Freinds for ever\" og jeg så søger på \"Freinds\" så finder den en af dem og ved endnu et tryk finder den, den næste med ordet??? Kan det lade sig gøre eller er det for meget arbejde...

Andreas
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

IT-JOB