Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2016, 11:13   #1
superpsih
Пользователь
 
Регистрация: 14.11.2013
Сообщений: 74
По умолчанию SQL запрос в VBA

Добрый день.
Нужно создать запрос по двум критериям нахождения записи в таблице.
По одному критерию запрос выглядит так и работает:
Код:
strSql = "UPDATE [group_list] set qur_in_gr = '" & b & "' WHERE [lot_g] = " & Form_operation_query.Lot
По двум критериям он выглядит так и не работает:
Код:
strSql = "UPDATE [group_list] set qur_in_gr = '" & b & "' WHERE [lot_g] = '" & Form_operation_query.Lot & "' AND [link_id_group]= " & Form_operation_query.Combo23
Насколько я понимаю проблема в операторе AND. Можно ли как-то поправить запрос, чтобы он заработал?
superpsih вне форума Ответить с цитированием
Старый 15.01.2016, 11:16   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В чем выражается его неработоспособность?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.01.2016, 11:23   #3
superpsih
Пользователь
 
Регистрация: 14.11.2013
Сообщений: 74
По умолчанию

Run-time error '3464':
Data type mismatch in criteria expression.
Запрос из окна Immediate:
Код:
UPDATE [group_list] set qur_in_gr = '86' WHERE [lot_g] = '88' AND [link_id_group]= 40
На скриншоте строка, которая должна быть изменена.
Первый запрос успешно изменяет в ней значение, но уникальность строки определяется только по двум полям (lot_g и link_id_group), поэтому при появлении поля с одинаковым значением lot_g, возникнут проблемы.
Изображения
Тип файла: jpg Screenshot 2016-01-15 11.21.16.jpg (33.3 Кб, 116 просмотров)

Последний раз редактировалось superpsih; 15.01.2016 в 11:28.
superpsih вне форума Ответить с цитированием
Старый 15.01.2016, 11:42   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Data type mismatch in criteria expression
link_id_group небось символьного типа, тогда надо [link_id_group]= '40'
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.01.2016, 11:48   #5
superpsih
Пользователь
 
Регистрация: 14.11.2013
Сообщений: 74
По умолчанию

Всё. Разобрался. Проблема была в link_id_group, правда почему не работало так и не понял. Сейчас код выглядит так:
Код:
strSql = "UPDATE [group_list] set qur_in_gr = '" & b & "' WHERE [link_id_group] = " & Form_operation_query.Combo23 & " AND [lot_g]=" & Form_operation_query.Lot
В immediate:
Код:
UPDATE [group_list] set qur_in_gr = '8' WHERE [link_id_group] = 40 AND [lot_g]=88
И всё работает!
superpsih вне форума Ответить с цитированием
Старый 15.01.2016, 11:55   #6
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Цитата:
Разобрался. Проблема была в link_id_group
гдеж разобрался ..
come-on вне форума Ответить с цитированием
Старый 15.01.2016, 12:04   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
UPDATE [group_list] set qur_in_gr = '86' WHERE [lot_g] = '88'
Интересно, как это работало
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.01.2016, 12:52   #8
superpsih
Пользователь
 
Регистрация: 14.11.2013
Сообщений: 74
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Интересно, как это работало
Не знаю. Поля числовые lot_g и link_id_group, Long_Integer по умолчанию. Поле lot_g - поле с подстановкой. Почему работает и не работало не разобрался, но как сделать чтобы заработало - разобрался.
Кстати, такой вот код:
Код:
strSql = "UPDATE [group_list] set qur_in_gr = '" & b & "' WHERE [link_id_group] = " & Form_operation_query.Combo23 & " AND [lot_g]='" & Form_operation_query.Lot & "'"
Или
Код:
UPDATE [group_list] set qur_in_gr = '95' WHERE [link_id_group] = 40 AND [lot_g]='88'
тоже не работает с той же самой ошибкой несовместимости типов.
Получается, что чтобы Access принимал значение за число, оно должно быть без кавычек одинарных, а текст - с одинарными кавычками. Правда, непонятно почему он не ругается на
Код:
set qur_in_gr = '95'
- это поле тоже числовое, Single.
superpsih вне форума Ответить с цитированием
Старый 15.01.2016, 12:59   #9
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от superpsih Посмотреть сообщение
Получается, что чтобы Access принимал значение за число, оно должно быть без кавычек одинарных, а текст - с одинарными кавычками.

А как в других СУБД? Числа тоже берутся в кавычки?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA.SQL запрос при открытии формы katttes Microsoft Office Access 2 27.03.2013 14:12
Простой SQL запрос средствами vba RISagitov Microsoft Office Access 3 26.09.2012 20:11
sql запрос в vba Access DenProx Microsoft Office Access 7 21.01.2011 07:46
Запрос с CASE переделать в запрос с PIVOT (MS SQL Server 2005) Машуля SQL, базы данных 4 06.05.2010 21:09
Создание новых таблиц в MS SQL SERVERE через SQL запрос в Delphi S_Yevgeniy Помощь студентам 1 27.10.2009 06:26