如何通过ODBC在Access中的“查找向导”列中插入数据?

时间:2019-03-27 14:39:04

标签: python sql ms-access odbc pyodbc

通过ODBC将数据插入Microsoft Access的“查找向导”列中的SQL语句是什么?

3 个答案:

答案 0 :(得分:0)

通过简单地插入值,Microsoft Access ODBC驱动程序可以将其插入单值查找字段。

crsr.execute("INSERT INTO LookupTest (SingleValueLookupField) VALUES (?)", 'ListValue7')

Microsoft Access ODBC驱动程序不能将项目插入多值查找字段。要从Python做到这一点,您需要使用pywin32和Access DAO,例如

import win32com.client

# ...

dbe = win32com.client.Dispatch("DAO.DBEngine.120")
db = dbe.OpenDatabase(r'C:\Users\Public\Database1.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()

答案 1 :(得分:0)

您也许可以使它起作用,但是,如果您决定更改数据库链接(例如从test到producton),则会丢失查找信息。请记住,对于任何形式,都可以使用组合框向导并获得SAME结果,而不必在表级别添加查找。尝试在表级别进行关系联接是一个非常糟糕的主意。由于用户从不应该直接编辑表,而总是使用表格或说报告,因此不需要此功能和方法。窗体上的组合框向导将执行相同的操作,并得到相同的结果。因此该列应保持为标准的长列数据类型,并且表单上的组合框将显示另一个表中的列表,并从另一个表中获取+保存PK ID。

因此,如果您允许用户直接打开+编辑表,那么在表级别使用查找所获得的唯一好处是,这是一个非常糟糕的主意。如果您需要该列的ID,会发生什么情况,但是由于它是查找,它现在返回一些文本。

对于任何报告,您都可以简单地构建一个查询,然后联接另一个表以提供文本描述部分来代替显示ID。

因此,我强烈建议您不要这样做。如前所述,由于通常更改Access应用程序指向的数据库,甚至更改数据库服务器的名称,然后在Access中指向(重新链接)表时,您将丢失查找设置。

答案 2 :(得分:0)

对于这种事情,您不会使用“向导”。只是代码。

# 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()