Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: обновление recordset
 
 автор: helena_   (19.12.2012 в 14:36)   личное сообщение
 
 

Dim fld As ADODB.Field
Dim i As Integer
Dim ctl As Control
Dim frmCurr As Form
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
Dim prm As ADODB.Parameter

Set cnn = New ADODB.Connection
cnn.Open "file Name=" & CurrentProject.Path & "\соединение.udl"
Set рекодсет = New ADODB.Recordset
рекодсет.CursorLocation = adUseClient
рекодсет.LockType = adLockOptimistic


Rem рекодсет.Open "ХанимаяПроцедура", cnn, adOpenKeyset, adLockBatchOptimistic

Set cmd.ActiveConnection = cnn
cmd.CommandText = "ХанимаяПроцедура"
cmd.CommandType = adCmdStoredProc
Set рекодсет = cmd.Execute

из рекодсет (данные хран проц) заношу значен полей в свободную форму
Set frmCurr = Form_Свободная
For Each fld In рекодсет.Fields
For Each ctl In frmCurr
If ctl.Name = fld.Name Then
frmCurr(ctl.Name).Value = fld.Value
End If
Next ctl
Next fld

далее изменяю знач полей свободной формы и пытаюсь записать измененные данные в рекордсет
For Each fld In рекодсет.Fields
For Each ctl In frmCurr
If ctl.Name = fld.Name And ctl.Name <> "код" Then
рекодсет(ctl.Name).Value = frmCurr(ctl.Name).Value
рекодсет.UpdateBatch
End If

Next ctl
Next fld

Подскажите, почему если использовать
рекодсет.Open "ХанимаяПроцедура", cnn, adOpenKeyset, adLockBatchOptimistic
далее обновление рекодсет происходит нормально,

а если Set рекодсет = cmd.Execute, то выдается сообщение текущий объект не поддерживает обновление. Это связано с ограничением поставщика или с выбранным типом блокировки

  Ответить  
 
 автор: Анатолий (Киев)   (19.12.2012 в 17:31)   личное сообщение
 
 


Execute Method (ADO Connection)

The returned Recordset object is always a read-only, forward-only cursor. If you need a Recordset object with more functionality, first create a Recordset object with the desired property settings, then use the Recordset object's Open method to execute the query and return the desired cursor type.

ИМХО, это справедливо и для Command.Execute, хотя в справке явно не указано.
Проверьте, что возвращает св-во CursorType полученного Recordset-а.

  Ответить  
 
 автор: helena_   (20.12.2012 в 10:30)   личное сообщение
 
 

MsgBox Рекордсет.RecordCount возвращает -1

MsgBox Рекордсет.CursorType возвращает 0

  Ответить  
 
 автор: Анатолий (Киев)   (20.12.2012 в 11:48)   личное сообщение
 
 


Constant: adOpenForwardOnly = 0
Default.
Uses a forward-only cursor. Identical to a static cursor, except that you can only scroll forward through records.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList