04. marts 2002 - 10:54Der 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å?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.
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];
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
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
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!
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)
Synes godt om
Ny brugerNybegynder
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.