Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Access без спросу вызывает процедуру / 9 сообщений из 9, страница 1 из 1
13.01.2005, 11:21:22
    #32862725
roman10
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access без спросу вызывает процедуру
Задача: запустить ХП. Делаю так:

Код: 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
13.01.2005, 12:29:51
    #32862948
roman10
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access без спросу вызывает процедуру
Неужели никто не сталкивался?

Мдя... вот задачка-то...
Я хотел бы попросить кого либо из присутсвующих (желательно владельцев 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
13.01.2005, 13:04:13
    #32863041
Dmitry Biryukov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access без спросу вызывает процедуру
в общем-то вызов ХП делается в корне не так
вот шаблон:
Код: plaintext
1.
2.
3.
4.
set cmd = new adodb.command
set cmd.activeconnection = cnn
cmd.parameters.append cmd.CreateParameter(...)
cmd.execute
...
Рейтинг: 0 / 0
13.01.2005, 13:06:23
    #32863048
Dmitry Biryukov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access без спросу вызывает процедуру
точнее так
Код: 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
13.01.2005, 13:08:14
    #32863054
Программист-Любитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access без спросу вызывает процедуру
Если не надо возвращать выходные параметры, то достаточно конкатенацией склеить строку:

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

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

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

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

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

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

лучше не лениться и создавать параметры. в этом случае ХП вызывается через RPC, нет проблем с кавычками, датами и языковыми настройками.
...
Рейтинг: 0 / 0
13.01.2005, 15:20:51
    #32863426
Shuhard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Access без спросу вызывает процедуру
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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Access без спросу вызывает процедуру / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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