Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/19: Рейтинг темы: голосов - 19, средняя оценка - 4.84
0 / 0 / 0
Регистрация: 16.09.2011
Сообщений: 4
1

Запуск запроса к таблице на SQL server через VBA access 2007

29.01.2013, 14:28. Показов 3981. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!

дано:

база данных аксес 2007,
к ней прилинкованы две таблицы с sql server "dbo_PLANNING_DATA_VERSIONS_STORAGE" и "dbo_PLANNING_DATA_VERSIONS",
также есть форма, с помощью которой я пытаюсь копировать/перемещать данные из одной таблицы в другую.
вот часть кода, которая не работает:

SQL
1
2
3
4
5
SET cmd = NEW ADODB.Command
    cmd.ActiveConnection = CurrentProject.Connection
    cmd.CommandText = "INSERT INTO dbo_PLANNING_DATA_VERSIONS_STORAGE ( VERSION, MONTH_DATE, MONTH_NAME, MONTH_NUM, YEAR, DIVISION, DO, CHANNEL, CUSTOMER_ID, ADRESS_ID, CUSTOMER_NAME, CUSTOMER_SUBTYPE, SALESPERSON_ID, NET_NAME, KAM_NAME, PROJECT, BRAND, BRANDSIZE_ID, BRANDVOL_NAME, TONS, LITERS, RUBLES, QUANTITY) SELECT VERSION, MONTH_DATE, MONTH_NAME, MONTH_NUM, YEAR, DIVISION, DO, CHANNEL, CUSTOMER_ID, ADRESS_ID, CUSTOMER_NAME, CUSTOMER_SUBTYPE, SALESPERSON_ID, NET_NAME, KAM_NAME, PROJECT, BRAND, BRANDSIZE_ID, BRANDVOL_NAME, TONS, LITERS, RUBLES, QUANTITY FROM dbo_PLANNING_DATA_VERSIONS WHERE Version=[?];"
    cmd.CommandType = adCmdText
    SET rst = cmd.Execute(w, Parameters:=Array(Me.lb_vers_master.ItemData(varItm_master)))
пишет, что "ошибка синтаксиса в инструкции insert into".
При этом такой же запрос, написанный просто в конструкторе access, нормально работает. Более того этот код работает с таблицами, которые находятся локально в access. То есть проблема именно с таблицами с sql server'а, прилинкованными к бд аксес

Вопрос:

какие библиотеки подключить? что поменять в коде, чтобы он работал?

Спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.01.2013, 14:28
Ответы с готовыми решениями:

Запуск SQL-запроса через VBA
У меня ситуёвина следующая... как я не мучался ниче придумать так и не смог. Вообщем нужна кнопка...

Запуск процедуры SQL Server через VBA
Уважаемые форумчане, кто подскажет можно ли при помощи VBA запустить процедуру SQL Server?

Добавление записи в конец SQL запроса Access через VBA
Имеется запрос "Количество" в Access следующего содержания SELECT count(*) FROM Фрукты WHERE...

Access 2007 запрос sql из VBA
Доброго дня. Начали делать базу. Столкнулся с задачей создания формы отражающей результаты...

3
Эксперт MS Access
7442 / 4576 / 301
Регистрация: 12.08.2011
Сообщений: 14,239
30.01.2013, 02:59 2
T-SQL
1
2
3
4
5
6
7
8
9
10
INSERT INTO dbo_PLANNING_DATA_VERSIONS_STORAGE 
( VERSION, MONTH_DATE, MONTH_NAME, MONTH_NUM, YEAR,  DIVISION, DO, CHANNEL, CUSTOMER_ID, 
ADRESS_ID, CUSTOMER_NAME, 
CUSTOMER_SUBTYPE, SALESPERSON_ID, NET_NAME, KAM_NAME,
 PROJECT, BRAND, BRANDSIZE_ID, BRANDVOL_NAME, TONS, LITERS, RUBLES, QUANTITY) 
SELECT VERSION, MONTH_DATE, MONTH_NAME, MONTH_NUM, YEAR, DIVISION, DO, CHANNEL, C
USTOMER_ID, ADRESS_ID, CUSTOMER_NAME, 
CUSTOMER_SUBTYPE, SALESPERSON_ID, NET_NAME, KAM_NAME, PROJECT, BRAND, BRANDSIZE_ID, 
BRANDVOL_NAME, TONS, LITERS, RUBLES, 
QUANTITY FROM dbo_PLANNING_DATA_VERSIONS WHERE Version=[?];
1. YEAR - резервное слово в VBA http://allenbrowne.com/AppIssueBadWord.html#Y
2. Сделайте debug.print cmd.CommandText и посмотрите результат в окне immеdiate.
3. Возможно у вас есть дробные числа и требуется их преобразовать str(), чтобы обойти запятую.
1
0 / 0 / 0
Регистрация: 16.09.2011
Сообщений: 4
30.01.2013, 15:45  [ТС] 3
alvk, вы абсолютно правы насчет YEAR - квадратные ковычки в запросе [YEAR] решили проблему.
Спасибо!

Однако сразу возник подобный вопрос, но только с кодом на удаление данных:

SQL
1
2
3
cmd.CommandText = "DELETE * FROM dbo_PLANNING_DATA_VERSIONS WHERE Version=[?];"
                    cmd.CommandType = adCmdText
                    SET rst = cmd.Execute(w, Parameters:=Array(Me.lb_vers_master.ItemData(varItm_master)))
подобные запросы вообще не отрабатываются в аксесе, даже созданные в конструкторе.
ошибка одинакова - "невозможно удаление записей из указанных таблиц".
заметил также, что аксес выполняет запросы на удаление данных только из тех таблиц sql server'а, в которых заданы ключевые поля, иначе рапортует об вышеуказанной ошибке.
Может, знаете, как обойти эту проблему? (ключевые поля задать не получится)
0
Эксперт MS Access
7442 / 4576 / 301
Регистрация: 12.08.2011
Сообщений: 14,239
31.01.2013, 02:21 4
Цитата Сообщение от Sergey_Rad Посмотреть сообщение
ключевые поля задать не получится
Обойти это невозможно на сервере, но ключевые поля просто обязаны быть в таблице. Что вам мешает их создать? Если уж так невтерпёж, то используйте временные таблицы локально, т.е. в mdb, если у вас не adp, иначе положите mdb рядом с adp и обращайтесь к ней.
0
31.01.2013, 02:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.01.2013, 02:21
Помогаю со студенческими работами здесь

access 2007 + sql запрос + vba
накидайте код, пажалуйста :) задача: в vba запилить sql запрос select field1 from table where...

Как настроить MS SQL Server, чтобы через Access, можно было редактировать таблицы MS SQL Server?
ВОПРОС: Как настроить MS SQL Server, чтобы через Access, можно было редактировать таблицы MS...

Подключить к access 2007 БД с sql server 2005
нужно создать таблицы, связь между ними в MS SQL server и потом подключится к ним с акцесса и...

MS SQL Server Express 2008 R2 SP1 + MS Access 2007
Тема довольно избитая, но решения из гугла как-то не помогли, может я что не так делаю. Не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru