Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Unbound forms и свойство Recordset  [new]
Tamara
Member

Откуда:
Сообщений: 90
Люди! Помогите, пожалуйста, кто знает!
Есть аппликация на Акцессе, работающая с базой данных на SQL. В аппликации есть большая форма с кучей линкованных подформ.
Есть опасение, что в организации, куда будем ставить, медленная сеть. Поскольку линкованные подформы создают много подключений
по сети (может, это неверно?!) , решили сделать формы Unbound с помощью свойства форм - Recordset , ADO и транзакций.
Сделала для примера одну главную форму с подформой. На кнопку Edit начала транзакцию, на кнопку OK - подтвердила, на кнопку Cancel
сделала Rolback. Изменения на сервер действительно не послались. Но в результате всяких комбинаций Requery главная форма и подформа
нормально не обновляются и дальше начинаются глюки. Единственный способ - закрыла и заново открыла ADO рекордсеты,
которые сидят под обеими формами. Это время! Может есть другой, более умный способ? Ведь подформ будет штук 5....
Кроме этого, как быть с периодическим обновлением данных в формах ? Ведь если в опциях Акцесса поставить определенный ODBC
refresh interval - работать он не будет, т.к. под формами нет RecordSource?!?!?! Значит, периодически снова открывать и закрывать
рекордсеты, и через какой интервал??? В общем, если не совсем надоела, приведу кусок кода...


Private Sub Form_Load()
Set cn = New ADODB.Connection
.........
Set f_main = New ADODB.Recordset
f_main.CursorLocation = adUseClient
f_main.Open "Select * from titles Order By title_no", cn, adOpenKeyset, adLockOptimistic
Set Me.Recordset = f_main
''''''''Code for SubForm
Set f_authors = New ADODB.Recordset
f_authors.CursorLocation = adUseClient
f_authors.Open "Select * FROM authors INNER JOIN [titlesauthors] ON authors.author_no = [titlesauthors].author_no", cn, adOpenKeyset, adLockOptimistic
Set Me.subAuthors.Form.Recordset = f_authors
Me.subAuthors.Form.UniqueTable = "authors"
fl_load = 1
End Sub

Private Sub Form_Current()
If fl_load = 1 Then
f_authors.Filter = "title_no_pass = " & Me!txtTitle_no
Set Me.subAuthors.Form.Recordset = f_authors
f_authors.Filter = adFilterNone
End If
End Sub

Private Sub comEdit_Click()
.....
cn.BeginTrans
End Sub

Private Sub comOK_Click()
Dim rs As ADODB.Recordset, rs1 As ADODB.Recordset
Me.Recordset!title = Me.txtTitle
Me.Recordset.Update
Me.subAuthors.Form.Recordset!author_name = Me.subAuthors.Form.txtauthor_name
Me.subAuthors.Form.Recordset.Update

cn.CommitTrans
.......
End Sub

Private Sub comCancel_Click()

cn.RollbackTrans

bkm = Me.Recordset.Bookmark
f_main.Close
f_authors.Close
f_main.Open "Select * from titles Order By title_no", cn, adOpenDynamic, adLockOptimistic
f_authors.Open "Select * FROM authors INNER JOIN [titlesauthors] ON authors.author_no = [titlesauthors].author_no", cn, adOpenKeyset, adLockOptimistic
Set Me.Recordset = f_main
Me.Bookmark = bkm
End Sub
28 июн 04, 14:11    [768975]     Ответить | Цитировать Сообщить модератору
 Re: Unbound forms и свойство Recordset  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
Простой совет...
1. не тащить на клиента все записи.... (set rowcount ...)
2. использовать в к-ве источников sp с параметрами ограничивающими кол-во возвр-х записей(типа фильтры)
3. накой бедному userу видеть все ваши подформы и другой хлам... это только будет его(польз.) раздражать при реальной работе ... (открывать при необходимости... кнопка detail - хлюп - открылась форма с дет-ой инфой по записи ... )
4. каждому действу - своя процедура.... (I/U/D) и, если возможно - форма...
5. от вашей работы с транзакциями волосы начинают шевелиться... везде... этот метод хорош для однопользовательской работы...

Не обижайтесь... Скорее всего я где-то не прав... А Unbound формы - действительно хорошо...
28 июн 04, 18:32    [769714]     Ответить | Цитировать Сообщить модератору
 Re: Unbound forms и свойство Recordset  [new]
Tamara
Member

Откуда:
Сообщений: 90
Спасибо, попробую сделать по другому, как то ограничить количество записей... Но тогда придется каждый раз менять RecordSource формы - это время... Или сделаю под подформами временные таблицы... А подформы, к сожалению, убрать не могу - слишком много на этом завязано - как святое...
28 июн 04, 19:02    [769763]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить