powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как выполнить хранимую процедуру.
16 сообщений из 16, страница 1 из 1
Как выполнить хранимую процедуру.
    #32685910
Borys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я подключаюсь, с помощью Access, к MS SQL Server 2000. У меня база работает таким образом, что с одной записью не могут работать более одного пользователя одновременно. До этого я писал подобные вещи на делфи или С++, и использовал при этом хранимую процедуру, которая находит индекс первой свободной(т.е. доступной) записи с номером больше данного.
Может кто-то подскажет, как выполнить хранимую процедуру и получить результат. И можно ли сделать, чтоб при нажатии на стандартную кнопку следующей записи (я имею в виду на форме) выполнялась моя процедура нахождения новой записи.
...
Рейтинг: 0 / 0
Как выполнить хранимую процедуру.
    #32685935
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CurrentProject.Connection.Execute "execute пой_гармонь"
...
Рейтинг: 0 / 0
Как выполнить хранимую процедуру.
    #32685938
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пусти поиск - забодало на один и тот-же вопрос цать раз отвечать
...
Рейтинг: 0 / 0
Как выполнить хранимую процедуру.
    #32688289
Borys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я создал кнопку. В коде функции нажатия есть строка:
Me.Form.Recordset.FindFirst "[M_ID]=5"
При выполнении которой, происходит ошибка. Сообщение пишет, что такого метода объект не поддерживает.
Целью этого всего было заставить переходить форму на запись со значением поля M_ID=5.
Что это может быть?
...
Рейтинг: 0 / 0
Как выполнить хранимую процедуру.
    #32688345
Borys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sorry, неправильно написал, я имел в виду
Me.Recordset.FindFirst "[M_ID]=5"
...
Рейтинг: 0 / 0
Как выполнить хранимую процедуру.
    #32688366
Borys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sorry, неправильно написал, я имел в виду
Me.Recordset.FindFirst "[M_ID]=5"
...
Рейтинг: 0 / 0
Как выполнить хранимую процедуру.
    #32688454
Фотография vma_mnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
me.recordset.movefirst
me.recordset.find "M_ID = " & 5
me.bookmark = me.recordset.bookmark
...
Рейтинг: 0 / 0
Как выполнить хранимую процедуру.
    #32690295
Borys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, часть проблемы решена.
У меня така еще проблема: пытаюсь получить данные из хп. Пишу в обработчике события (нажатие на кнопку):

Dim res As Integer
res = CurrentProject.Connection.Execute("execute getnext 1, 3").Fields(M_ID).Value

Пытался и так:
Dim res As String

И так:
res = CurrentProject.Connection.Execute("execute getnext 1, 3").Fields(0).Value

Ошибка:3265
Item cannot be found in the collection corresponding to the requested name or ordinal.
Я понимаю, что, наверняка, что-то очень тупое не написал. Я даже VBA не знаю.
...
Рейтинг: 0 / 0
Как выполнить хранимую процедуру.
    #32690315
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А покажи-ка ХП...
...
Рейтинг: 0 / 0
Как выполнить хранимую процедуру.
    #32690319
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как выполнить хранимую процедуру.
    #32690320
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как выполнить хранимую процедуру.
    #32690324
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Shuhard
Вряд ли у него ХП рекордсет возвращает, судя по ошибке.
Либо return, либо output parameter.
...
Рейтинг: 0 / 0
Как выполнить хранимую процедуру.
    #32690465
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
... использовал при этом хранимую процедуру, которая находит индекс первой свободной(т.е. доступной) записи с номером больше данного.

утверждает что SP работает и возвращает Int
...
Рейтинг: 0 / 0
Как выполнить хранимую процедуру.
    #32692298
Borys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет, спасибо за отзывы.
Я изменил процедуру так, чтоб она возвращала Recordset.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE PROCEDURE getnext @id bigint, @oper int
AS
declare @numb int
SELECT top  1  @numb =M_ID FROM main WHERE M_STATUS =  0  and M_ID >  @id
EXECUTE setopen @numb, @oper
SELECT M_ID, M_PHONE, M_NAME, M_T_AGE, M_T_PREFTIME FROM main WHERE M_ID=@numb
GO
Всеравно не работает. Та же ошибка.
Списибо за ссылки. Я многие из них уже видел. Просмотрев их пришел к выводу, что вы советуете использовать ADO(интересно что я использовал до этого, DAO?) со всеми ADODB.Connection, ADODB.Command...
...
Рейтинг: 0 / 0
Как выполнить хранимую процедуру.
    #32692445
Borys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, еще раз.
Попробовал сделать через адо. Вроде работает.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Dim res As Integer
    Dim cmd As ADODB.Command
    Dim prm As ADODB.Parameter
    Dim rst As ADODB.Recordset
    Set rst = New ADODB.Recordset
    Set cmd = New ADODB.Command
    Set cmd.ActiveConnection = CurrentProject.Connection
    cmd.CommandText = "getnext"
    cmd.CommandType = adCmdStoredProc
    Set prm = New ADODB.Parameter
    Set prm = cmd.CreateParameter("id", adInteger, adParamInput,  10 , Me.M_ID)
    cmd.Parameters.Append prm
    Set prm = cmd.CreateParameter("oper", adInteger, adParamInput,  10 , Me.OPER_ID)
    cmd.Parameters.Append prm
    Set rst = cmd.Execute
    res = rst.Fields( 0 ).Value
    MsgBox res
У меня есть еще пару вопросиков (я хочу разобраться и все подитожить для тех, кто возможно будет искать что-то аналогичное).
1) Что означает третий параметр в функции CreateParameter
2) Когда я пытался вытянуть значение первой строки первого столбика Resordset-a я написал
Код: plaintext
1.
2.
rst.MoveFirst
res = rst.Fields( 0 ).Value
Появилась ошибка на rst.MoveFirst, мол неззя т.к. объект закрыт. Тогда я сделал
Код: plaintext
1.
2.
3.
4.
rst.Open
rst.MoveFirst
res = rst.Fields( 0 ).Value
rst.Close
Ошибка не исчезла. Когда я сталкивался с такой проблемой в С++ с объектом CAdodc я писал в хранимой процедуре, в начале SET NOCOUNT ON. Тут, сделав то же самое, ничего не изменилось.
Мне подходит вариант, который я привел САМЫМ первым т.к. у меня возвращается только одна запись. Что делать в общем случае (когда необходимо получить n-тый столбик m-той записи)?
...
Рейтинг: 0 / 0
Как выполнить хранимую процедуру.
    #32694494
Borys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По логике вещей третье значение ф-ции должно указывать размер поля. Но 10 для Integer это странно (я понимаю 4 или 8). Я взял из примера где тоже передавалось Integer.
Поправте если ошибаюсь.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как выполнить хранимую процедуру.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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