我在MS Access数据库中有一个表格,其中列出了为新电力线路咨询的所有土地所有者。在每一行的末尾是一个按钮,打开另一个表格,显示所有咨询,提供等的详细信息。
我正在尝试在MS Access中使用vb来获取contactID并自动将其放在详细信息表单中的字段中,以便土地所有者的咨询详细信息将自动弹出。我根本不是一个vb程序员(我有一个主要是Java的comp sci学位,我现在是一名GIS分析师,但它是一家小公司,因此我被要求让Access数据库工作)。
我想说 [detailsForm]![contactID] = [土地所有者]![ID] 在vb和访问将满意的方式。然后我可以看看我是否在正确的轨道上,如果它真的有效!我上面的内容实际上并不起作用。它不会编译。
来自Kaliana
答案 0 :(得分:7)
如果您希望打开一个表单到新记录并在那里设置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
从调用表单打开的表单上的。
答案 1 :(得分:3)
您可能需要查看这些按钮背后的代码。如果您使用的是docmd.openform,则可以在打开下一个表单时将第4个设置设置为where子句。
DoCmd.OpenForm "OpenFormName", acNormal, , "[contactID] = " _
& [detailsForm]![contactID] , acFormEdit, acWindowNormal
这假设联系人ID是数字,不需要任何引号。
答案 2 :(得分:0)
如前所述,OpenArgs非常适合这一点。我学到的一个技巧是,如果需要作为分隔字符串(例如逗号),很容易传入多个参数,然后目标表单可以使用Split()函数访问这些值:
StringArrayVariable()= Split(me.OpenArgs,",")
Me.textbox= StringArrayVariable(0)
Me.textbox1= StringArrayVariable(1)
等
这是空中代码,因此请查看Split()的帮助文件。
也可以在OpenArgs中传递对象,它需要一些手动内存指针操作,我没有代码可以处理,但我确信谷歌搜索会找到一些例子。这种技术可能会导致一些随机崩溃。被警告!
答案 3 :(得分:0)
使用open 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