MS Access - открыть форму, взяв значение поля из предыдущей формы - PullRequest
4 голосов
/ 07 апреля 2009

У меня есть форма в базе данных MS Access, в которой перечислены все землевладельцы, с которыми были проведены консультации по поводу новой линии электропередачи. В конце каждой строки есть кнопка, которая открывает другую форму, показывая детали всех консультаций, сделанных предложений и т. Д.

Я пытаюсь использовать vb в MS Access, чтобы взять contactID и автоматически указать его в поле в форме сведений, чтобы автоматически отображались сведения о консультации землевладельца. Я вообще не программист на vb (у меня есть степень специалиста в основном на Java, и в настоящее время я работаю аналитиком ГИС, но это небольшая компания, поэтому меня попросили заставить работать базу данных Access).

Я хочу сказать [detailsForm]! [contactID] = [список землевладельцев]! [ID] таким образом, что VB и доступ будет доволен. Тогда я могу видеть, нахожусь ли я на правильном пути, и будет ли это на самом деле работать! То, что я имею выше, на самом деле не работает. Это не скомпилируется.

Из Каляны

Ответы [ 4 ]

7 голосов
/ 07 апреля 2009

Если вы хотите открыть форму для новой записи и установить там идентификатор, вы можете использовать Openargs, аргумент Openform:

DoCmd.OpenForm "FormName",,,,acFormAdd,,Me.ID

Открытой форме также потребуется код:

If Me.Openargs<>vbNullstring Then
   Me.Id = Me.Openargs
End If

Также можно найти:

Forms!LandownersList.Recordset.FindFirst "ID=" & Me.ID

или введите значение:

Forms!LandownersList!Id = Me.ID

в форме, открываемой из формы вызова.

3 голосов
/ 07 апреля 2009

Вы можете посмотреть код, который находится за этими кнопками. Если вы используете docmd.openform, вы можете установить для параметра 4th Setting значение where при открытии следующей формы.

DoCmd.OpenForm "OpenFormName", acNormal, , "[contactID] = " _
    & [detailsForm]![contactID] , acFormEdit, acWindowNormal

Предполагается, что ID контакта является числовым и не требует кавычек.

0 голосов
/ 05 июня 2009

Использование открытых аргументов является общепринятым решением, на которое ссылаются другие. Это просто подпадает под категорию «Для тебя назидание» :) Одна из проблем использования открытых аргументов состоит в том, что, если вы не будете осторожны с вашими комментариями, легко забыть, что они должны были означать. Вы проезжали больше одного? Что есть что? Как я это сделал здесь? Как я это делал там и т. Д. За свои собственные деньги я стандартизировался к этому (ниже), поэтому я всегда могу без опасений передавать более одного аргумента, и когда я через год пересматриваю свой код, я все еще могу видеть, что к чему без огромные хлопоты:

Option Explicit

'Example use: DoCmd.OpenForm "Example", OpenArgs:="Some Filter|True"

Public Enum eForm1Args
    eFilter = 0
    eIsSpecial = 1
End Enum

Private m_strArgs() As String

Public Property Get Args(ByVal eForm1Args As eForm1Args) As String
    Args = m_strArgs(eForm1Args)
End Property

Private Sub Form_Open(Cancel As Integer)
    m_strArgs = Split(Nz(Me.OpenArgs, vbNullString), "|")
    If LenB(Me.Args(eFilter)) Then Me.Filter = Me.Args(eFilter)
End Sub

Private Sub Command1_Click()
    If LCase$(Me.Args(eIsSpecial)) = "true" Then
        'Do something special
    End If
End Sub
0 голосов
/ 03 июня 2009

Как уже сообщалось, OpenArgs отлично подходит для этого. Один из приемов, который я узнал, заключается в том, что при необходимости можно передать несколько параметров в виде строки с разделителями (например, запятой), тогда целевая форма может получить доступ к этим значениям с помощью функции Split (), таким образом:

StringArrayVariable()= Split(me.OpenArgs,",")
Me.textbox= StringArrayVariable(0)
Me.textbox1= StringArrayVariable(1)

и т.д.

Это воздушный код, поэтому проверьте файл справки для Split ().

Также есть возможность передавать объекты в OpenArgs, для этого требуется ручное манипулирование указателем памяти, и у меня нет кода, но я уверен, что поиск в Google найдет несколько примеров. Эта техника может вызвать некоторые случайные сбои, хотя. Будь предупрежден!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...