Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 如何在Microsoft Access中引用子窗体中的值表_Ms Access_Search - Fatal编程技术网

Ms access 如何在Microsoft Access中引用子窗体中的值表

Ms access 如何在Microsoft Access中引用子窗体中的值表,ms-access,search,Ms Access,Search,我正在为我的数据库开发一个搜索功能。我创建了一个测试数据库来解决问题,但我被卡住了。当我在同一表单上时,在一个范围内搜索是非常直接的,我使用以下VBA代码完成了它: Private Sub Command12_Click() Dim strWhere As String Dim lngLen As Long If Not IsNull(Me.Text8) Then strWhere = strWhere & "( [testNUm] >= " & Me.Text8

我正在为我的数据库开发一个搜索功能。我创建了一个测试数据库来解决问题,但我被卡住了。当我在同一表单上时,在一个范围内搜索是非常直接的,我使用以下VBA代码完成了它:

Private Sub Command12_Click()
Dim strWhere As String
Dim lngLen As Long

If Not IsNull(Me.Text8) Then
    strWhere = strWhere & "( [testNUm] >= " & Me.Text8 & ") AND "
End If

If Not IsNull(Me.Text10) Then
    strWhere = strWhere & "( [testNUm] < " & Me.Text10 & ") AND "
End If

lngLen = Len(strWhere) - 5

If lngLen <= 0 Then
    MsgBox "no criteria", vbInformation, "Nothing to do"
Else
    strWhere = Left$(strWhere, lngLen)

Me.Filter = strWhere
Me.FilterOn = True

End If

End Sub
Private子命令12_Click()
作为字符串的Dim strWhere
幽幽幽幽
如果不为空(Me.Text8),则
strWhere=strWhere&“([testNUm]>=”&Me.Text8&“)和”
如果结束
如果不为空(Me.Text10),则
strWhere=strWhere&“([testNUm]<“&Me.Text10&”)和”
如果结束
lngLen=Len(strWhere)-5

如果lngLen我不明白哪个表单包含Command24。您可以通过临时更改命令24_单击来找到答案

Private Sub Command24_Click()
    Debug.Print "'Me' refers to " & Me.Name
    Stop
End Sub
Stop语句将使您处于中断模式。然后,您可以使用即时窗口探索对象路径变化,直到找到引用正确形式的路径

但是,考虑到您的特殊情况(VBA经验少,期限紧),我鼓励您切换到更简单的表单设计。问问自己,搜索表单是否绝对必须嵌入到选项卡控件页面上的另一个表单中

编辑:在我看来,关于命名方案的评论是正确的。显然,您同意,并打算稍后更改为有意义的名称。如果您现在这样做,您可以使您的故障排除更容易。特别是,不愿意硬连接如下表单的名称:

Forms!test2
"( Forms!test2!Child16.Form.[testNUm] < " & Me.Text22
“test2”是一个糟糕的表单名称选择;你肯定会改变这个。因此,现在使用“Me”来指代包含命令按钮的表单。这样,在重命名表单时,代码不会中断。这就少了一个以后要处理的细节

仍然不确定我对表单详细信息的理解程度,但我建议您在设置子表单的筛选器后进入中断模式,并检查您是否得到了所需的内容。在即时窗口中,尝试以下操作:

? Me.Child16.Form.FilterOn
我之所以说“变体”,是因为我怀疑对象路径是否正确。根据需要进行调整

Edit2:在代码完成strWhere构造后,将其打印到即时窗口,以便确认它包含所需内容(如果愿意,也可以在MsgBox中显示)

Edit3:您正在使用以下语句构建筛选表达式:

Forms!test2
"( Forms!test2!Child16.Form.[testNUm] < " & Me.Text22
“(Forms!test2!Child16.Form.[testNUm]<”&Me.Text22
我将使用<字符左侧表单记录源中的字段名

"([SomeNumberField] < " & Me.Text22
”([SomeNumberField]<”&Me.Text22

Hi@HansUp,我为糟糕的命名方案道歉。Command24_Click在主窗体中,指的是使用我的testNumbers表作为其数据源的子窗体。我已设法获得了我想要的行为(在数字范围内搜索)但我仍然不确定为什么我的上述方法不起作用。我只包括了我更改的行。Private Sub Command24_Click()如果不为null(Me.Text20),则strWhert=strWhert&([testNUm]>=“&Me.Text20&”)和”如果Form_test2.Child16.Form.Filter=strWhert Form_test2.Child16.Form.FilterOn=True如果End SubHi HansUp,我已经从我的原始代码中打印出了语句,它似乎构造正确。但是,从我以前的msgbox调试语句msgbox Forms!test2!Child16.Form.testNUm,vbInformation,“wtf”我的原始方法似乎只会引用存储在与表中的testNUm字段相关的文本框中的当前信息。我通过更改字符串的构造方式并使用Me.Child16.Form.Filter=strwhere并为其分配相关的筛选器字符串来解决此问题。我仍然不确定为什么我的原始方法会比较子窗体的字段不起作用谢谢Hans我的调试技能已经很生疏了,但是你的指针确实起到了作用。再次为我含糊不清的命名方案道歉。不客气,imprz。在调试过程中,我建议使用停止语句来触发中断模式。这对我来说很容易描述。你实际上应该做的是设置一个临时的代码中的任意断点。单击相应代码行左侧的空白处(并非所有语句都支持断点)这样边距中就会出现一个红点。或者右键单击代码行并从弹出菜单中选择“切换->断点”。任何一种方法都比Stop语句更可取,因为这些断点不会与代码一起保存……因此与Stop不同,您不需要稍后撤消它。您应该认真地尝试为组件和变量提供一些更多的自描述性名称。对不起,我刚刚在2分钟内完成了测试用例。今后我一定会坚持更容易理解的命名约定