【问题标题】:change character in all text fields更改所有文本字段中的字符
【发布时间】:2013-11-29 08:43:07
【问题描述】:

我需要你的帮助。我想将一个字符更改为另一个字符,但在所有数据库中,我有几个表和字段。所以我在 VB 中构建了一个函数,但是没有任何改变,我也没有错误。我认为我的情况是错误的,但我不知道如何纠正它:/

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

编辑: 我终于找到了问题所在。如果有人感兴趣:

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

谢谢你们的帮助;)

【问题讨论】:

  • Ick,旧的 DAO 对象。读到这里我觉得很脏。
  • 所以您想更改数据库中字段的名称?或存储在这些字段中的数据值?您的逻辑似乎试图替换字段名称,而不是值。
  • 是的,我正在尝试更改字段 ^^ 中的值,但我不知道这是怎么做到的:/ Thx
  • 所以您尝试用\" 替换" 对吗?
  • 是的,我正在尝试将值字段中的 \" 替换为 "。

标签: ms-access replace vba


【解决方案1】:

如果它对我的解决方案有帮助:

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

这对我有用;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    相关资源
    最近更新 更多