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:
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 Acc2000Dim 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