通过 ODBC 将数据插入 Microsoft Access 中的查找向导列的 SQL 语句是什么?
Microsoft Access ODBC 驱动程序只需插入值即可插入到单值查阅字段中。
crsr.execute("INSERT INTO LookupTest (SingleValueLookupField) VALUES (?)", 'ListValue7')
Microsoft访问 ODBC 驱动程序无法将项插入到多值查阅字段中。要从Python中做到这一点,你需要使用pywin32和Access DAO,例如,
import win32com.client
# ...
dbe = win32com.client.Dispatch("DAO.DBEngine.120")
db = dbe.OpenDatabase(r'C:UsersPublicDatabase1.accdb')
# adding multi-value items to an existing row in table [LookupTest]
rst_table = db.OpenRecordset("SELECT * FROM LookupTest WHERE ID=1", 2) # dbOpenDynaset
rst_multivalue_lookup_field = rst_table.Fields('MultiValueFromList').Value
rst_table.Edit()
rst_multivalue_lookup_field.AddNew()
rst_multivalue_lookup_field.Fields('Value').Value = 'ListOption2'
rst_multivalue_lookup_field.Update()
rst_multivalue_lookup_field.AddNew()
rst_multivalue_lookup_field.Fields('Value').Value = 'ListOption5'
rst_multivalue_lookup_field.Update()
rst_table.Update()
db.Close()
您也许能够使其正常工作,但是如果您决定更改数据库链接(例如从测试到产品),您将丢失查找信息。请记住,对于任何窗体,都可以使用组合框向导并获得相同的结果,而不必在表级别添加查找。在表级别尝试关系联接是一个非常糟糕的主意。由于用户永远不应该直接编辑表格,而总是使用表单或报告,因此不需要此功能和方法。窗体上的组合框向导将执行相同的操作,并产生相同的结果。因此,该列应保持为标准的长列数据类型,窗体上的组合框将显示另一个表中的列表,并从另一个表中获取 + 保存 PK ID。
因此,通过在表级别使用查找获得的唯一优势是允许用户直接打开+编辑表,如前所述,这是一个非常糟糕的主意。如果您需要该列的 ID,但它现在返回一些文本,因为它是查找,会发生什么情况。
对于任何报表,只需生成查询,并联接另一个表,以提供文本说明部分来代替显示 ID。
所以我强烈建议你不要这样做。如前所述,由于更改 Access 应用程序指向的数据库(甚至更改数据库服务器的名称)是很常见的,因此当您在 Access 中指向(重新链接)表时,将丢失查找设置。
你不会用"向导"来做这种事情。 只是代码。
# insert data into 2 fields in a table
import pyodbc
conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\your_path\MSACCESS.accdb;')
cursor = conn.cursor()
cursor.execute(''' INSERT INTO Table2 (ExplodeKey, ExplodeField)
VALUES(5, 'RMS') ''')
conn.commit()