Avatar billede celal Nybegynder
04. marts 2002 - 10:54 Der er 16 kommentarer og
1 løsning

Find post udfra de 2 føste bogtsaver

Hej

Jeg skal lave et system, hvor jeg skal kunne søge på et felts første 3 bogstaver.

Jeg har et felt (felt1). I databsen er der andre poster som har næsten det samme i felt1, men de er ikke helt ens..eks. ordet "Danmark" kan være stavet Danmork, jeg vil derfor have fat i alle de poster som macher de 3 første bogstaver for et andet post i databasen.
Eks:
  Select * from person where post1(3 første bogstaver) =post2(3 første bogstaver)

Er der nogen der har noget kode som jeg kan kigge på. Eller en løsning på hvordan jeg skal gribbe problemmet an på?
Avatar billede jimse Nybegynder
04. marts 2002 - 10:56 #1
like dan*
Avatar billede jimse Nybegynder
04. marts 2002 - 10:57 #2
SELECT dddd.Navn
FROM dddd
WHERE (((dddd.Navn) Like "dan*"));
Avatar billede proaccess Nybegynder
04. marts 2002 - 10:59 #3
SELECT * FROM person WHERE Left(post1, 3) = Left(post2, 3);
Avatar billede celal Nybegynder
04. marts 2002 - 11:34 #4
jo, men problemmet er bare at jeg ikke hved hvad ordet er, jeg skal igennem hele databsen for at finde alle de ord hvor de 3 første bogstaver er ens. Så det jeg har tænkt mi at gøre, er at starter sammenligningen fra første post og bevæger mig ned. Skal bare have fat i alle poster.
Avatar billede celal Nybegynder
04. marts 2002 - 11:35 #5
Proaccess, hvad gøre Left(pos1,3) ?
Avatar billede proaccess Nybegynder
04. marts 2002 - 11:38 #6
Den tager de 3 første tegn fra post1 !!

Du kan jo lave en forespørgsel, hvor du grupperere på de første 3 bogstaver...

SELECT Left(feltNavn, 3) AS første3, * FROM person ORDER BY Left(feltNavn, 3);

Så er alle dine records blevet sorteret...
04. marts 2002 - 11:40 #7
Jeg ville dele det op i 2 forespørgsler:
Én hvor jeg gruppere efter de første 3 bogstaver. Derved får jeg alle variationer:
Select Distinct Left(Felt1,3) As Felt From Person

Dernæst ville jeg lave en forespørgsel som forenede den første forespørgsel med Person-tabellen:

SELECT Left([Felt1],3) AS Expr1, Felt1
FROM query1, Person
WHERE Left([Felt1],3)=[Felt];
Avatar billede proaccess Nybegynder
04. marts 2002 - 11:48 #8
>Thomas: Hvad er lige fidusen med en ekstra query i dette tilfælde...

Du får same resultat, som jeg gør (11:38:20)
Nemlig en ekstra kolonne med de første 3 bogstaver af feltet.
Avatar billede celal Nybegynder
04. marts 2002 - 11:54 #9
Jeg sidder lige og prøver at en forespørgsel, men jeg får en kørselsfejl:

Kørselsfekl "91"  ObjektVariablen eller with-blokken er ikke angivet.

Er der nogen der hved hvad jeg mangler?

Sub SletDebitor1()
Dim Dbs As Database
Dim Rst As Recordset
Dim strSQL As String
Dim DebitorNr As String
Dim svar As Integer
svar = MsgBox("Er du sikker på at slette Gamle poster?", vbYesNo + vbCritical + vbDefaultButton2, "Slet Debitor")

If svar = 6 Then
  Set Dbs = CurrentDb
  strSQL = "DELETE * FROM SL01 WHERE SL01050 BETWEEN  #01/01/1901# AND #31/12/96#"
   
  Dbs.Execute strSQL
  svar = MsgBox("Posterne er slettet!!", vbOKOnly)
  Rst.Close
Else
  svar = MsgBox("Intet blev slettet?", vbOKOnly, "Slet Debitor")
End If
 
End Sub
Avatar billede celal Nybegynder
04. marts 2002 - 11:55 #10
den fejl kommer ved alle mine Sub/funktioner
Avatar billede proaccess Nybegynder
04. marts 2002 - 12:02 #11
Du kan ikke lave en Rst.Close, når du ikke har oprettet et aktivt Rst (recordset)...

Sub SletDebitor1()
  If MsgBox("Er du sikker på at slette Gamle poster?", vbYesNo + vbCritical + vbDefaultButton2, "Slet Debitor")= VbYes Then
    CurrentDB.Execute "DELETE * FROM SL01 WHERE SL01050 BETWEEN  #01/01/1901# AND #31/12/96#"
    MsgBox "Posterne er slettet!!", vbOKOnly, "Slet Debitor"
  Else
    MsgBox("Intet blev slettet?", vbOKOnly, "Slet Debitor"
  End If
End Sub
Avatar billede proaccess Nybegynder
04. marts 2002 - 12:03 #12
Der kom en parantes for meget med...


    MsgBox "Intet blev slettet?", vbOKOnly, "Slet Debitor"
Avatar billede celal Nybegynder
04. marts 2002 - 12:11 #13
okay
Avatar billede celal Nybegynder
04. marts 2002 - 12:12 #14
Parantes for meget???
Avatar billede proaccess Nybegynder
04. marts 2002 - 12:18 #15
Ja, det er kun i den første MsgBox, at du skal have parantes omkring, da den returnerer en værdi... De 2 andre viser "bare" en besked, unden retur-værdi.

  etEllerAndet=MsgBox("beskedtekst", udseende og knapper, "titel")
eller
  MsgBox "beskedtekst", udseende og knapper, "titel"

Den første returnerer en værdi, det gør den anden ikke!
Avatar billede celal Nybegynder
04. marts 2002 - 13:10 #16
Okay, Tak for hjælpen....Proaccess, du får pointene
04. marts 2002 - 13:16 #17
ProAccess-> Du har ret i, at din løsning er lettere og hurtigere. Men som du måske kan se, så skrev jeg den samtidig med dig, men var bare lidt længere om det ;o)

For mig at se, så er det af og til en fordel at splitte det op i flere forespørgsler. Derved kan man foretage sige flere ting med de enkelte forespørgsler. Og for den mindre erfarne bruger er det af og til lettere at forstå hvad der sker, hvis du splitter det op (Det er jo ikke os alle, som lærte SQL før vi lærte dansk :o)
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