Avatar billede flemming_a Nybegynder
06. juli 2004 - 10:48 Der er 13 kommentarer og
1 løsning

Søgning i felt af typen NOTAT

Hvordan udformes en SQL-sætning der søger efter et bestemt ord i et felt af typen NOTAT.
06. juli 2004 - 10:52 #1
Select * From [Dintabel] Where [Dit notat felt] Like '*søgeord*'
Avatar billede flemming_a Nybegynder
06. juli 2004 - 11:00 #2
Det kan jeg ikke få til at virke.
Det jeg mangler er en sætning ligesom SELECT * FROM tabel1 WHERE NAVN LIKE '%hans%'.
Men der skal kun returneres poster hvor der ord der søges på er 100% magen til et der findes i NOTAT-feltet
Avatar billede flemming_a Nybegynder
06. juli 2004 - 11:02 #3
i Interbase findes der et udtryk der hedder CONTAINING, men det ser det ikke ud til at der gør i access, eller jeg kan ikke finde ud af syntaxen.
06. juli 2004 - 11:04 #4
Jamen, det er jo netop derfor, at du skal bruge Like og * som jokertegn. Det virker på min:

SELECT * FROM tabel1 WHERE NAVN LIKE "*Hans*"
Avatar billede flemming_a Nybegynder
06. juli 2004 - 11:11 #5
Det kører bare ikke
06. juli 2004 - 11:13 #6
Hvordan ser hele din SQL ud? Opbygger du den vha kode?
Avatar billede flemming_a Nybegynder
06. juli 2004 - 11:17 #7
Det hele kodes i Delphi og se så ledes ud:
procedure TForm6.BitBtn2Click(Sender: TObject);
var r,s,allS:string;
    D1:TADODataset;
    i,j:integer;
    res:TForm4;
begin
  res:=tform4.Create(Application);
  res.Caption:='Resultat ved udvidet søgning.';
  s:='';
  r:='SELECT * FROM Fonde_1 WHERE ';
  if navn.Text <>'' then
  begin
    if navnEksakt.Checked then
    s:='Navn LIKE ''*'+navn.Text+'*''' // Det er dit forslag........
    else
    s:='Navn LIKE ''%'+navn.Text+'%''';
  end;
  if prio.Text <>'' then
  begin
    if s<>'' then
    s:=s+' AND ';
    if Prioeksakt.Checked then
    S:=s+'Prioritetsomraade ='''+prio.Text+''''
    else
    s:=s+'Prioritetsomraade LIKE ''%'+prio.Text+'%'''
  end;
  if Ans.text <>'' then
  begin
    if s<>'' then
    s:=s+' AND ';
    if Anseksakt.Checked then
    s:=s+'Ansoegningsskema ='''+ans.Text+''''
    else
    s:=s+'Ansoegningsskema LIKE ''%'+ans.Text+'%'''
  end;
  if dead.Text <>'' then
  begin
    if s<>'' then
    s:=s+' AND ';
    if deadEksakt.Checked then
    s:=s+'Deadline ='''+dead.Text+''''
    else
    s:=s+'Deadline LIKE ''%'+dead.Text+'%'''
  end;
  if legat.Text <>'' then
  begin
    if s<>'' then
    s:=s+' AND ';
    if legatEksakt.Checked then
    s:=s+'Legatsum ='''+legat.Text+''''
    else
    s:=s+'Legatsum LIKE''%'+legat.Text+'%'''
  end;
  if kommentar.Text <>'' then
  begin
    if s<>'' then
    s:=s+' AND ';
    if kommentarEksakt.Checked then
    s:=s+'Kommentar ='''+kommentar.Text+''''
    else
    s:=s+'Kommentar LIKE''%'+kommentar.Text+'%'''
  end;
  if kvartal.Text<>'Vælg' then
  begin
    if s<>'' then
    s:=s+' AND ';
    s:=s+'Kvartal ='''+kvartal.Text+''''
  end;
  alls:=r+s;
  showmessage(alls);
  try
    i:=0;
    D1:=TADOdataset.create(self);
    D1.Connection:=form1.ADOCon;
    D1.Close;
    d1.CommandText:=alls;
    D1.Open;
    for j:=1 to res.resultatGrid.RowCount do
    begin
      res.resultatGrid.Cells[0,j]:='';
      res.resultatGrid.Cells[1,j]:='';
      res.resultatGrid.Cells[2,j]:='';
      res.resultatGrid.Cells[3,j]:='';
      res.resultatGrid.Cells[4,j]:='';
      res.resultatGrid.Cells[5,j]:='';
    end;
    res.resultatGrid.RowCount:=D1.RecordCount+1;
    while i< D1.RecordCount do
    begin
      res.resultatGrid.Cells[0,i+1]:=(D1.FieldByName('Navn').Value);
      res.resultatGrid.Cells[1,i+1]:=(D1.FieldByName('Prioritetsomraade').Value);
      res.resultatGrid.Cells[2,i+1]:=(D1.FieldByName('Ansoegningsskema').Value);
      res.resultatGrid.Cells[3,i+1]:=(D1.FieldByName('Deadline').Value);
      res.resultatGrid.Cells[4,i+1]:=(D1.FieldByName('Legatsum').Value);
      res.resultatGrid.Cells[5,i+1]:=(D1.FieldByName('Kommentar').Value);
      D1.next;
      inc(i)
    end;
  except
  showmessage('DB-fejl........')
  end;
  //

end;
06. juli 2004 - 11:31 #8
hmm, det ser umiddelbart rigtigt ud. Kan du udskrive værdien af s, når den er færdiggenereret?

For lige at fjerne alle potentielle misforståelser:
..Navn Like "*Hans*" finder alle poster, hvor ordet Hans indgår vilkårligt sted i Navn

..Navn = "Hans" finder alle poster, hvor Navn er eksakt lig Hans. Der er altså ikke flere tegn i Navn-feltet end HANS.

..Navn Like "%Hans%" er ikke en gyldig syntaks i Access. Af gyldige jokertegn/wildcards findes disse:
* Erstatter et eller flere tegn
? Erstatter ét tegn
# Erstatter et tal

Derudover kan man bruge kantet parenteser, minustegn og udråbstegn til lidt mere specifikke søgninger.
Avatar billede flemming_a Nybegynder
06. juli 2004 - 11:38 #9
Hmmm Navn Like '%Hans%' osv. funker fra delphi, problemet er at den også returnere eks. Hansen. En færdig værdi af s med din løsning ser ud som følger: SELECT * FROM Fonde_1 WHERE Navn LIKE '*Velux*'
Avatar billede flemming_a Nybegynder
06. juli 2004 - 11:48 #10
noget tyder på at jeg har besværet dig uden grund, jeg har lige prøvet dit forslag fra access, og her virker det som du også skriver, det må være en fejl i oversættelsen fra delphi der er kage i. Du får derfor point for dit svar var jo rigtigt....
06. juli 2004 - 11:49 #11
Det lader til, at % virker som * burde gøre. Hansen vil også blive returneret, hvis du fik * til at virke. Hvis du kun ønsker at finde "Hans" som delstreng, men ikke ønsker Hansen, så findes der ingen standard-funktion i Access som kan løse det problem :o(
06. juli 2004 - 11:51 #12
Ja, det lyder som om, det er Delphi, som laver narrestreger.

tak fordi du værdsatte indsatsen og ikke bare tog pointene selv - det sætter jeg pris på :o)
Avatar billede flemming_a Nybegynder
06. juli 2004 - 12:12 #13
Det var vel det mindste.....
06. juli 2004 - 12:27 #14
ja, sådan tænker jeg også...jeg oplever bare tit, at folk i sådan en situation tager pointene selv - som om, at dette bare var et gratis service-organ, hvor man ikke behøver at sige tak for indsatsen.

Men sådan er folk jo så forskellige ;)
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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