Avatar billede delphiuser Mester
18. november 2006 - 17:11 Der er 7 kommentarer og
1 løsning

søg i database

Hej eksperter...

jeg er i gang med at lave et udvidet film kartotek hvor jeg gerne vil have en søge function...

den skal fungere sådan her.

jeg har en editbox og en button og et DBGrid...

det jeg skriver i min edit skal komme frem i min DBGrid. men skal først komme når jeg trykker på min knap. men hvis der ikke er nogle forekomster i min database med det gældende navn skal jeg have en messagebox frem hvor der står at det du har søgt på ikke findes i databasen...

ved ikke om jeg har beskrevet det godt nok ellers må i lige komme med nogle flere spørgsmål...

hilsen Delphiuser
Avatar billede kroning Nybegynder
18. november 2006 - 19:04 #1
Brug SQL

SELECT * FROM db
WHERE Navn LIKE "blabla"
OR Navn LIKE "NOGET ANDET"
ORDER BY Navn
Avatar billede kroning Nybegynder
18. november 2006 - 20:31 #2
Hvis du vil have lidt mere kode så noget i denne stil:

procedure OnButtonClick(Sender : TObject);
begin
  Kør SQL
  if sqltable.IsEmpty then
    Application.MessageBox('Noget tekst',kan ikke huske flere parms)
  else
    noget andet..
end;
Avatar billede delphiuser Mester
19. november 2006 - 11:35 #3
kroning

kan man skrive sql sætningen sådan her

SELECT * FROM film WHERE titel LIKE edit4.text OR genre LIKE edit4.text ORDER BY titel
Avatar billede kroning Nybegynder
19. november 2006 - 11:43 #4
Ja, du mene vel:

'SELECT * FROM film WHERE titel LIKE "'+edit4.text+'" OR genre LIKE "'+edit4.text+'" ORDER BY titel';
Avatar billede kroning Nybegynder
19. november 2006 - 11:52 #5
Men jeg plejer nu at dele det der søges på op, dvs. søges der på Huset på øen så søger jeg på de 3 ord for sig og ikke på hele sætningen. Jeg laver så en procedure der opbygger en sql sætning. Her er en som søger i et bog kartotek.

function GetBogerSearch(tekst : string) : string;
var
    StringList    : TStringList;
  i    : integer;
begin
    stringList:=TStringList.Create;
    result:='';
    ExtractStrings([#32, ',', ';', '.', '-'],[],pchar(tekst),StringList);
    for i:=0 to StringList.Count-1 do
  begin
        StringList[i]:='%'+StringList[i]+'%';
        if i=0 then
        result:='WHERE '
    else
        result:=result+' AND ';
        result:=result+'( (boger.titel LIKE '+QuotedStr(StringList[i])+')';
        result:=result+' OR (forfatter.NavnForfatter LIKE '+QuotedStr(StringList[i])+')';
        result:=result+' OR (forlag.NavnForlag LIKE '+QuotedStr(StringList[i])+')';
    result:=result+' OR (boger.UdgivetAar LIKE '+QuotedStr(StringList[i])+')';
    result:=result+' OR (boger.Diverse LIKE '+QuotedStr(StringList[i])+') )';
  end;
  StringList.Free;
end;

--------

den kaldes så på denne måde:

Data.SQL.Clear;
Data.SQL.Add('SELECT * from (boger');
Data.SQL.Add('LEFT JOIN forfatter ON boger.forfatter = forfatter.idnrForfatter)');
Data.SQL.Add('LEFT JOIN forlag ON boger.forlag = forlag.idnrForlag');

Data.SQL.Add(GetBogerSearch(tekst));

Data.SQL.Add('ORDER BY forfatter.NavnForfatter LIMIT 200');
Avatar billede kroning Nybegynder
19. november 2006 - 11:57 #6
Dvs. når jeg søger på "Huset på øen" så opbygges der en SQL som denne:

SELECT * from (boger
LEFT JOIN forfatter ON boger.forfatter = forfatter.idnrForfatter)
LEFT JOIN forlag ON boger.forlag = forlag.idnrForlag
WHERE ( (boger.titel LIKE '%huset%') OR (forfatter.NavnForfatter LIKE '%huset%') OR (forlag.NavnForlag LIKE '%huset%') OR (boger.UdgivetAar LIKE '%huset%') OR (boger.Diverse LIKE '%huset%') )
AND ( (boger.titel LIKE '%på%') OR (forfatter.NavnForfatter LIKE '%på%') OR (forlag.NavnForlag LIKE '%på%') OR (boger.UdgivetAar LIKE '%på%') OR (boger.Diverse LIKE '%på%') )
AND ( (boger.titel LIKE '%øen%') OR (forfatter.NavnForfatter LIKE '%øen%') OR (forlag.NavnForlag LIKE '%øen%') OR (boger.UdgivetAar LIKE '%øen%') OR (boger.Diverse LIKE '%øen%') )
ORDER BY forfatter.NavnForfatter LIMIT 200
Avatar billede kroning Nybegynder
19. november 2006 - 12:23 #7
På den måde er det ligemeget om man søger på "Huset på øen" eller på "øen på huset" eller kun på "Huset øen" så vil den i alle tilfælde finde posterne.
Avatar billede delphiuser Mester
28. juli 2010 - 13:52 #8
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