我有大量的.mdb文件(如Microsoft Access DB-Files中)。应该将第一个字段(或列)命名为MyField1
。但是,这些文件已损坏,因此实际字段名称为 ufeffMyField1
或换句话说, 0xFEFF
已预先为实际字段名称。
我正在尝试使用pyodbc-command
将有关字段从ufeffMyField1
复制到NewField
cursor.execute("UPDATE MyTable SET NewField=" + colname + ";")
其中colname
是错误的字段名称(假设NewField
已经存在)
使用
之类的东西,用pyodbc获取colname
的值 rows = cur.columns(table='MyTable')
for row in rows:
if("MyField1" in row.column_name):
colname=row.column_name
执行UPDATE...
命令产生驱动程序错误,即MaxLocksperfile MS Access参数太低,如下所述 - 超越 - 释放的大型Transacti。但是,我在程序中仅打开一个文件时,我增加了Maxlocksperfile参数,并使用了几个数量级,因此似乎不是实际问题。
请注意,如果没有问题,我可以在MS访问中打开文件并将其重命名为GUI中的字段。我还没有找到一种在GUI中查看该字段错误命名的方法,据推测,由于额外的位不符合常见的编码。
最后,这使我提出了我的问题:如何通过pyodbc-commands将原始字节传递?
或者,如果您还有其他方法可以解决删除额外字符的实际问题,请在评论中提出建议?(如清理字段名称中的所有非ASCII字符)
如果要使用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