powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / ADO рекордсет как источник формы: как сделать клон?
37 сообщений из 37, показаны все 2 страниц
ADO рекордсет как источник формы: как сделать клон?
    #32610656
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема следующая: Есть формочка для персональных данных. В ней табличная субформа, в которой можно видеть суммирование по выделению. Есть процедура, которая делала клон рекордсета формы и по нему просчитывала сумму по выделенным ячейкам. Процедура правильно работала и при наложении на субформу фильтров. Я сделала открывание формы персональных данных как клон формы (по Гетцу), а субформе подвесила источник АДО рекордсет. Теперь я не могу использовать клон рекордсета этой субформы как источник данных для процедуры суммирования, а то, что может вернуть повторно вызванная процедура, не отображает наложенного вручную на форму фильтра. Кроме того, повторные вызовы процедуры просто тормозят.

Можно ли как-то изощриться и зачитывать данные с формы, висящей на АДО рекордсете без сброса пометки? То есть, можно ли как-то получить доступ к реальному набору записей, отображаемому в форме после вызова процедуры и фильтрации по содержимому одного из полей?
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32610692
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я в похожих случаях менях фильтр, т.е при применении фильтра менялся рекордсурс (а, соответсвенно, и рекордсет) формы. И тогда me.recordset всегда дает истинное положение дел.

P.S. а Аксовский фильтр мне никогда не нравился. Бр-р...
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32610699
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется в виду, что нужно предвидеть, какие фильтры могут понадобиться юзеру и все это отписать в явном виде, запретив стандартные инструменты?
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32610700
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да.
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32610704
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В крайнем случае - сделать свою формочку фильтрации. Зато вы таким образом всегда контролируете рекордсет формы.
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32610719
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Постановщик задач хочет полный произвол для фильтрации, это раз, и второе, главное, притормаживает формочка при обновлении рекордсета на каждый Shift-Dn. Хочется работать с уже открытым рекордсетом. А АДО-рекордсет не клонируется.
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32610753
ячсм
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может так?
Для расчетов - сразу открыть еще один рекордсет, потом устанавливать ему св-во Filter. Значение для Filter - из одноименного св-ва формы.
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32610754
ищ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а что тебе мешает в примечание сделать
поле с sum(столбец)
он тебе покажет правильный результат
с любыми фильтрами
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32610774
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне не нужно суммировать столбец, мне нужно суммировать произвольное выделение)
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32610783
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроме того, для АДО-источника столбец в поле тоже не суммируется, по крайней мере, мне не удалось. Как рекордсета формы этого рекордсета как бы и нет, и число записей у него 1, и доступа к нему никакого.
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32610813
ищ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как понимать
"произвольное выделение"?
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32610843
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наводишь курсор мыши на любое поле в даташите на верхний угол, чтобы он превратился в крестик, и провозишь с нажатой левой кнпкой в любую сторону на любое количество позиций.
Или стоя на любом поле в даташите нашимаешь Shift и затем любую из четырех стрелочек, стрелочку несколько раз. Сколько надо.
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32610875
ищ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот готовый пример суммы по выделенному
столбец называется "код"

Private Sub код_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim rst As DAO.Recordset, summa
Dim i As Long
If Me.Form.SelHeight > 0 Then
Set rst = Me.RecordsetClone
summa = 0
rst.MoveFirst
rst.Move Me.Form.SelTop - 1
For i = 1 To Me.Form.SelHeight
summa = summa + nz(rst("код"), 0)
rst.MoveNext
Next
Me.Parent.Сумма = summa
rst.Close
Set rst = Nothing
End If

End Sub
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32610918
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так что, всех делов, что переменную для хранения клона надо декларировать как DAO.Recordset? И старый код будет работать? Сейчас попробую.
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32610952
ищ, не вводи людей в заблуждение
ну или читай внимательнее. сказано же - ADO
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32610962
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
щйгшук98кеао , так что, невозможно клонировать? Ни в какую переменную?
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32611024
ищ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а не надо лезть в ado в mdb в форме
форма в mdb к вашему сведению основана на dao.recordset
да и ваще сумма по выделенному-
пережиток екселя.
умные собаководы используют фильтр.
это я сделал медвежью услугу с кодом.
простите дурака. удалите код. пусть начинающие
программеры его не видят.(но он кстати работает)
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32611069
йййй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 ищ
а не надо лезть в ado в mdb в форме
Товарисч ищ, а где вы увидели слово mdb ?
Я вот только в вашем сообсчении его наблюдаю
да и ваще сумма по выделенному-
пережиток екселя.
А мужики то и не знают...
во беда...
авторумные собаководы используют фильтр.
Если ты не заметил - у автора вопроса и фильтр используется
Читай внимательнее вопросы.

2 OlgaT
Ну я же уже написал - заранее окрыть еще один рекордсет, установить ему фильтр как на форме. Т.е. mrst.Filter = Me.Filter
Если нужно еще выделение отслеживать - то надо будет еще и фильтрацию руками перенести.
Т.е. это такое вот рукотворное ADO-шное подобие DAO-шного поведения Form.RecordsetClone
З.Ы. Сам не пробовал.
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32611107
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовала. С рукотворным фильтром 1)тормозит чудовищно, 2)результат суммирования неверный, то есть попадает все равно не в те записи.
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32611110
йййй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. открыть заранее, а фильтровать и сортировать - по какому-то событию от пользователя (тот же MouseUp)
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32611112
йййй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
гм. апаздал

Попробовала. С рукотворным фильтром 1)тормозит чудовищно
поиграть с различными режимами открытия

2)результат суммирования неверный, то есть попадает все равно не в те записи.
а какие попадают?
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32611113
ищ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в adp клон формы и рекордсет возвращают одни и те же записи, независимо от примененных не клиенте фильтров, поэтому Ольге и нет смысла спрашивать про клоны
а моя прога как раз и работает универсально (с фильтрами или без оных) и без разницы есть ли фильтр на форме или нет.
йййй читай правильный ответ.
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32611119
ищ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да ну вас нафиг.
им про стиральную машину, а они про корыто.
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32611120
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то mdb, конечно, но а как же в АДО и лазить? Самая легкая конструкция для отбора данных, сохраненная процедурка, возвращающая 10 записей из нескольких миллионов и текстовый ее вызов в форму. Никаких линкованных таблиц, запросов-источников, никаких аксессных связей.
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32611157
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня при попытке применить фильтр к рекордсету остается rst.Filter=0 и набор записей - исходный, нефильтрованный. Сама команда ошибки не вызывает (как и клонирование рекордсета), но игнорируется.
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32611278
йййй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не знаю. Вот так вот у меня работает - в mdb с ADO. И фильтрация нормально учитывается, и сортировка, и выделение

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
Option Compare Database
Option Explicit

Private mrstClone As ADODB.Recordset

Private Sub Form_Load()
    Dim cnn As ADODB.Connection
    Set cnn = New ADODB.Connection
    cnn.Open "трампампам"
    
    Dim rst As ADODB.Recordset
    Set rst = New ADODB.Recordset
    rst.CursorLocation = adUseClient
    rst.Open "Select t.id, t.a From t", cnn, adOpenKeyset, adLockReadOnly
    
    Set Me.Recordset = rst
    
    Set mrstClone = New ADODB.Recordset
    mrstClone.CursorLocation = adUseClient
    mrstClone.Open "Select t.id, t.a From t", cnn, adOpenKeyset, adLockReadOnly
End Sub

Private Sub id_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    CalcSum
End Sub

Private Sub a_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    CalcSum
End Sub

Private Sub CalcSum()
    With mrstClone
        If Me.FilterOn Then
            .Filter = Replace(Me.Filter, "Форма1.", "")
        Else
            .Filter = ""
        End If
    
        If Me.OrderByOn Then
            .Sort = Replace(Me.OrderBy, "Форма1.", "")
        Else
            .Sort = ""
        End If
        
        Dim s As Double
        If Not (.EOF And .BOF) Then
            .MoveFirst
            .Move Me.SelTop -  1 
            
            Dim i As Long
            For i =  1  To Me.Form.SelHeight
                s = s + Nz(.fields("a"),  0 )
                .MoveNext
            Next i
        End If
    End With
    Me.Parent!txtSum = s
End Sub

Писалось быстро на коленке, сильно не смеяться :)

З.Ы. Может действительно лучше использовать DAO и запросы к серверу?
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32611318
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не вижу компактного решения для использования запроса к серверу в клонированной форме. Либо такой запрос должен возвращать все записи с сервера, а сабформу вешать на линк - работает медленно и моргает при прокрутке, либо в запрос надо вписывать параметры, тогда он не годится как источник клонированной формы.
Не для клонов, и там, где не требуется редактирование, я второй вариант и использую.
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32611427
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня так не получается, на форме есть еще пачка параметров настройки, которые влияют на выведение информации в сабформе, значит, мне нужно по требованию обновлять набор записей (кроме прописывания его при открытии), а я не умею, не получается, держать открытое соединение. Даже если я декларирую conn как Public, все равно в процедурах его значение Nothing.
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32611475
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему-то у меня не получается держать открытый рекордсет на уровне формы. Когда управление переходит к другой процедуре, рекордсет оказывается Nothing. Поэтому сумму в приведенном примере посчитать невозможно. Что я делаю неправильно?
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32611928
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поднимаю тему. Почему в модуле формы переменная, определенная на уровне формы, не имеет значения по завершении работы процедуры, в которой значение было присвоено? Так и должно быть и в приведенном здесь примере ошибка, или я просто что-то делаю неправильно?
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32611950
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется в виду переменная mrstClone? Возможно, потому, что она объявлена как private, а в модуле, из которого ведется проверка ее содержимого, нет строки
Option Explicit
? Т.е. там эта переменная не находится и соответственно создается as variant.
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32611958
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой, myrstclone - это йййй. Ну не важно, все равно возможно по этой причине.
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32611999
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня объявлено как Public и эта опция есть, но все равно по жизни как то у меня ни разу не получилось (к своему стыду) использовать в форме значение глобальной переменной в разных процедурах. Проблема не только в этом примере. Значение пусто, если в текущей процедуре оно не присвоено. Вот такой у меня пробел в знаниях.
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32612023
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В форме напиши:
Код: plaintext
1.
2.
3.
4.
public form1s as string

private sub Btn1_Click()
form1s="Проверка"
endsub

В другом модуле напиши
Код: plaintext
1.
2.
public sub aaa()
  msgbox Forms("Форма1").form1s
end sub

Нажми Ctrl-G, напиши
aaa
Нажми Enter. Название переменной надо предварять обращением к форме. Можно вместо Forms("Форма1") писать Form_Форма1 (см faq по экземплярам, п 4.3.)
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32612564
йййй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То, что я привел - это модуль подчиненной формы. Адын в адын. Усе работает.

В ней есть Private-переменная mrstClone. Открывается этот рекордсет при открытии формы. Пока форма не закрыта - рекордсет есть. Снаружи он не виден (потому как Private), если надо к нему вне формы обращаться - сделайте Public Property

Наверное можно и не держать постоянно этот рекордсет, вместо него использовать конструкцию
Set mrstClone = Me.Recordset.Clone
или
Set mrstClone = Me.RecordsetClone
Главное - скопировать строку фильтра и строку сортировки с формы в этот рекордсет, тем самым добиться от ADO-шного клона поведения, изначально присутствующего в формах на DAO-шных рекордсетах.

По поводу всего остального:
Я не вижу компактного решения для использования запроса к серверу в клонированной форме
Не понял. Что такое клонированная форма?
на форме есть еще пачка параметров настройки, которые влияют на выведение информации в сабформе, значит, мне нужно по требованию обновлять набор записей (кроме прописывания его при открытии)
Не понял - как это связано с ADO или DAO? ADO-рекордсет (в качестве источника формы) у вас сам все параметры просекает и сам обновляется? Не верю.
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32612844
Ольга_Т
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На AfterUpdate параметров повторяется загрузка рекордсета из процедуры.
А на OnOpen подчиненной формы у меня вообще невозможно процедуру запустить, потому что (почему, не знаю) у клонированной формы материнской Unbound'ы с параметрами еще не нарисовались и обращение к ним вызывает ошибку(.
Клоны форм - вот только что фигурировала ссылка http://www.sql.ru/faq/faq_topic.aspx?fid=240
А вообще подробно описано у Гетца.

Может быть у меня такая проблема с глобальной переменной именно потому, что форма клонированная и по сути безымянная?
...
Рейтинг: 0 / 0
ADO рекордсет как источник формы: как сделать клон?
    #32613565
йййй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытался сотворить все то же самое для DAO.Recordset на основе хп с параметрами. Что-то не вышло ни фига
Создаю временную QueryDef, устанавливаю св-во Connect, в SQL пишу вызов хп и значения параметров, открываю DAO рекордсет, вешаю на него форму, пока все ок. Как только пытаюсь сортировать или фильтровать - "не существует источник записей sp_test 1"
Чета я наверное не то делаю?

Но ADO-шный вариант у меня все равно работает.
...
Рейтинг: 0 / 0
37 сообщений из 37, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / ADO рекордсет как источник формы: как сделать клон?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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