powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Код VB Access 2000 для получения результатов Strored Procedure
5 сообщений из 5, страница 1 из 1
Код VB Access 2000 для получения результатов Strored Procedure
    #32005494
Ligor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите с кодом по VB Access 2000 ( недостаточно опыта и документации)
для получения результатов работы SP в форме ввода :

Alter PROCEDURE имяПроц @iz int , @sk int , @k Numeric OUTPUT AS

SELECT @k=...
Return

Код VB :
Dim k As Double, rs As New ADODB.Recordset
Dim Cn As New ADODB.Connection, Cmd As New ADODB.Command
Dim prm1, prm2, prm3 As New ADODB.Parameter

Cn.Open "DSN=DSN", "PUBS"
Set Cmd.ActiveConnection = Cn
Cmd.CommandText = "имяПроц"
Cmd.CommandType = adCmdStoredProc
Cmd.Prepared = True
Set prm1 = Cmd.CreateParameter("iz", adInteger, adParamInput, , 1)
Cmd.Parameters.Append prm1
Set prm2 = Cmd.CreateParameter("sk", adInteger, adParamInput, , 1)
Cmd.Parameters.Append prm2
Set prm3 = Cmd.CreateParameter("kol", adDecimal, adParamOutput, , 0)
Cmd.Parameters.Append prm3

Set rs = Cmd.Execute
Вызывает сообщение [Microsoft][ODBC SQL Server Driver]Недопустимое значение масштаба

Спасибо.
...
Рейтинг: 0 / 0
Код VB Access 2000 для получения результатов Strored Procedure
    #32005499
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не Double а Currency, и не Set rs = Cmd.Execute а просто Cmd.Execute

Кроме того (но это уже к ошибке не относится): а зачем ты юзаеш OLE DB провайдера для ODBC? или у тебя не MSSQL? Если MS, то используй SQLOLEDB (Connection Object в BOL)
...
Рейтинг: 0 / 0
Код VB Access 2000 для получения результатов Strored Procedure
    #32005501
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зайди сюда: http://nsa.chat.ru/know.html
и пролистай до фразы "... для того, чтобы в проекте Access-2000 программно запустить хранимую процедуру с параметрами..."
...
Рейтинг: 0 / 0
Код VB Access 2000 для получения результатов Strored Procedure
    #32005512
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вот, дома за бутылочкой пивка собрал твой пример:

Dim cn As New ADODB.Connection, cmd As New ADODB.Command
cn.Open "Provider=sqloledb;Data Source=YourServerName;Initial Catalog=Pubs;User Id=sa;Password=;"
Set cmd.ActiveConnection = cn
cmd.CommandText = "имяПроц"
cmd.CommandType = adCmdStoredProc
cmd.Parameters.Append cmd.CreateParameter("@iz", adInteger, adParamInput, , 1)
cmd.Parameters.Append cmd.CreateParameter("@iz", adInteger, adParamInput, , 1)
cmd.Parameters.Append cmd.CreateParameter("@sk", adNumeric, adParamOutput)
cmd.Prepared = False
cmd.Execute
MsgBox cmd.Parameters("@sk")
Set cmd = Nothing
cn.Close
Set cn = Nothing

Установка Prepared в False заставляет сервер не делать SqlPrepare, что экономит время. Можно вообще не добавлять параметры, а сказать cmd.Parameters.Refresh, и коллекция заполнится сама, нужно будет лишь указать значения входных параметров. Но это требует от сервера поиска и возврата атрибутов параметров, следовательно и замедляет выполнение и нагружает сервер, а потому неправильно (в профайлере хорошо видно чего это стоит!).
Можно делать как предлагает Garya, но это тоже неправильно, так как при adCmdText выполнение процедуры будет идти через ExecuteSQL, что в данном случае совершенно не нужно и также по напрасну расходует ресурсы сервера и замедляет выполнение. При первом вызове ExecuteSQL строит план выполнения запроса (при последующих вызовах если в кэше сохранится план выполнения, он будет использован ExecuteSQL повторно). Но так как план выполнения процедуры хранится вместе с ней, ExecuteSQL вообще не нужен.

Удачи!
...
Рейтинг: 0 / 0
Код VB Access 2000 для получения результатов Strored Procedure
    #32005530
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще одно замечание - лучше явно указать размер Numeric и на сервере и на клиенте, либо, как я уже говорил, использовать на клиенте Currency как более универсальный тип.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Код VB Access 2000 для получения результатов Strored Procedure
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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