Как вставить данные в столбец мастера поиска в Access через ODBC?

#python #sql #ms-access #odbc #pyodbc

#python #sql #ms-access #odbc #pyodbc

Вопрос:

Что такое инструкция SQL для вставки данных в столбец мастера поиска в Microsoft Access через ODBC?

Комментарии:

1. Здравствуйте и добро пожаловать в stackoverflow. Более вероятно получить ответ, если вы покажете, что вы пробовали до сих пор.

2. Советую не создавать поисковые запросы в таблице, создайте combobox в форме. Источником строки будет оператор SELECT. Почему вы используете python, а не просто Access как gui и VBA для управления? Вставьте данные в поле, аналогичное любому полю.

Ответ №1:

Драйвер Microsoft Access ODBC может выполнять вставку в поле поиска с одним значением, просто вставляя значение.

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

Драйвер ODBC Microsoft Access не может вставлять элементы в поле поиска с несколькими значениями. Чтобы сделать это из Python, вам нужно будет использовать pywin32 и получить доступ к 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()
  

Ответ №2:

Возможно, вам удастся заставить это работать, но если вы решите изменить ссылки на базу данных (скажем, с test на producton), вы потеряете информацию поиска. Имейте в виду, что для любой формы вы можете использовать мастер полей со списком и получить ТЕ же результаты и не добавлять поисковые запросы на уровне таблицы. Пытаться выполнять реляционные соединения на уровне таблицы — ОЧЕНЬ плохая идея. Поскольку пользователям НИКОГДА не следует редактировать таблицу (ы) напрямую, но всегда использовать форму или, скажем, отчет, то необходимость в этой функции и подходе не требуется. Мастер поля со списком в форме сделает то же самое и приведет к тем же результатам. Таким образом, этот столбец должен оставаться стандартным типом данных long column, а поле со списком в форме представит список из другой таблицы и захватит сохранит идентификатор PK из этой другой таблицы.

В результате единственное преимущество, которое вы получаете, используя поиск на уровне таблицы, — это если вы разрешаете пользователям открывать редактировать таблицы напрямую, а это, как уже отмечалось, очень плохая идея. Что произойдет, если вам нужен идентификатор этого столбца, но теперь он возвращает некоторый текст, потому что это поиск.

Для любого отчета вы можете просто создать запрос и присоединиться к другой таблице, чтобы предоставить текстовое описание вместо отображения идентификатора.

Поэтому я бы настоятельно рекомендовал вам этого не делать. Как уже отмечалось, поскольку принято изменять, на какую базу данных указывает приложение Access, или даже, скажем, изменять имя сервера базы данных, то при указании (повторной ссылке) таблиц в Access вы потеряете настройки поиска.

Ответ №3:

Вы не будете использовать «Мастер» для такого рода вещей. Просто код.

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