سؤال

I need your help. I woulod like to change one char by another but in all database and i have several table and fields. So i'm building a function in VB but that change nothing and i have no error. I think that my condition is false but i don't see how to correct it :/

Public Sub updateField()
Dim db As DAO.Database, td As DAO.TableDef, field As DAO.field
Dim rs As DAO.Recordset, sSQL As String, sData As String

Set db = CurrentDb

Change = "\"""
replaced = """"

'each table in db
For Each tbd In db.TableDefs
    'each field in table
    For Each fld In tbd.Fields
        'check if String Data have my character
        If InStr(1, fld.Name, Change) Then
            sSQL = "UPDATE " & tbd.Name & " SET " & fld.Name & " = replace([" & fld.Name & "], " & Change & ", " & replaced & ")"
            db.Execute sSQL
        End If
    Next
Next
End Sub

EDIT : I finally find what's wrong. if some people are interested :

Set db = CurrentDb

Change = "\"""
replaced = """"

'each table in db
For Each tbd In db.TableDefs
    'each field in table
    For Each fld In tbd.Fields
        If Left(tbd.Name, 4) <> "MSys" And Left(tbd.Name, 4) <> "~TMP" Then
            If fld.Type = dbText Or fld.Type = dbMemo Then
                sSQL = "UPDATE " & tbd.Name & " SET " & fld.Name & " = replace([" & fld.Name & "],'" & Chr(92) + Chr(34) & "','" & Chr(34) & "')"
                db.Execute sSQL
                'Debug.Print (sSQL)
            End If
        End If
    Next
Next

Thx for your help guys ;)

هل كانت مفيدة؟

المحلول

If it should help there my solution :

Public Sub updateField()
Dim db As DAO.Database, td As DAO.TableDef, field As DAO.field
Dim rs As DAO.Recordset, sSQL As String, sData As String, change As String, replace As String

change = "\'"
replace = "'"

' simple quote = 39
' doulbe quote = 34
' antislash = 92
' retour chariot = 13
' n = 110
' r = 114
Set db = CurrentDb

'each table in db
For Each tbd In db.TableDefs
    'each field in table
    For Each fld In tbd.Fields
        If Left(tbd.Name, 4) <> "MSys" And Left(tbd.Name, 4) <> "~TMP" Then
            If fld.Type = dbText Or fld.Type = dbMemo Then
                ' \r\n
                'sSQL = "UPDATE " & tbd.Name & " SET [" & fld.Name & "] = replace([" & fld.Name & "],'\r\n','" & Chr(13) & Chr(10) & "');"
                ' \"
                'sSQL = "UPDATE " & tbd.Name & " SET [" & fld.Name & "] = replace([" & fld.Name & "],'" & Chr(92) + Chr(34) & "','" & Chr(34) & "');"
                'db.Execute sSQL
                sSQL = "UPDATE " & tbd.Name & " SET [" & fld.Name & "] = replace([" & fld.Name & "],'\''','''');"
                db.Execute sSQL
                'Debug.Print (sSQL)
            End If
        End If
    Next
Next
End Sub

That's works for me ;)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top