powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как передать параметр из формы в форму?
41 сообщений из 41, показаны все 2 страниц
Как передать параметр из формы в форму?
    #32195989
ulmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для изменения данных и добавления новых, двойным кликом открываю другую форму. В ней данные представленны в виде ленточной формы. Хочется что бы указатель стоял на той записи, по котой я кликнул в вызывающей форме.
Вероятно я должен передать туда параметры вызывающей формы, например, номер учащегося.
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32195997
Sfagnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoCmd.OpenForm "NewForm"
NewForm.RecordsetClone.FindFirst "LineNr=" & OldForm & "" ' Твое условие'
If Not NewForm.RecordsetClone.NoMatch Then
NewForm.Bookmark = NewForm.RecordsetClone.Bookmark
End If
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196009
Попробуй так:

Код: plaintext
Call formsOpenLocate( "Anketa" ,  "[IDAnk] = "  & IDAnk)


Функция приведена ниже

Код: 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.
Sub formsOpenLocate(vFormName, vCondition As Variant)
' Подпрограмма определяет форму, предварительно
' поставив курсор на первое поле последовательности
' заданной в условии
    Dim frm As Form
    Dim rst As ADODB.Recordset
    Dim lngCount As Long
    ' Открытие формы
    If Not formIsLoaded(vFormName) Then
        DoCmd.OpenForm vFormName, , , , , acHidden
    Else
        DoCmd.SelectObject acForm, vFormName
    End If
    ' Поиск первой последовательности
    Set frm = Forms(vFormName)
    If Not IsNull(vCondition) Then
        If Right(Trim(vCondition), 1) = "=" Then
            DoCmd.GoToRecord acForm, frm.Name, acNewRec
        Else
            DoCmd.GoToRecord acForm, frm.Name, acLast
            Set rst = frm.RecordsetClone
            rst.MoveFirst
            rst.Find vCondition
            If rst.EOF Then
                DoCmd.GoToRecord acForm, frm.Name, acNewRec
            Else
                frm.Bookmark = rst.Bookmark
            End If
        End If
    End If
    frm.Visible = True
End Sub

Function formIsLoaded(vFormName) As Integer
' Функция определяет, открыта ли форма с заданным именем
    Dim frm As Form
    formIsLoaded = False
    For Each frm In Forms
        If frm.Name = vFormName Then
            formIsLoaded = True
            Exit For
        End If
    Next frm
End Function


P.S.: Если ни одна запист не удовлетворяет условию, то система переводит форму в режим ввода новой записи
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196014
Забыл добавить. Функции универсальные и работают в любой версии MSAccess (проверял в версиях начиная с 95 и заканчивая XP).
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196022
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделай проще.
docmd.openform "name",,,,,,arg
где arg-признак нужной записи.
в открывшейся форме переданый параметр извлекается как
me.openargs
делаешь gotorecord и все.
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196037
Ну незнаю. Я лично откузался от таких действий два года назад. Слишком много лишнего кода.
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196044
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
самый простой вариант:
в источнике прописать
условие
select ... where id=[Дрянь-форма]![Дурной контрол]
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196050
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Слишком много лишнего кода.

а ты свою функцию не считаешь таковой
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196062
А ты попробуй поставить курсор на запись, удовлетворяющую нескольким условиям своим OpenArgs и поймешь.
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196075
ulmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, буду пробовать, но есть вопрос:
1. Call formsOpenLocate помещается в программу события "двойное нажатие кнопки"?
2. Sub formsOpenLocate(vFormName, vCondition As Variant) вероятно помещается в модуль? С модулями я еще не работал.
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196079
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Дмитрий Басовский:

но ведь OpenArgs, это строка
вот и передавай хоть мульён параметров (как в where),
а в открытой форме используй их как conditions
в функциях поиска записи.
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196107
А код писать на каждой вызываемой форме?

Если форма не содержит VB-модулей, то на ее компиляцию при открытии
не тратится время и она открывается гораздо быстрее и занимает гораздо меньше места как в самом mdb файле, так и в памяти компа.

При наличии кода в форме размер формы увеличивается в среднем на 10-20%.

Если в БД, которую я сейчас обслуживаю, сделать так, как ты советуешь -
система будет ворочаться как недобитый мамонт.

Проверено.
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196125
Заменяешь в коде

Sub formsOpenLocate(vFormName, vCondition As Variant)

на

Function formsOpenLocate(vFormName, vCondition As Variant)

И

End Sub

на

End Function

и после этого можешь использовать построитель выражений.
Пример:
=formsOpenLocate2("Country";"Country ='" & [Citizenship] & "'")

P.S.: В .adp проектах этот метод неприменим.
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196137
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Если форма не содержит VB-модулей, то на ее компиляцию при открытии
не тратится время и она открывается гораздо быстрее и занимает гораздо меньше места как в самом mdb файле, так и в памяти компа.


Хрень это - сказки про еле ворочающиеся формы у которых есть модуль. Даже если это так и было - то благодаря тому что код грузиться в память 1 (один) раз при первом обращении, можно насовать в формы Public функции (пустые) и обращаться к ним в момент загрузки базы - таким образом инициализировать загрузку модулей формы в память. Сам код занимает не так уж и много места (сделай SaveAsText модулей и убедись в этом сам). Данную процедуру можно проделать только для особо перегруженных форм.

Главные тормоза в формах - это источники данных и перегрузка формы элементами и полями-со-списками, ну и в криворукости программера (сам на это попадался :) ).

Чем основаваюсь? Опытом и экспериментами по поводу оптимизации работы одной слишком круто растолстевшей формы (открытие порядка 5-8 сек) - убрав модули нафиг - скорость загруки заметно не изменилась - вернее так и осталась.
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196162
Параметр формы "Наличие модуля" трогал? Если нет, то мог бы и не удалять проргаммного кода.

У меня есть форма (без модуля), данные для которой имеют ширину 430 полей.
Всего записей 2 347 490 (на данный момент). Открывается примерно 1,5 секунды. С модулем она открывалась 2,5.
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196176
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Дмитрий Басовский
>Параметр формы "Наличие модуля" трогал? Если нет, то мог бы и не удалять проргаммного кода.

Куда нам, чайникам, про HasModule знать-то... :)

>У меня есть форма (без модуля), данные для которой имеют ширину 430 полей. Всего записей 2 347 490 (на данный момент). Открывается примерно 1,5 секунды. С модулем она открывалась 2,5.

1.5 сек? Локально поди наверное, да на PIV?
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196179
Я знаю более 5 методов передачи информации из формы в форму. У каждого свои достоинства и недостатки. Так что не будем спорить по пустякам. Человеку помогли (если это так) и то хорошо.
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196192
ulmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, помогли, все получилось!
Сегодня хороший день!
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196194
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Человеку помогли (если это так) и то хорошо.

Ему уже помогли. Дали совет который позволит ему сделать что он хочет.
Мне про 1,5 сек знать хочеться - у меня записей было на 3 порядка меньше и котролов около 50 - открывалось (в сети) 5-8 секн. а тут такие цифрищи -1,5 сек!
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196202
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не очень я понял - т.е. источником данных для формы служит селект с 430 полями по таблице (или группе таблиц) с общим количеством строк в 2 347 490 - и это открывается 1.5. секунды?
Простой Select без группировки и сортировки будет работать медленнее.
на наборе в 823000 записей при первом обращении к таблице время селекта 1 мин 23 сек, по индексу (т.е. в селекте только кластерный индекс) при повторном обращении - 6 секунд. Запрос на сервере. И это не форма, даже с одним контролом и без модулей.
Да и второй момент - на форму выводятся все записи???
Как правильно заметили, время загрузки формы зависит от количества контролов на ней и исходных данных к форме.

P.S. Предложенный метод - универсален и хорош. В своём посте я его не затрагивал.
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196210
АлексейЕ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так, на всякий случай.
Если автор вопроса остановится на варианте передачи параметров через openargs, то пусть заглянет по ссылочке:
http://am.rusimport.ru/MSAccess/topic.aspx?ID=94
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196242
АлексейЕ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос к Дмитрию и остальным
ADO только изучаю.

Код: plaintext
1.
2.
Dim rst As ADODB.Recordset
...
Set rst = frm.RecordsetClone

Разве такая конструкция может работать?
RecordsetClone есть только в DAO. Или я чего-то недопонял?
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196259
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такая конструкция работать будет. В данном случае, frm.RecordsetClone - свойство формы.
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196279
АлексейЕ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так ведь это Свойство, RecordsetClone, используется для ссылок на объект формы Recordset типа DAO.

да и в Хелпе:
You use the RecordsetClone property to navigate or operate on a form's records independent of the form itself. For example, you can use the RecordsetClone property when you want to use a method, such as the DAO Find methods, that can't be used with forms.

P.S. Только что попробовал. Выдает ошибку Type mismatch (Error 13)
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196289
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Так ведь это Свойство, RecordsetClone, используется для ссылок на объект формы Recordset типа DAO.

Не типа DAO, а типа Object (см. F2)
и по разному ведет себя в разных версиях акеса (2000/2002) и в проектах при присваивании ADODB.Recodset or DAO.Recodset.
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196295
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не DAO, а Object
В mdb - DAO.Recordset
В adp - ADO.Recordset
Может от версии еще зависит, не помню.
И вообще, тебе же по русски сказали:
For example и т.п.
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196300
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я апаздал
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196318
АлексейЕ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем.
Понял.
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196324
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Лоху
>В mdb - DAO.Recordset
>В adp - ADO.Recordset

Точнее
В mdb - DAO.Recordset (обновляемый) и ADO.Recordset (не обновляемый)
В adp - ADO.Recordset (обновляемый) и DAO.Recordset (хрен его знает - изврат это)

А про версию имеется ввиду 2002 акес там вроде(не уверен, не точно, под рукой нет 2002 версии - но легко проверить) ADO.Recordset м.б. обновляемым
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196345
АлексейЕ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В mdb - DAO.Recordset (обновляемый) и ADO.Recordset (не обновляемый)
В adp - ADO.Recordset (обновляемый) и DAO.Recordset (хрен его знает - изврат это)

А про версию имеется ввиду 2002 акес там вроде(не уверен, не точно, под рукой нет 2002 версии - но легко проверить) ADO.Recordset м.б. обновляемым


Вот я в 2002 и эксперементирую.
в mdb такая конструкция не проходит и выдает ошибку Type mismatch (Error 13)
По этой причине и кажется, что В mdb - DAO.Recordset и только.
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196353
Фотография dannis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>А ты попробуй поставить курсор на запись, удовлетворяющую нескольким >условиям своим OpenArgs и поймешь.

Этого, по всей видимости, не будет в данном случае. Юзер выбрал конкретную запись в первой форме, ее же он и будет изменять. А даже если и будет - ну откроется форма с несколькими записями, пройти их все и поменять чего надо.
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196358
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2АлексейЕ

какая конструкция выдает ошибку?

Такая ничего не выдает - ключевое слово r.CursorLocation = adUseClient
Проверено на акесе2000+сп2, mdb
Код: plaintext
1.
2.
3.
4.
5.
6.
Private Sub Form_Open(Cancel As Integer)
Set r = New ADODB.Recordset
r.CursorLocation = adUseClient
r.Open  "t2" , CurrentProject.Connection, adOpenKeyset, adLockOptimistic
Set Me.Recordset = r
...


З.Ы.
а ты уверен что тебе рекодсеты на форму нужны?
Мне ни разу не подобились.
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196368
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну скока можно
говорить про одно и тоже?
из справки:
у формы в mdb
может быть только DAO.RecordsetClone и
DAO.Recordset
а в adp- ADO
зарубите себе на носу
и больше не спрашивайте
если еще нужно объяснить
почему? я думаю
догадаетесь
или пошлю на Гетца
1 том стр.428
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196377
АлексейЕ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не работает вот что:
Код: plaintext
1.
2.
Dim rst As ADODB.Recordset
...
Set rst = frm.RecordsetClone

А приципился я к RecordsetClone в ADO
В adp проверить не могу.
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196381
АлексейЕ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хаму трамвайному
Так, а я о чем?
А ты шипишь, плюешься. :)
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196386
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В adp работать будет.
В mdb нет.
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196416
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Хаму
>из справки: у формы в mdb может быть только DAO.RecordsetClone и >DAO.Recordset а в adp- ADO зарубите себе на носу и больше не >спрашивайте
>если еще нужно объяснить почему? я думаю догадаетесь или пошлю на >Гетца 1 том стр.428

У меня все работает.
Правда не RecordsetClone, а Recordset.Clone. Но это ничего не меняет - Clone в основном нужен для позиционирования по букмаркам. Что и решается следующим примером:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Private Sub Form_Open(Cancel As Integer)
    Dim f                          As ADODB.Field

    Set r = New ADODB.Recordset
    r.CursorLocation = adUseClient
    r.Open  "t2" , CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    Set Me.Recordset = r
    Set rado = New ADODB.Recordset
    DoEvents
    Set rado = Me.Recordset.Clone

    rado.Find  "Стало='tbl0AccordancePlant'" 
    If rado.EOF Then
        'не нашли
    Else
        'нашли - позиционируем
        Me.Recordset.Bookmark = rado.Bookmark
    End If
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196450
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виктор, ну что ты как маленький
RecordsetClone и Recordset.Clone - это две большие разницы. Или четыре маленькие. Не вводи людей в заблуждение.
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196467
АлексейЕ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо ВСЕМ
Вывод.
В mdb по умолчанию форма грузится с источником данных типа DAO и Me.RecordsetClone вернет DAO Recordset
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Private Sub Form_Open(Cancel As Integer)
Dim rst As Variant

'Dim r As ADODB.Recordset
'Set r = New ADODB.Recordset
'    r.CursorLocation = adUseClient
'    r.Open  "t2" , CurrentProject.Connection, adOpenKeyset, adLockOptimistic
'    Set Me.Recordset = r

Set rst = Me.RecordsetClone

If TypeOf rst Is DAO.Recordset Then
    MsgBox  "DAO Recordset" 
ElseIf TypeOf rst Is ADODB.Recordset Then
    MsgBox  "ADO Recordset" 
End If
End Sub

Если же снять знак комментария в закомментированных строках, то источнику строк в форме будет присвоен ADO Recordset и RecordsetClone тоже вернет ADO Recordset
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196472
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Лоху
>RecordsetClone и Recordset.Clone - это две большие разницы. Или четыре маленькие. Не вводи людей в заблуждение.

Я не ввожу в заблуждение - я другие пути показываю.

Вопрос:Для чего применяют RecodsetClone?
Ответ: для поиска и позиционирования -если нельзя с адо использовать RecodsetClone - пожалуйста делайте, но по-другому.
...
Рейтинг: 0 / 0
Как передать параметр из формы в форму?
    #32196623
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
позиционироваться можно по всякому....
и через Recordset и чероез Recordsetclone в ADP

только на нормальную работу влияет комплекс какихто настроек . честоно говоря это похоже на шаманство.

в одних местах у меня получалось только через Recordsetclone причем пр числе записей >50 приходилось делать Movelast.
потом мне удалось в другом месте той же проги без Movelast темже Recordsetclone.

и другие аналогичные ситуации.

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


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