View Full Version : Escaping Special Characters in Access


kbelkus
10-28-2008, 02:06 AM
Hey,

I hope everyone is well.

I am trying to solve a minor problem with my Database. I am trying to 'escape' characters.
My users can insert information into a textbox. This data is then stored as a variable and then used within my INSERT SQL statement.

The problem is, VBA script spits out an error: ("Syntax Error (Missing Operator) in Query Expression"). Whenever my users use a set of special characters: ',",[,],#.

How do I go about repairing this problem. It's important that my users can enter these characters if they need to.

Any help or clues would be appreciated.

Kindest Regards
Kieran

KenHigg
10-28-2008, 03:25 AM
One work around may be to instruct your users to put double characters in place of these. For example use "##" instead of "#". Or you may be able to do a function to scan the text string and do the conversion for you. ???

CyberLynx
10-28-2008, 04:28 AM
As Ken said, you could do a function to remove instances of these unwanted characters. I quickly whipped a simple one up for you. The Function is named ReplaceEx. Just copy and past the following into a Database Code Module:


Public Function ReplaceEx(ByVal SourceStrg As String, ByVal SearchStrg As String, _
Optional ByVal ReplaceStrg As Variant = "") As Variant
Dim Multi As Integer

SearchStrg = Replace(SearchStrg, ",,,", ",~|~,"): SearchStrg = Replace(SearchStrg, ",,", ",~|~")
If (InStr(SearchStrg, ",") > 0) Or (InStr(SearchStrg, "~|~") > 0) Then
Dim SearchStrgArray() As String
SearchStrgArray = Split(SearchStrg, ",")
Multi = 1
End If

ReplaceStrg = Nz(ReplaceStrg, "")
ReplaceEx = SourceStrg

If Multi = 1 Then
For Multi = LBound(SearchStrgArray) To UBound(SearchStrgArray)
If SearchStrgArray(Multi) = "~|~" Then SearchStrgArray(Multi) = ","
ReplaceEx = Replace(ReplaceEx, SearchStrgArray(Multi), ReplaceStrg)
Next Multi
Else
ReplaceEx = Replace(SourceStrg, SearchStrg, ReplaceStrg)
End If

If ReplaceEx = "," Then ReplaceEx = ""
If Len(ReplaceEx) = 0 Then ReplaceEx = Null

Erase SearchStrgArray
End Function


Usage:

ReplaceEx(String,SubString,NewSubString)

Examples:

(1) MsgBox ReplaceEx("This is Tony's desk.", "'") OR MsgBox ReplaceEx("This is Tony's desk.", "'", "")

Returns: This is Tonys desk.

(2) MsgBox ReplaceEx("This [is] *Tony's* desk.", "[,],*,'","")

Returns: This is Tonys desk.

Notice the unwanted characters are delimited by a comma i the above example. What if you don't want commas? The delimit a comma within a comma:

(3) MsgBox ReplaceEx("This [is] *Tony's* desk, I think.", "[,],*,,,'","")

Returns: This is Tonys desk I think.

(4) MsgBox ReplaceEx("Who is Tony for heavens sake?", "Tony", "Frank")

Returns: Who is Frank for heavens sake?

The NewSubString argument is optional. If nothing is supplied then when a SubString is detected it is turn into nothing.

If ReplaceEx contains a zero length string ("") then the Function Returns NULL.

.

kbelkus
10-28-2008, 05:03 AM
KenHigg + Cyberlynx. Thank you for your replies. KenHigg: Thanks for going to the trouble to wip up an example, it's appreciated.

KenHigg
10-28-2008, 05:05 AM
You're welcome but Cyberlynx did the sample code :p

DCrake
10-28-2008, 05:52 AM
Another example is to use the Keypress event and examine the keycode for specific characters and if encountered use sendkeys {BackSpace} to erase the last character typed in.