powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Access без спросу вызывает процедуру
9 сообщений из 9, страница 1 из 1
Access без спросу вызывает процедуру
    #32862725
roman10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача: запустить ХП. Делаю так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    Dim catCurr As New ADOX.Catalog
    Dim cmdCurr As New ADODB.Command

    Dim rstCurr  As New ADODB.Recordset
    Dim strSql As String
    
    Set catCurr.ActiveConnection = CurrentProject.Connection
    Set cmdCurr = catCurr.Procedures("qryMyProc").Command
    cmdCurr.CommandText = "exec sp_my_proc " + ' куча параметров
    Set catCurr.Procedures("qryMyProc").Command = cmdCurr
    Set cmdCurr = Nothing
    Set catCurr = Nothing

    strSql = "SELECT * FROM qryMyProc"
    rstCurr.Open strSql, CurrentProject.Connection, adOpenStatic, adLockReadOnly

    . . .

Так вот, с помощь профайлера обнаруживаю, что на строчке
Set catCurr.Procedures("qryMyProc").Command = cmdCurr
Акссесс ее запускает. А потом, когда я ее запускаю явно, то процедура запускается второй раз!

Собсно, в чем тут дело, не могу понять... Может, кто-нибудь сталкивался с подобным... Не может же Акцесс исполнять процедуры когда ему вздумается.
Использую Access2000 + MSSQL2000
...
Рейтинг: 0 / 0
Access без спросу вызывает процедуру
    #32862948
roman10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неужели никто не сталкивался?

Мдя... вот задачка-то...
Я хотел бы попросить кого либо из присутсвующих (желательно владельцев AC2000) попробовать сделать следующее:

1) созадть новый MDB;
2) создать новый запрос тип "К серверу" (pass-through), назвать его, к примеру, test.
3) в теле запроса написть что-нибудь, ну пусть "asdf";
4) настроить запрос на свой SQLServer;
5) создать форму, кинуть кнопку и в OnClick написать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
        Dim catCurr As New ADOX.Catalog
        Dim cmdCurr As New ADODB.Command
    
        Set catCurr.ActiveConnection = CurrentProject.Connection
        Set cmdCurr = catCurr.Procedures("test").Command
        cmdCurr.CommandText = "SELECT @@VERSION"
        Set catCurr.Procedures("test").Command = cmdCurr
        Set cmdCurr = Nothing
        Set catCurr = Nothing
6) запустить Tracer
7) наконец нажать кнопку, и проследить, какие сообщения появляются в трэйсере. У меня обязательно вылезал BatchCompleted: "asdf", хотя явно я процедуру не запускал.
8) сообщить об этом в эту ветку.

Заранее большое спасибо
...
Рейтинг: 0 / 0
Access без спросу вызывает процедуру
    #32863041
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем-то вызов ХП делается в корне не так
вот шаблон:
Код: plaintext
1.
2.
3.
4.
set cmd = new adodb.command
set cmd.activeconnection = cnn
cmd.parameters.append cmd.CreateParameter(...)
cmd.execute
...
Рейтинг: 0 / 0
Access без спросу вызывает процедуру
    #32863048
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
точнее так
Код: plaintext
1.
2.
3.
4.
5.
6.
set cmd = new adodb.command
set cmd.activeconnection = cnn
cmd.commandtype=...
cmd.commandtext=...
cmd.parameters.append cmd.CreateParameter(...)
cmd.execute
...
Рейтинг: 0 / 0
Access без спросу вызывает процедуру
    #32863054
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не надо возвращать выходные параметры, то достаточно конкатенацией склеить строку:

CurrentProject.Connection.Execute "exec myproc " & Cstr(par1) & ", " & ...
...
Рейтинг: 0 / 0
Access без спросу вызывает процедуру
    #32863164
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а даты как передавать или строки с кавычками?
это ж изврат будет..
Код: plaintext
1.
2.
cnn.Execute "exec myproc " & Replace(par1,"'","''") & _
", CONVERT(DATETIME, '" & Year(parDate) & "-" & Month(parDate) & "-" & Day(parDate) & "', 102)"
...
Рейтинг: 0 / 0
Access без спросу вызывает процедуру
    #32863243
roman10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эти способы, похоже, работают только в ADP. Или нет? У меня на Execute вылазит ошибка, что-то вроде "Ядро базы данных Microsoft Jet не может найти входную таблицу или запрос тут имя процедуры".

Оно и понятно, ведь CurrentProject.Connection указывает на MDB-шник, а он знать не знает, что такое хранимые процедуры.

На самом деле до меня уже доперло, что я неправильно вызываю ХП. Похоже для этого следует использовать DAO, открывать дополнительное соединение в режиме ODBC Direct и делать все через него. Правда, не очень здорово, что одному клиенту нужно более одного соединения.
...
Рейтинг: 0 / 0
Access без спросу вызывает процедуру
    #32863373
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПравда, не очень здорово, что одному клиенту нужно более одного соединения.

Ничего страшного, аксесс (ADO точнее) клонирует соединения сам пачками.

авторЕсли не надо возвращать выходные параметры, то достаточно конкатенацией склеить строку:

CurrentProject.Connection.Execute "exec myproc " & Cstr(par1) & ", " & ...

лучше не лениться и создавать параметры. в этом случае ХП вызывается через RPC, нет проблем с кавычками, датами и языковыми настройками.
...
Рейтинг: 0 / 0
Access без спросу вызывает процедуру
    #32863426
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roman10Оно и понятно, ведь CurrentProject.Connection указывает на MDB-шник
Connection бывают и не CurrentProject
Код: plaintext
1.
2.
3.
4.
Dim MyConn As ADODB.Connection
Set MyConn = New ADODB.Connection
MyConn.Open "Provider=SQLOLEDB;Data Source=192.168.0.11;Initial Catalog=Northwind;User ID=sa;Password=xxxx;"
MyConn.Execute ("Inna") ' хранимка
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Access без спросу вызывает процедуру
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]