|
|
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
Проблема следующая: Есть формочка для персональных данных. В ней табличная субформа, в которой можно видеть суммирование по выделению. Есть процедура, которая делала клон рекордсета формы и по нему просчитывала сумму по выделенным ячейкам. Процедура правильно работала и при наложении на субформу фильтров. Я сделала открывание формы персональных данных как клон формы (по Гетцу), а субформе подвесила источник АДО рекордсет. Теперь я не могу использовать клон рекордсета этой субформы как источник данных для процедуры суммирования, а то, что может вернуть повторно вызванная процедура, не отображает наложенного вручную на форму фильтра. Кроме того, повторные вызовы процедуры просто тормозят. Можно ли как-то изощриться и зачитывать данные с формы, висящей на АДО рекордсете без сброса пометки? То есть, можно ли как-то получить доступ к реальному набору записей, отображаемому в форме после вызова процедуры и фильтрации по содержимому одного из полей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 14:25:02 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
Я в похожих случаях менях фильтр, т.е при применении фильтра менялся рекордсурс (а, соответсвенно, и рекордсет) формы. И тогда me.recordset всегда дает истинное положение дел. P.S. а Аксовский фильтр мне никогда не нравился. Бр-р... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 14:32:49 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
Имеется в виду, что нужно предвидеть, какие фильтры могут понадобиться юзеру и все это отписать в явном виде, запретив стандартные инструменты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 14:34:27 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 14:34:58 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
В крайнем случае - сделать свою формочку фильтрации. Зато вы таким образом всегда контролируете рекордсет формы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 14:35:50 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
Постановщик задач хочет полный произвол для фильтрации, это раз, и второе, главное, притормаживает формочка при обновлении рекордсета на каждый Shift-Dn. Хочется работать с уже открытым рекордсетом. А АДО-рекордсет не клонируется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 14:40:08 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
Может так? Для расчетов - сразу открыть еще один рекордсет, потом устанавливать ему св-во Filter. Значение для Filter - из одноименного св-ва формы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 14:46:49 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
а что тебе мешает в примечание сделать поле с sum(столбец) он тебе покажет правильный результат с любыми фильтрами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 14:46:49 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
Мне не нужно суммировать столбец, мне нужно суммировать произвольное выделение) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 14:54:01 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
Кроме того, для АДО-источника столбец в поле тоже не суммируется, по крайней мере, мне не удалось. Как рекордсета формы этого рекордсета как бы и нет, и число записей у него 1, и доступа к нему никакого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 14:56:33 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
как понимать "произвольное выделение"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 15:06:56 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
Наводишь курсор мыши на любое поле в даташите на верхний угол, чтобы он превратился в крестик, и провозишь с нажатой левой кнпкой в любую сторону на любое количество позиций. Или стоя на любом поле в даташите нашимаешь Shift и затем любую из четырех стрелочек, стрелочку несколько раз. Сколько надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 15:16:24 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
вот готовый пример суммы по выделенному столбец называется "код" 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 15:24:13 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
Так что, всех делов, что переменную для хранения клона надо декларировать как DAO.Recordset? И старый код будет работать? Сейчас попробую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 15:35:54 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
ищ, не вводи людей в заблуждение ну или читай внимательнее. сказано же - ADO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 15:48:06 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
щйгшук98кеао , так что, невозможно клонировать? Ни в какую переменную? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 15:52:10 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
а не надо лезть в ado в mdb в форме форма в mdb к вашему сведению основана на dao.recordset да и ваще сумма по выделенному- пережиток екселя. умные собаководы используют фильтр. это я сделал медвежью услугу с кодом. простите дурака. удалите код. пусть начинающие программеры его не видят.(но он кстати работает) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 16:13:02 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
2 ищ а не надо лезть в ado в mdb в форме Товарисч ищ, а где вы увидели слово mdb ? Я вот только в вашем сообсчении его наблюдаю да и ваще сумма по выделенному- пережиток екселя. А мужики то и не знают... во беда... авторумные собаководы используют фильтр. Если ты не заметил - у автора вопроса и фильтр используется Читай внимательнее вопросы. 2 OlgaT Ну я же уже написал - заранее окрыть еще один рекордсет, установить ему фильтр как на форме. Т.е. mrst.Filter = Me.Filter Если нужно еще выделение отслеживать - то надо будет еще и фильтрацию руками перенести. Т.е. это такое вот рукотворное ADO-шное подобие DAO-шного поведения Form.RecordsetClone З.Ы. Сам не пробовал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 16:30:01 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
Попробовала. С рукотворным фильтром 1)тормозит чудовищно, 2)результат суммирования неверный, то есть попадает все равно не в те записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 16:45:59 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
Т.е. открыть заранее, а фильтровать и сортировать - по какому-то событию от пользователя (тот же MouseUp) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 16:47:22 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
гм. апаздал Попробовала. С рукотворным фильтром 1)тормозит чудовищно поиграть с различными режимами открытия 2)результат суммирования неверный, то есть попадает все равно не в те записи. а какие попадают? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 16:49:45 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
в adp клон формы и рекордсет возвращают одни и те же записи, независимо от примененных не клиенте фильтров, поэтому Ольге и нет смысла спрашивать про клоны а моя прога как раз и работает универсально (с фильтрами или без оных) и без разницы есть ли фильтр на форме или нет. йййй читай правильный ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 16:49:49 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
да ну вас нафиг. им про стиральную машину, а они про корыто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 16:51:13 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
Вообще-то mdb, конечно, но а как же в АДО и лазить? Самая легкая конструкция для отбора данных, сохраненная процедурка, возвращающая 10 записей из нескольких миллионов и текстовый ее вызов в форму. Никаких линкованных таблиц, запросов-источников, никаких аксессных связей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 16:51:31 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
У меня при попытке применить фильтр к рекордсету остается rst.Filter=0 и набор записей - исходный, нефильтрованный. Сама команда ошибки не вызывает (как и клонирование рекордсета), но игнорируется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 17:04:00 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
Не знаю. Вот так вот у меня работает - в 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. Писалось быстро на коленке, сильно не смеяться :) З.Ы. Может действительно лучше использовать DAO и запросы к серверу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 17:46:38 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
Я не вижу компактного решения для использования запроса к серверу в клонированной форме. Либо такой запрос должен возвращать все записи с сервера, а сабформу вешать на линк - работает медленно и моргает при прокрутке, либо в запрос надо вписывать параметры, тогда он не годится как источник клонированной формы. Не для клонов, и там, где не требуется редактирование, я второй вариант и использую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 18:05:12 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
У меня так не получается, на форме есть еще пачка параметров настройки, которые влияют на выведение информации в сабформе, значит, мне нужно по требованию обновлять набор записей (кроме прописывания его при открытии), а я не умею, не получается, держать открытое соединение. Даже если я декларирую conn как Public, все равно в процедурах его значение Nothing. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 19:12:51 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
Почему-то у меня не получается держать открытый рекордсет на уровне формы. Когда управление переходит к другой процедуре, рекордсет оказывается Nothing. Поэтому сумму в приведенном примере посчитать невозможно. Что я делаю неправильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2004, 20:22:19 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
Поднимаю тему. Почему в модуле формы переменная, определенная на уровне формы, не имеет значения по завершении работы процедуры, в которой значение было присвоено? Так и должно быть и в приведенном здесь примере ошибка, или я просто что-то делаю неправильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2004, 10:55:56 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
Имеется в виду переменная mrstClone? Возможно, потому, что она объявлена как private, а в модуле, из которого ведется проверка ее содержимого, нет строки Option Explicit ? Т.е. там эта переменная не находится и соответственно создается as variant. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2004, 11:02:24 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
Ой, myrstclone - это йййй. Ну не важно, все равно возможно по этой причине. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2004, 11:04:10 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
У меня объявлено как Public и эта опция есть, но все равно по жизни как то у меня ни разу не получилось (к своему стыду) использовать в форме значение глобальной переменной в разных процедурах. Проблема не только в этом примере. Значение пусто, если в текущей процедуре оно не присвоено. Вот такой у меня пробел в знаниях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2004, 11:16:37 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
В форме напиши: Код: plaintext 1. 2. 3. 4. В другом модуле напиши Код: plaintext 1. 2. Нажми Ctrl-G, напиши aaa Нажми Enter. Название переменной надо предварять обращением к форме. Можно вместо Forms("Форма1") писать Form_Форма1 (см faq по экземплярам, п 4.3.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2004, 11:24:04 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
То, что я привел - это модуль подчиненной формы. Адын в адын. Усе работает. В ней есть Private-переменная mrstClone. Открывается этот рекордсет при открытии формы. Пока форма не закрыта - рекордсет есть. Снаружи он не виден (потому как Private), если надо к нему вне формы обращаться - сделайте Public Property Наверное можно и не держать постоянно этот рекордсет, вместо него использовать конструкцию Set mrstClone = Me.Recordset.Clone или Set mrstClone = Me.RecordsetClone Главное - скопировать строку фильтра и строку сортировки с формы в этот рекордсет, тем самым добиться от ADO-шного клона поведения, изначально присутствующего в формах на DAO-шных рекордсетах. По поводу всего остального: Я не вижу компактного решения для использования запроса к серверу в клонированной форме Не понял. Что такое клонированная форма? на форме есть еще пачка параметров настройки, которые влияют на выведение информации в сабформе, значит, мне нужно по требованию обновлять набор записей (кроме прописывания его при открытии) Не понял - как это связано с ADO или DAO? ADO-рекордсет (в качестве источника формы) у вас сам все параметры просекает и сам обновляется? Не верю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2004, 13:51:05 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
На AfterUpdate параметров повторяется загрузка рекордсета из процедуры. А на OnOpen подчиненной формы у меня вообще невозможно процедуру запустить, потому что (почему, не знаю) у клонированной формы материнской Unbound'ы с параметрами еще не нарисовались и обращение к ним вызывает ошибку(. Клоны форм - вот только что фигурировала ссылка http://www.sql.ru/faq/faq_topic.aspx?fid=240 А вообще подробно описано у Гетца. Может быть у меня такая проблема с глобальной переменной именно потому, что форма клонированная и по сути безымянная? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2004, 15:06:32 |
|
||
|
ADO рекордсет как источник формы: как сделать клон?
|
|||
|---|---|---|---|
|
#18+
Пытался сотворить все то же самое для DAO.Recordset на основе хп с параметрами. Что-то не вышло ни фига Создаю временную QueryDef, устанавливаю св-во Connect, в SQL пишу вызов хп и значения параметров, открываю DAO рекордсет, вешаю на него форму, пока все ок. Как только пытаюсь сортировать или фильтровать - "не существует источник записей sp_test 1" Чета я наверное не то делаю? Но ADO-шный вариант у меня все равно работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2004, 19:00:57 |
|
||
|
|

start [/forum/topic.php?all=1&fid=45&tid=1673065]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
37ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 310ms |

| 0 / 0 |
