Я использую функцию «обновляемый запрос» в ADO, позволяя выбрать набор данных из нескольких таблиц и критериев и отобразить его в виде сетки или другого пользовательского интерфейса для просмотра и редактирования пользователем.
Однакои я удивлен, что до сих пор не сталкивался с этой проблемой, когда в одной из соединенных таблиц нет записи для (главного) ключа, и пользователь пытается изменить поле в этой таблице, ADO даетзнаменитая ошибка «Строка не может быть найдена ...» в сообщении.
Насколько я понимаю, эта ошибка, драйвер ADO пытается найти запись, чтобы обновить ее поля - и, конечно, в этомНапример, нет записей для поиска.В этих условиях я ожидал, что драйвер ADO выдаст эквивалент запроса UPDATE для основной таблицы, но запрос INSERT для вспомогательной таблицы.
Кто-нибудь еще сталкивался с этой проблемой и нашел решение?
Используемый драйвер ADO - поставщик OLE DB Jet 4.0, подключающийся к базе данных Access (mdb).
Я гарантировал, что поля первичных ключей для обеих таблиц доступны в наборе данных запросов для использования драйвером.
Вот базовая версия SQL, которую я использую:
SELECT
Table1.CustomerNo, Table1.Field1, Table1.Fieldn,
Table2.CustomerNo, Table2.Field1, Table2.Fieldn
FROM
Table1
LEFT JOIN Table2
ON Table1.CustomerNo = Table2.CustomerNo
WHERE
Table1.CustomerNo = Newcode;
В качестве эксперимента я попробовал то же самое в MS Access 2007, и это сработало, поэтому, возможно, решение в ADO (но тогда Access, вероятно, использует другой драйвер).