Avatar billede jobless Nybegynder
12. juli 2004 - 14:46 Der er 9 kommentarer og
1 løsning

Replace i where-sætning (ADO)

Hej.

Jeg connecter til min access2000 db via ado.

I en tabel ligger nogle telefonnumre, som jeg gerne vil bruge til at selecte udfra.

Brugerne har imidlertid gemt telefonnumrene i forskellige formater, herved forstået mellemrum i telefonnummeret hist og her.

Når jeg bruger
select telefonnummer where replace(telefonnummer, ' ', '') = '12345678'
i access, virker det fint, men via ado fra VB virker det ikke.

Findes der en anden måde at gøre dette på, så jeg ikke er tvunget til at diktere formatet på telefonnummeret?

MVH

JoBless
12. juli 2004 - 14:51 #1
Jeg ved ikke helt hvorfor det ikke virker i ADO.
Du kunne ikke - én gang for alle - opdatere tabellen vha en forespørgsel og Replace, således at du ikke har problemet mere. Herefter kan du styre brugerens indtastninger f.eks. vha inputmasker.

Alternativt har jeg en gammel Replace-funktion, som jeg selv bruger i Office 97, når det er nødvendigt:
Public Function mieReplace(Streng As String, Find As String, Erstat As String) As String
    On Error Resume Next
    Dim Pos As Integer, findpos As Integer
    Dim tmpStr As String
    Pos = 1
    If Len(Streng) = 0 Then
      mieReplace = Streng
      Exit Function
    End If
    tmpStr = Streng
    Do
        findpos = InStr(Pos, tmpStr, Find)
        If findpos <> 0 Then
            tmpStr = Left(tmpStr, findpos - 1) & Erstat & Mid(tmpStr, findpos + Len(Find))
            Pos = Pos
        Else
            Pos = Pos + 1
        End If
    Loop Until Pos = Len(Streng)
    If Err Then
      mieReplace = Streng
    Else
      mieReplace = tmpStr
  End If
End Function
Avatar billede terry Ekspert
12. juli 2004 - 14:53 #2
make a query in Access

SELECT *, replace(telefonnummer, ' ', '') AS Telf FROM YourTable

Then you can (hopefully) use

select telefonnummer where telf = '12345678'
Avatar billede terry Ekspert
12. juli 2004 - 14:54 #3
Oops!


select telefonnummer from qry where telf = '12345678'
Avatar billede jobless Nybegynder
12. juli 2004 - 14:54 #4
Det var netop dette jeg ville undgå ved at replace i sql-en....
Avatar billede terry Ekspert
12. juli 2004 - 14:56 #5
THomas I think its because some VBA functions are not recognised by the SQL parser in ADO
Avatar billede jobless Nybegynder
12. juli 2004 - 15:02 #6
Terry: Der er en ikke-defineret funktion "Replace" i udtrykket....

Måske kan det ikke lade sig gøre ?
Avatar billede terry Ekspert
12. juli 2004 - 15:06 #7
?
You have just said that replace works in Access!

(select telefonnummer where replace(telefonnummer, ' ', '') = '12345678' )


You have to make the query in Access, then from your ADO program make a select on the query instead of the table
Avatar billede jobless Nybegynder
12. juli 2004 - 15:20 #8
Thats just what I do, query 1 works inside access, but when called by query2 (and processed) via ado, it doesn't work.
Avatar billede terry Ekspert
12. juli 2004 - 15:52 #9
so this works in Access?

SELECT *, replace(telefonnummer, ' ', '') AS Telf FROM YourTable

Have you SAVED this in Acess as a query? (qryThisIsMyQuery)

now in ADO you select from the query!

SELECT * FROM qryThisIsMyQuery
Avatar billede jobless Nybegynder
31. august 2004 - 12:37 #10
Virker ikke, jeg ændrer data i tabellen istedet.
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