ACC97: Search and Replace in Large Memo Field Causes IPFID: Q173975
|
Moderate: Requires basic macro, coding, and interoperability skills.
When you perform a search and replace in a Memo field containing more than
2052 characters, you receive one of the following error messages.
This program has performed an illegal operation and will be shut down.
MSACCESS caused an invalid page fault in MSACCESS.EXE.
An application error has occurred and an application error log is
being generated. MSACCESS.exe
The following example uses an update query that calls a user-defined
function to do the search and replace:
Option Explicit
Function ReplaceString(strSearch As String, strSearchFor As String, _
strReplaceWith As String)
On Error GoTo err_ReplaceString
' Searches the strSearch variable for strSearchFor
' and replaces it with strReplaceWith.
Dim lngFoundLoc As Long ' Location of match.
Dim lngLenRemove As Long ' Length of string being replaced.
' Set length of original text to skip.
lngLenRemove = Len(strSearchFor)
' Set location of match.
lngFoundLoc = InStr(1, strSearch, strSearchFor)
' If strSearchFor isn't found in strSearch
' just return the original string.
If lngFoundLoc = 0 Then
ReplaceString = strSearch
' If match is found, return original string up to match
' location, concatenate new text, and search the rest of
' the string recursively for additional matches.
Else
ReplaceString = Left(strSearch, lngFoundLoc - 1) & _
strReplaceWith & _
ReplaceString(Mid(strSearch, lngFoundLoc + _
lngLenRemove), strSearchFor, strReplaceWith)
End If
exit_ReplaceString:
Exit Function
' Print error to Debug window and don't interrupt query.
err_ReplaceString:
Debug.Print "Error Replacing String """ & _
strSearchFor & """ with """ & _
strReplaceWith & """ in text """ & _
strSearch & """"
' If there is an error, return original string
' and exit the function.
ReplaceString = strSearch
Resume exit_ReplaceString
End Function
Query: qryUpdateMemos
--------------------------------------------------------------------
Type: Update Query
Field: <Name of Memo Field>
Table: <Name of Table>
Update To:
ReplaceString([<Name of Memo Field>],[Search for],[Replace with])
Criteria:
Field: Instr(1,[<Name of Memo Field>], [Search for])
Update To:
Criteria: >0
Microsoft has confirmed this to be a problem in Microsoft Access 97.
Table: tblMemoTable
--------------------
Field Name: MemoText
Data Type: Memo
Indexed: No
Function FillMemo(strTableName As String, _
strFieldName As String)
Dim db As Database
Dim rs As Recordset
On Error GoTo Err_FillMemo
Set db = CurrentDb
Set rs = db.OpenRecordset(strTableName)
With rs
.AddNew
.Fields(strFieldName) = "abc" & String(2050, "x")
.Update
End With
db.Close
Exit_FillMemo:
Exit Function
Err_FillMemo:
MsgBox CStr(Err) & " " & Err.Description
Resume Exit_FillMemo
End Function
For more information about creating update queries, search the Help Index
for "update queries, creating" and select the Help Topic "Change records as
a group using an update query," or ask the Microsoft Access 97 Office
Assistant "How to create an update query."
For more information about writing recursive procedures, search the Help
Index for "recursive procedures" and select the Help topic "Creating
Recursive Procedures."
Additional query words: pra searching replacing
Keywords : kberrmsg GnlFnd
Version : WINDOWS:97
Platform : WINDOWS
Issue type : kbbug
Last Reviewed: April 20, 1999