powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как передать параметр из формы в форму?
25 сообщений из 41, страница 1 из 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
25 сообщений из 41, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как передать параметр из формы в форму?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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