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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Работа с отсоединенным набором записей в Access 2003
 
 автор: Berezkin   (17.11.2008 в 04:27)   личное сообщение
 
 

Доброго времени суток.
Проблема следующая:
В Access 2003 имеется форма
В модуле формы объявлены переменные:
Dim rs As New ADODB.Recordset, cnn As New ADODB.Connection
При открытии формы:
Private Sub Form_Open(Cancel As Integer)
cnn.ConnectionString = "LPU" 'Источник данных ODBC
cnn.Open
rs.CursorLocation = adUseClient
rs.Open "SELECT IDKARTA, DATBEG FROM KARTA , cnn, adOpenKeyset, adLockBatchOptimistic 'IDKARTA - ключ
rs.ActiveConnection = Nothing
Set Me.Recordset = rs
End Sub
Работа, изменение данных.
При нажатии кнопки хочу записать изменения:
Private Sub Кнопка5_Click()
rs.ActiveConnection = cnn
Set rs = Me.RecordsetClone
rs.UpdateBatch
End Sub
Проблема:
При нажатии кнопки сохраняются изменения только в непосредственно редактируемой записи. Внесенные изменения в несколько записей не сохраняются. Надеялся увеличить быстродействие формы, но наверное метод UpdateBatch на это не расчитан?

  Ответить  
 
 автор: osmor   (17.11.2008 в 08:53)   личное сообщение
 
 

Мoжет дело в ODBC?
Нельзя "LPU" 'Источник данных ODBC - заменить на OLEDB?

  Ответить  
 
 автор: alecks_lp   (17.11.2008 в 22:05)   личное сообщение
 
 

ODBC провайдер поддерживает UpdateBatch, это не должно валить записи


Set rs = Me.RecordsetClone


а вот это зачем? - непонятно

  Ответить  
 
 автор: Berezkin   (25.11.2008 в 06:51)   личное сообщение
 
 

В общем то "Set rs = Me.RecordsetClone ", наверное, действительно лишнее. Но результат остается прежний если оставить просто "rs.UpdateBatch"
База данных в Sybase Aniwhere 5.0. По-моему, кроме как через ODBC, к ней не присоединиться.

  Ответить  
 
 автор: alecks_lp   (25.11.2008 в 09:52)   личное сообщение
 
 

Не работал UpdateBatch в Sybase Aniwhere 5.0., только SQLServer. Попробую дать рекомендации:
- проверить после открытия рекордсета Debug.Print rs.LockType. Если провайдер не поддерживает пакетное обновление, то тип блокировки будет установлен по умолчанию
- сохранить (UpdateBatch) рекордсет с несколькими изменёнными(добавленными, удалёнными) Вашей формой записями в файл, а потом открыть и посмотреть, есть ли то что Вам нужно, т.е. убедиться что форма работает
- перед открытием пропиcать rs.UniqueTable = "KARTA"
- переходить на SQLServer

  Ответить  
 
 автор: Berezkin   (10.12.2008 в 04:35)   личное сообщение
 
 

Добрый день. Выполнил рекомендации.
1. rs.LockType=4
2. Сохранил рекордсет в файл - внесенные изменения сохраняются.
3. Прописал me.UniqueTable = "KARTA"
4. Сделал таблицу в SQL Server
Результат при работе в таблице в SQL Server такой же. Обновить несколько записей, измененных в форме не удалось, хотя, если пройтись в цикле по рекордсету:
Dim i As Integer
rs.MoveLast
rs.MoveFirst
For i = 1 To rs.RecordCount
rs!DATBEG = "какое-то значение"
rs.MoveNext
Next i
rs.ActiveConnection = cnn ' Восстанавливаем соединение
rs.UpdateBatch ' Пакетное обновление
Все прекрасно обновляется.
Думаю, что пакетное обновление через форму в ACCESS просто не реализовано...

Появились идеи насчет метода Recync. Кажется что-то получается...

Ничего не получается. После первого вызова Recync данные в форме приводятся в соответствие с базой данных, т. е. все все изменения отменяются (или остаются. если параметр resyncvalues=adResyncUnderlyingValues). А в последующем форма работает без всякого UpdateBatch - все изменения сохраняются.
Не хочется отказыватся от этой идеи поскольку имею дело с большими базами данных (тем более Sybase 5.0). Быстродействие оставляет желать лучшего (мягко сказано).

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