簡體   English   中英

MS Access - 打開一個表單,從前一個表單中獲取字段值

[英]MS Access - open a form taking a field value from a previous form

我在MS Access數據庫中有一個表格,其中列出了為新電力線路咨詢的所有土地所有者。 在每行的末尾是一個按鈕,打開另一個表格,顯示所有咨詢,優惠等的詳細信息。

我正在嘗試在MS Access中使用vb來獲取contactID並自動將其放在詳細信息表單中的字段中,以便土地所有者的咨詢詳細信息將自動彈出。 我根本不是一個vb程序員(我有一個主要是Java的comp sci學位,我現在是一名GIS分析師,但它是一家小公司,因此我被要求讓Access數據庫工作)。

我想說[detailsForm]![contactID] = [landownerlist]![ID]以vb和訪問方式滿意的方式。 然后我可以看看我是否在正確的軌道上,如果它真的有效! 我上面的內容實際上並不起作用。 它不會編譯。

來自Kaliana

如果您希望打開一個表單到新記錄並在那里設置ID,您可以使用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

在從調用表單打開的表單上。

您可能希望查看這些按鈕背后的代碼。 如果您使用的是docmd.openform,則可以在打開下一個表單時將第4個設置設置為where子句。

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

這假設聯系人ID是數字,不需要任何引號。

使用開放式args是普遍接受的解決方案,正如其他人所暗示的那樣。 這只屬於“For you edification”的類別:)使用open args的一個問題是,除非你小心你的評論,否則很容易忘記它們應該是什么意思。 你經過不止一個人嗎? 哪個是哪個? 我怎么在這里做的? 我是怎么在那里做的等等。對於我自己的錢,我標准化了這個(下面)所以我總是可以毫無畏懼地傳遞多個參數,當我從現在起一年后查看我的代碼時,我仍然可以看到什么是沒有的一個巨大的麻煩:

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

正如之前發布的OpenArgs對此非常有用。 我學到的一個技巧是,如果需要作為分隔字符串(例如逗號),很容易傳入多個參數,然后目標表單可以使用Split()函數訪問這些值:

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

等等

這是空中代碼,因此請查看Split()的幫助文件。

也可以在OpenArgs中傳遞對象,它需要一些手動內存指針操作,我沒有代碼可以處理,但我確信谷歌搜索會找到一些例子。 這種技術可能會導致一些隨機崩潰。 被警告!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM