6. Jak znaleźć Morse'a, czyli problem apostrofów w polach tekstowych?

Apostrofy pomieszane z cudzysłowami w polach tekstowych to zmora zapytań SQL-owych. Ale jak zmusić użytkownika, żeby nie wpisywał do bazy określeń typu:

Id Opis -- ------------------------ 1 Dyskietka 3,14" 2 Restauracja "Mc'Donalds" 3 Morse'a

Poza tym, czasami takie wpisy mogą być konieczne. Jak sobie z nimi radzić?

Standardowa metoda zakładania filtru dla formularza wygląda tak:

Me.Filter = "Pole1='" & parametr & "'"
Me.FilterOn = True

Niestety, w przypadku parametru z apostrofem, Access zgłasza błąd składniowy.

Zamieszczam dwa rozwiązania tego problemu.

1 sposób oparty na funkcji formatującej 

2 sposób z wykorzystaniem pomocniczego pola

Uwaga: Oba powyższe sposoby dotyczą równości pole=parametr.

W przypadku operatora pole Like parametr, parametr nie może zawierać znaków #, [ oraz ? i *, ze względu na ich specjalne znaczenie w tym zapisie.

Aby uwzględnić wszystkie znaki ASCII w zapisie z Like, skorzystamy ze sposobu 1 (link u góry), musimy jednak zmodyfikować funkcję adhHandleQuotes podaną w tym sposobie. Poniżej przedstawiam postać tej funkcji po modyfikacji (dla odróżnienia nazwałem ją opLike):

Public Function opLike(varValue)
'Na podstawie funkcji adhHandleQuotes()
'dla Acc2000
Dim ret
    ret = Replace(varValue, "[", "[[]")
    ret = Replace(ret, "#", "[#]")
    ret = Replace(ret, "*", "[*]")
    ret = Replace(ret, "?", "[?]")
    ret = Replace(ret, "'", "''")
    opLike = ret
End Function

Należy tę funkcję zapisać w jakimś module globalnym i już możemy korzystać z naszego Like:

Me.Filter = "Pole1 like '" & opLike(parametr) & "'"
Me.Filter = "Pole1 like '" & opLike(parametr) & "*'" 
Me.Filter = "Pole1 like 'a?" & opLike(parametr) & "*'" 'itd