Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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/4/r/67.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
Vba 打印具有多个参数的报告时如何使用“和”?_Vba_Ms Access - Fatal编程技术网

Vba 打印具有多个参数的报告时如何使用“和”?

Vba 打印具有多个参数的报告时如何使用“和”?,vba,ms-access,Vba,Ms Access,“AND”是否需要在任何地方加括号才能起作用 SpecialistSearch和SupplierSearch都是未绑定的组合框。这些确实为报告单独工作 当我添加“AND”时,报告失败 DoCmd.OpenReport "Order Report", acPreview, , "[Specialist]=" & Chr(34) & Me!SpecialistSearch & Chr(34) And "[Supplier]=&

“AND”是否需要在任何地方加括号才能起作用

SpecialistSearch和SupplierSearch都是未绑定的组合框。这些确实为报告单独工作

当我添加“AND”时,报告失败

DoCmd.OpenReport "Order Report", acPreview, , "[Specialist]=" & Chr(34) & Me!SpecialistSearch & Chr(34) And "[Supplier]=" & Chr(34) & Me!SupplierSearch & Chr(34)
我收到一个错误

类型不匹配


但是没有告诉我什么是错误的。

我认为,最正确的方法是使用参数

DoCmd.SetParameter "pSpecialist", Me!SpecialistSearch.Value
DoCmd.SetParameter "pSupplier", Me!SupplierSearch.Value
DoCmd.OpenReport "Order Report", acPreview, , "[Specialist] = pSpecialist And [Supplier]=pSupplier"
或者,您可以构造一个有效的SQL语句,这意味着在引号中,并且在引号中有一个前导空格

DoCmd.OpenReport "Order Report", acPreview, , "[Specialist]=" & Chr(34) & Me!SpecialistSearch & Chr(34) " And [Supplier]=" & Chr(34) & Me!SupplierSearch & Chr(34)

第二个选项将为您打开,这可能看起来很小,因为对于Access数据库,我们通常完全信任用户,但它也可能导致令人讨厌的错误,例如,如果您的供应商是Jack the Giant Chairs,这将导致SQL语句中断和应用程序故障。

最正确的方法是,就是使用参数

DoCmd.SetParameter "pSpecialist", Me!SpecialistSearch.Value
DoCmd.SetParameter "pSupplier", Me!SupplierSearch.Value
DoCmd.OpenReport "Order Report", acPreview, , "[Specialist] = pSpecialist And [Supplier]=pSupplier"
或者,您可以构造一个有效的SQL语句,这意味着在引号中,并且在引号中有一个前导空格

DoCmd.OpenReport "Order Report", acPreview, , "[Specialist]=" & Chr(34) & Me!SpecialistSearch & Chr(34) " And [Supplier]=" & Chr(34) & Me!SupplierSearch & Chr(34)

第二个选项为您打开了,这可能看起来很小,因为对于Access数据库,我们通常完全信任用户,但它也可能导致恼人的错误,例如,如果您的供应商是Jack the Giant Chairs,这将导致SQL语句中断和应用程序故障。

或者,考虑使用直接指向控件的保存查询。然后,在VBA中更新或使用此查询作为报表的记录源。注意:需要打开表单,但不需要将表单控件的查询作为参数读取。这避免了任何引号或符号的需要

SQL调整我的表单名称

选择Col1、Col2、Col3 从myTable 其中[专家]=表格!我的表格!专业研究 和[供应商]=表格!我的表格!供应商搜索 VBA

使用上述命名查询作为记录源

DoCmd.OpenReport打开报告,acPreview 正在将recordsource更新为上述查询

DoCmd.OpenReport订单报告,acViewReport“在报告视图中打开” ReportsOrder Report.Report.RecordSource=mySavedQuery“调整记录源” DoCmd.OpenReport打开报告,acPreview“在预览模式下打开”

可选地,考虑使用直接指向控件的保存查询。然后,在VBA中更新或使用此查询作为报表的记录源。注意:需要打开表单,但不需要将表单控件的查询作为参数读取。这避免了任何引号或符号的需要

SQL调整我的表单名称

选择Col1、Col2、Col3 从myTable 其中[专家]=表格!我的表格!专业研究 和[供应商]=表格!我的表格!供应商搜索 VBA

使用上述命名查询作为记录源

DoCmd.OpenReport打开报告,acPreview 正在将recordsource更新为上述查询

DoCmd.OpenReport订单报告,acViewReport“在报告视图中打开” ReportsOrder Report.Report.RecordSource=mySavedQuery“调整记录源” DoCmd.OpenReport打开报告,acPreview“在预览模式下打开”
试着像这样移动括号中的和和,[Supplier]=。谢谢@BrianMStafford,这很有效!所有这些引用总是很难。试着像这样移动括号内的和,并且[Supplier]=。谢谢@BrianMStafford,这很有效!所有这些引用总是很难。MS Access中的最佳实践答案!我总是倾向于忘记SetParameter。接下来的问题是:在这个语句中我将如何使用AND和OR?如果用户只需要供应商或专家怎么办?我注意到,如果只选择一个,我的报告将无法加载。@Sharoniskare我不确定我是否理解您的意思。如果您希望字段在为空时不受影响,可以在您的WHERE条件下尝试[Specialist]=pSpecialist或pSpecialist&=和[Supplier]=pSupplier或pSupplier&=使用MS Access的最佳实践答案!我总是倾向于忘记SetParameter。接下来的问题是:在这个语句中我将如何使用AND和OR?如果用户只需要供应商或专家怎么办?我注意到,如果只选择一个,我的报告将无法加载。@Sharoniskare我不确定我是否理解您的意思。如果希望字段为空时不起作用,可以在WHERE条件下尝试[Specialist]=pSpecialist或pSpecialist&=和[Supplier]=pSupplier或pSupplier&=。