ACC2000: Unexpected Characters Appear in Imported dBASE IV Database (210542)



The information in this article applies to:

  • Microsoft Access 2000

This article was previously published under Q210542
This article applies to a Microsoft Access database (.mdb) and to a Microsoft Access project (.adp).

Advanced: Requires expert coding, interoperability, and multiuser skills.

SYMPTOMS

Unexpected characters, specifically characters Chr(10) and Chr(236), appear approximately every 65th character within a Memo field of an imported dBASE IV or Paradox database.

CAUSE

These characters are used by dBASE IV so that its memo editor word wraps automatically. The dBASE IV memo editor has a fixed line length of 65 characters, and the mechanism is stored in the data so that the memo editor does not have to force the word wrap.

RESOLUTION

Use the following procedure and sample code to remove the Chr(10) and Chr(236) characters from the data. This procedure will not damage the data, and you can export the data back to dBASE IV later if you want to:
  1. In the Access 2000 database or project that contains the imported dBASE IV file, type or paste the following procedure in a new module:
    Option Compare Database
    Option Explicit
    
    Sub subMemoFix(strTblName As String, strFldName As String)
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'This code requires a reference to the following object library:
        '
        '   Microsoft ActiveX Data Objects 2.x Library
        '
        'where 2.x is equal to 2.1 or higher.
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        Dim con As ADODB.Connection
        Dim rst As ADODB.Recordset
        Dim strOldMemo As String
        Dim strNewMemo As String
        Dim intStart As Integer
    
        Set con = CurrentProject.Connection
        Set rst = New ADODB.Recordset
    
        rst.Open strTblName, con, adOpenDynamic, adLockOptimistic
        rst.MoveFirst
    
        Do Until rst.EOF
            If rst(strFldName) <> "" Then
                strOldMemo = Trim(rst(strFldName))
                strNewMemo = ""
    
                For intStart = 1 To Len(strOldMemo)
                    If Mid(strOldMemo, intStart, 2) = (Chr(236) & Chr(10)) Then
                        intStart = intStart + 1
                    Else
                        strNewMemo = strNewMemo & Mid(strOldMemo, intStart, 1)
                    End If
                Next
    
                rst(strFldName) = strNewMemo
                rst.Update
            End If
            rst.MoveNext
        Loop
    
        rst.Close
        con.Close
        
        Set rst = Nothing
        Set con = Nothing
    
        Debug.Print
        Debug.Print "Done"
    End Sub
    					
  2. To test this function, type the following line in the Immediate window
    subMemoFix "<tablename>", "<fieldname>"
    					
    where <tablename> is the name of the imported dBASE IV table and <fieldname> is the name of the Memo field, and then press ENTER.

    For example, for a table that is named CUSTOMERS that has a Memo field that is named NOTES, type:
    subMemoFix "CUSTOMERS", "NOTES"
    					

MORE INFORMATION

The third-party products that are discussed in this article are manufactured by companies that are independent of Microsoft. Microsoft makes no warranty, implied or otherwise, regarding the performance or reliability of these products.

Modification Type:MinorLast Reviewed:7/15/2004
Keywords:kbinterop kbprb kbprogramming KB210542