从.mdb字段名称中删除奇怪的字符

时间:2017-12-06 14:34:12

标签: python-3.x ms-access pyodbc

我有大量的.mdb文件(如在Microsoft Access数据库文件中)。第一个字段(或列)应该命名为say MyField1。但是,文件已损坏,因此实际字段名称为\ufeffMyField1,换句话说,实际字段名称前面有0xFEFF

我正在尝试使用pyodbc-command

将有问题的字段从\ufeffMyField1复制到NewField
cursor.execute("UPDATE MyTable SET NewField=" + colname + ";")

其中colname是错误的字段名称(假设NewField已存在)

colname的值是使用pyodbc使用

之类的东西获取的
rows = cur.columns(table='MyTable')
for row in rows:
   if("MyField1" in row.column_name):
      colname=row.column_name

执行UPDATE...命令会产生一个驱动程序错误,即MaxLocksPerFile Ms Access参数太低,如https://support.microsoft.com/en-us/help/815281/-file-sharing-lock-count-exceeded-error-message-during-large-transacti所述。 但是,我在程序中只打开一个文件时,将MaxLocksPerFile参数增加了几个数量级,所以看起来这不是实际问题。

请注意,没问题我可以在MS Access中打开文件并重命名gui中的字段。我没有找到一种方法来在gui中看到该字段被错误地命名,据说因为额外的位与常见的编码不匹配。

最后,这引出了我的问题:如何将原始字节作为pyodbc-commands传递?

另外请在评论中建议您是否有其他方法可以解决删除额外字符的现实问题? (如清除字段名称中的所有非ASCII字符)

1 个答案:

答案 0 :(得分:0)

如果你想使用DAO,那么它非常简单。您可以修改以下代码以查找并循环通过所有数据库的文件夹。

Sub Rename_First_Field()
Dim dbs As DAO.Database
Dim tdf As DAO.TableDef
Dim fld As DAO.Field

    Set dbs = OpenDatabase("C:\....\SomeDB.mdb")
    For Each tdf In dbs.TableDefs           ' Spin thru all tables in this database
        Set fld = tdf.Fields(0)             ' Grab the first field
        Debug.Print tdf.Name & vbTab & "|" & vbTab & fld.Name
        fld.Name = "MyField1"               ' Rename to 'MyField1'
    Next tdf                                'Move to next table
    Set tdf = Nothing
    Set dbs = Nothing
End Sub