|
|
|
Выполнение хранимой процедуры с помощью Command
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Я вот мучаюсь над таким вопросом, впервые работая с хранимыми процедурами, поэтому мой вопрос может оказаться тривиальным. При использовании объекта Command для получения выборки из хранимой процедуры запрос не поддерживает закладки (ADO_rs.Supports(adBookmark)=False) и перемещение (ado_rs.moveNext), хотя все параметры запроса, которые могут на это влиять, вроде бы заданы. Хранимая процедура: CREATE PROCEDURE MyProc @ID int AS SELECT MyTable.ID FROM MyTable WHERE MyTable.ID=@ID GO Обработка результата в Access2000: Public MyCnn As New ADODB.Connection Public Ado_Rs As New ADODB.Recordset Dim MyBookMark As Variant 1-й вар-т : Ado_Rs.Open "Exec MyProc @ID=" & Me.ID, MyCnn, adOpenKeyset, adLockOptimistic, adCmdText 2-й вар-т (через Command): Public Mycmd As New ADODB.Command Public MyParam As New ADODB.Parameter Mycmd.ActiveConnection = MyCnn Mycmd.CommandType = adCmdStoredProc Mycmd.CommandText = "MyProc" MyParam.Direction = adParamInput MyParam.Type = adInteger MyParam.Size = 4 Mycmd.Parameters.Append MyParam MyParam.Value = Me.ID Ado_Rs.CursorType = adOpenKeyset Ado_Rs.LockType = adLockOptimistic Ado_Rs.Source = adCmdStoredProc Set Ado_Rs = Mycmd.Execute Далее для обоих вариантов MyBookMark = Ado_Rs.Bookmark Ado_rs.MovePrevious 1-й вариант работает, а второй нет :-( Вообще, каким образом лучше работать с набором записей, возвращаемых хранимой процедурой ? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2004, 16:27:32 |
|
||
|
Выполнение хранимой процедуры с помощью Command
|
|||
|---|---|---|---|
|
#18+
гм... а зачем во втором случае вы создаете какой-то объект Recordset, устанавливаете ему какие-то св-ва - если потом вы все равно делаете Set Ado_Rs = Mycmd.Execute, затирая тем самым ранее созданный объект со всеми его св-вами??? вместо этого надо Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2004, 16:38:36 |
|
||
|
Выполнение хранимой процедуры с помощью Command
|
|||
|---|---|---|---|
|
#18+
Действительно вар-т Set Ado_Rs.Source = Mycmd Ado_Rs.Open работает. Но непонятно как быть со свойствами "тип курсора" и "тип блокировки", которые, по-моему, должны быть такими Ado_Rs.CursorType = adOpenKeyset Ado_Rs.LockType = adLockOptimistic, тогда как если их не указать, то по умолчанию они будут равны adOpenForwardOnly и adLockReadOnly соответственно и по записи будет нельзя произвольно перемещаться и редактировать ее. Кроме того, в чем тогда отличие между 1) Set Ado_Rs.Source = Mycmd Ado_Rs.Open и 2) Set Ado_rs = command.Execute ? Почему тогда после 1)-го вар-та открытия запроса ADO_rs.movePrevious срабатывает, а после 2-го вар-та - выдает ошибку "Operation Is Not Allowed in this Context" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2004, 17:19:24 |
|
||
|
Выполнение хранимой процедуры с помощью Command
|
|||
|---|---|---|---|
|
#18+
Но непонятно как быть со свойствами "тип курсора" и "тип блокировки", которые, по-моему, должны быть такими Вот какими они должны быть - такими их и устанавливайте. Разумеется до открытия рекордсета Кроме того, в чем тогда отличие между 1) Set Ado_Rs.Source = Mycmd Ado_Rs.Open и 2) Set Ado_rs = command.Execute ? В том, что Execute возвращает Forward-Only Read-Only рекордсет. Который вы запоминаете поверх ранее настроенного Ado_Rs А раз Forward Only - то MovePrevios вы сделать не можете. О чем вам и говорится. Вообще непонятно - чего вам непонятно? Вы же не удивляетесь, что после исполнения кода: Код: plaintext 1. 2. Ну а теперь вместо SomeVariable подставте Ado_Rs, а вместо SomeFunction - Mycmd.Execute, и перестаньте удивляться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2004, 17:34:50 |
|
||
|
Выполнение хранимой процедуры с помощью Command
|
|||
|---|---|---|---|
|
#18+
авторВот какими они должны быть - такими их и устанавливайте. Разумеется до открытия рекордсета Можно и во время открытия. Главное - правильно установить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2004, 17:39:37 |
|
||
|
Выполнение хранимой процедуры с помощью Command
|
|||
|---|---|---|---|
|
#18+
VIGМожно и во время открытия угу VIGГлавное - правильно установить. главное - не пользоваться Execute, которому пофигу на все, что до этого было установлено :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2004, 17:42:13 |
|
||
|
Выполнение хранимой процедуры с помощью Command
|
|||
|---|---|---|---|
|
#18+
авторглавное - не пользоваться Execute, которому пофигу на все, что до этого было установлено :)угу :) Это я понял "давно тому назад" ,когда перешел на АДО. А так же то ,что xелпы пишут для того чтобы их читали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2004, 17:56:47 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32702770&tid=1671672]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
37ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 297ms |

| 0 / 0 |
