-Поиск по дневнику

Поиск сообщений в rss_sql_ru_access_programming

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 16.03.2006
Записей:
Комментариев:
Написано: 4


Как выполнить через ADO хранимую процедуру и получить результаты обработки назад в Access

Среда, 19 Ноября 2014 г. 18:53 + в цитатник
Разработано и используется приложение на MS Access 2003. В качестве базы данны используется MS SQL Server 2000. Для ведения базы данных разработано около 200 хранимых процедур, которые обеспечивают выполнение операций вставки и обновления. Каждая процедура имеет свой определенный набор параметров. По результатам выполнения процедуры возвращают код ошибки, и если он не 0 то и описание ошибки.

При попытке перехода на 2013 Access выясняется, что DAO больше не поддерживается. Т.е. код:
Set wrkODBC = CreateWorkspace("ODBCWorkspace7", CurrentUser, "", dbUseODBC)

Set cnnSQL = GetConnection(wrkODBC)

Set rs = cnnSQL.OpenRecordset(Zapros, dbOpenDynaset, 0),

где Zapros=Update1_01 1,1,’Delivery’,1010, и т. д. Запрос формируется программным путем.

Больше не работает. Предлагают использовать ADO. Но использовать напрямую, указывая, что выполняется хранимая процедура – кошмар. Описывать вручную все параметры для каждой процедуры – безнадежный случай. Любое изменение структуры и лезть в код?

Пробовал два варианта.
Первый.

Set cnn = New ADODB.Connection
StrConn = "Provider=SQLOLEDB;" & "Data Source=MDB;" &
"Initial Catalog= Violations; Trusted_Connection=Yes;"
cnn.ConnectionString = StrConn
cnn.ConnectionTimeout = 15
cnn.CommandTimeout = 30
cnn.Open

Set CnnRecordset = cnn.Execute(Zapros)

Процедура отрабатывает. Данные в БД изменяются. Но результаты обрботки не возвращаются.
Оператор While Not CnnRecordset.EOF не работает, так как набор не открыт.

Второй.

Set cnn = New ADODB.Connection
Set Cmd = CreateObject("ADODB.Command")
Cmd.ActiveConnection = cnn
Cmd.CommandType = adCmdUnknown
Cmd.CommandText = Zapros
Set CnnRecordset = CreateObject("ADODB.Recordset")
On Error GoTo AdoError
Set CnnRecordset = Cmd.Execute()

Процедура отрабатывает. Данные в БД изменяются. Но результаты обрботки не возвращаются.
Оператор While Not CnnRecordset.EOF не работает, так как набор не открыт.

Как добиться и выполнения процедуры и возврата результатов выполнения. Возврат параметров выполняется по команде Return.

http://www.sql.ru/forum/1127537/kak-vypolnit-cherez-ado-hranimuu-proceduru-i-poluchit-rezultaty-obrabotki-nazad-v-access


 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку