Jeśli pole tekstowe może zawierać zarówno cudzysłowy i apostrofy, to jest
problem.
Coś w naszym wyrażeniu Me.Filter musi spełniać rolę cudzysłowów:
- zewnętrznych - definiujących string (zwykle ")
- środkowych - otaczających przyrównywany tekst (zwykle ')
- wewnętrznych - czyli szukanych znaków (? - no właśnie ...)
Przykładowo,
zawartość kombi: {Jadłodajnia "MacDonald's", Kolejowa 3}
Me.Filter = " [pole]= "Jadłodajnia "MacDonald's", Kolejowa 3""
Co robić?
Jeśli kombi nie zawiera cudzysłowów ani apostrofów, wystarczy:
Me.Filter = " [pole]= '" & Me.Kombi & "'"
A jeśli zawiera apostrofy?
Trzeba każdy wewnętrzny apostrof zastąpić apostrofem podwójnym!
Końcowy efekt powinien wyglądać tak:
Me.Filter = " [pole]= 'Jadłodajnia "MacDonald''s", Kolejowa 3'"
Aby to osiągnąć wypada zastosować jakąś funkcję konwertującą, powiedzmy adhHandleQuotes(),
Me.Filter = " [pole]= " & adhHandleQuotes(Me.Kombi)
której rolą jest otoczyć tekst "środkowymi" cudzysłowami, dajmy: apostrofami, zaś wszystkie wewnętrzne apostrofy zamienić na apostrofy podwójne.
Ponizej zamieszczam cytowaną funkcję, autorstwa panów Getz-Litwin-Gilbert:
' From Access 2000 Developer's Handbook, Volume I ' by Getz, Litwin, and Gilbert. (Sybex) ' Copyright 1999. All rights reserved.Public Function adhHandleQuotes(ByVal varValue As Variant, _ Optional strDelimiter As String = "'") As Variant' From Access 2000 Developer's Handbook ' by Litwin, Getz, and Gilbert (Sybex) ' Copyright 1999. All rights reserved. ' Replace all instances of strdelimiter with varValue with TWO instances, ' thereby handling the darned quote issue once and for all. Also, ' surround the string with the delimiter, as well. ' Returns Null if varValue was Null, otherwise ' returns varValue with all instances of strDelimiter ' replaced with two of each. ' adhHandleQuotes("This 'is' a test") returns ' "'This ''is'' a test'"adhHandleQuotes = _ strDelimiter & _ Replace(varValue, strDelimiter, strDelimiter & strDelimiter) & _ strDelimiter End Function
Zastosowanie jak już pisałem powyżej:
Me.Filter = "[pole]= " & adhHandleQuotes(Me.Kombi)
Uwaga: "środkowe cudzysłowy" też generuje funkcja!
KN