Добавление записи в базу данных Access, используя ADO и SQL

Программирование на Visual Basic for Applications
MAGRAV
Новичок
Новичок
Аватара пользователя
 
Сообщения: 41
Зарегистрирован: 27.01.2011 (Чт) 11:57

Добавление записи в базу данных Access, используя ADO и SQL

Сообщение MAGRAV » 12.02.2019 (Вт) 11:33

Добры день форумчане. Пытаюсь формировать небольшую базу в Access из источников *.CSV или *.XLS(...).
При попытке воспроизвести SQL-запрос выдаёт синтаксическую ошибку. Причём дело не в длине запроса. У меня подобный же сборник работает с другими подобными источниками и длина SQL-запроса порой превышает 1000 символов. А здесь вроде всё тоже самое, но ни в какую.
Проверял так же на не совпадение с системными именами.
Теряюсь в догадка в чем же всё таки дело?
Мне кажется я где то строгость синтаксиса при формировании величин для заполнения не учёл.
Пример базы с исходными данными прикладываю. Обсуждаемая реализация запускается с кнопки на форме.
Вложения
DB_рез_расч_ГДМ1.rar
(114.47 Кб) Скачиваний: 158
URA_COMP_50_PERM_1_FRAC_mrx1.rar
(123.02 Кб) Скачиваний: 175
Последний раз редактировалось MAGRAV 13.02.2019 (Ср) 14:34, всего редактировалось 2 раз(а).
Уходя с аэродрома прихвати деталь для дома.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Добавление записи в базу данных Access, используя ADO и

Сообщение ger_kar » 12.02.2019 (Вт) 20:09

Скачал файлы, но к сожалению файл базы оказался не mdb, а accdb. У меня Access 2003 и базы нового формата он не поддерживает. По поводу возможных проблем могу посоветовать вот что (опять же только на для Access 2003, хотя и в новых версиях такая настройка может быть). Так вот, в Access можно включить расширенную версию языка запросов. Включается она в настройках параметров базы данных на вкладке Таблицы и Запросы. Вот скрин
mdb.png
Настройки Access 2003
mdb.png (46.68 Кб) Просмотров: 1969


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

MAGRAV
Новичок
Новичок
Аватара пользователя
 
Сообщения: 41
Зарегистрирован: 27.01.2011 (Чт) 11:57

Re: Добавление записи в базу данных Access, используя ADO и

Сообщение MAGRAV » 13.02.2019 (Ср) 11:50

ger_kar, Попробовал поменять эти настройки. Не получилось. Сохранил в формате 2002-2003. Лежит в первом сообщении. Заранее спасибо за участие!
Уходя с аэродрома прихвати деталь для дома.

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: Добавление записи в базу данных Access, используя ADO и

Сообщение HandKot » 13.02.2019 (Ср) 13:43

MAGRAV писал(а):Теряюсь в догадка в чем же всё таки дело?
Мне кажется я где то строгость синтаксиса при формировании величин для заполнения не учёл.
Пример базы с исходными данными прикладываю. Обсуждаемая реализация запускается с кнопки на форме.


ошибка в том, что Вы открываете базу, которая уже открыта в процедуре DB_Insert_via_ADOSQL3
замените
Код: Выделить всё
    cnt.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
           "Data Source=" & dbPath & ";"


на
Код: Выделить всё
    Set cnt = CurrentProject.Connection


Ошибка 2 (при удалении): в таблице mrx нет полей DAYS и DATE. Скорее всего опечатка, т.к есть поля DAYSIS и DATES
I Have Nine Lives You Have One Only
THINK!

MAGRAV
Новичок
Новичок
Аватара пользователя
 
Сообщения: 41
Зарегистрирован: 27.01.2011 (Чт) 11:57

Re: Добавление записи в базу данных Access, используя ADO и

Сообщение MAGRAV » 13.02.2019 (Ср) 14:37

HandKot, Попробовал реализовать ваши рекомендации. По прежнему одна и та же ошибка: "Отсутствует значение для одного или нескольких требуемых параметров."
Уходя с аэродрома прихвати деталь для дома.

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: Добавление записи в базу данных Access, используя ADO и

Сообщение HandKot » 13.02.2019 (Ср) 15:37

Поставьте брэекпоинт на строке формирования команды удаления и пришлите что она сформирует
I Have Nine Lives You Have One Only
THINK!

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Добавление записи в базу данных Access, используя ADO и

Сообщение ger_kar » 13.02.2019 (Ср) 19:02

HandKot писал(а):Ошибка 2 (при удалении): в таблице mrx нет полей DAYS и DATE. Скорее всего опечатка, т.к есть поля DAYSIS и DATES


MAGRAV писал(а):HandKot, Попробовал реализовать ваши рекомендации. По прежнему одна и та же ошибка: "Отсутствует значение для одного или нескольких требуемых параметров."

В модуле AddDate в Sub DB_Insert_via_ADOSQL3
Поменял
Код: Выделить всё
rst.Open "DELETE FROM " & tblName & " WHERE Код NOT IN (SELECT MIN(Код) FROM  " & tblName & "  GROUP BY ShortFileName, WGNAMES, DAYS, DATE)"

На
Код: Выделить всё
rst.Open "DELETE FROM " & tblName & " WHERE Код NOT IN (SELECT MIN(Код) FROM  " & tblName & "  GROUP BY ShortFileName, WGNAMES, DAYSIS, DATES)"

И все работает без ошибок.
Бороться и искать, найти и перепрятать

MAGRAV
Новичок
Новичок
Аватара пользователя
 
Сообщения: 41
Зарегистрирован: 27.01.2011 (Чт) 11:57

Re: Добавление записи в базу данных Access, используя ADO и

Сообщение MAGRAV » 14.02.2019 (Чт) 7:32

ger_kar, Спасибо! Вы во всём правы. Сам же упомянул что нельзя названиям полей давать имена совпадающие с системными, в данном случае DATE, а сам не строго этому правилу следовал. Разве что текущий вид запроса не является оптимальным судя по всему. 2000 записей придётся ждать до пенси)))
Не подскажите в каком направлении двигаться?
Вместо запроса INSERT INTO ... VALUES ... лучше открыть Recordset на нужной таблице и добавить запись туда? Это и проще, и надежней, и наглядней?
Уходя с аэродрома прихвати деталь для дома.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

    TopList  
cron