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/vba/17.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 db.OpenRecordset返回非记录集的内容;但要像查询一样运行_Ms Access_Vba - Fatal编程技术网

Ms access db.OpenRecordset返回非记录集的内容;但要像查询一样运行

Ms access db.OpenRecordset返回非记录集的内容;但要像查询一样运行,ms-access,vba,Ms Access,Vba,我试图按路线生成账单,因此我将其按属于特定路线的客户进行细分,然后对每个客户合计每周费率,以编制每月费率 问题是,即使在[table]中打开带有SELECT*的记录集,也不会返回任何结果,因此肯定存在一些明显的错误。这是我的密码,如果有人能帮我澄清,我将不胜感激 Dim rs作为DAO.Recordset 作为DAO.Recordset的Dim rs2 作为DAO.Recordset的Dim rs3 数字编号为整数 Dim月\u总计\u v为整数 Dim weekTotal为整数 Dim wee

我试图按路线生成账单,因此我将其按属于特定路线的客户进行细分,然后对每个客户合计每周费率,以编制每月费率

问题是,即使在[table]中打开带有SELECT*的记录集,也不会返回任何结果,因此肯定存在一些明显的错误。这是我的密码,如果有人能帮我澄清,我将不胜感激

Dim rs作为DAO.Recordset 作为DAO.Recordset的Dim rs2 作为DAO.Recordset的Dim rs3 数字编号为整数 Dim月\u总计\u v为整数 Dim weekTotal为整数 Dim weekStart作为日期 将sql设置为字符串 'sql=从花名册中选择客户号,其中route=表单![routeBill]![路线] 设置rs=CurrentDb.OpenRecordsetSELECT CUST_NO FROM floster WHERE ROUTE='Forms![routeBill]![路线]' 月份总数=0 msgboxboop。 如果不是卢比,那么 先走一步 直到rs.EOF=真 msgboxboop。 库斯诺=卢比!客户号 Set rs2=CurrentDb.OpenRecordSetSelectWk_rate,wk_strt_dt>=Forms的花名册中的wk_strt_dt![routeBill]![Text53]和wk_strt_dt问题在于:

FROM Roster WHERE wk_strt_dt >= Forms![routeBill]![Text53] AND wk
你应该引用表格![routeBill]![Text53]:

FROM Roster WHERE wk_strt_dt >= " & Forms![routeBill]![Text53] & "  AND wk

您还需要确定正确的日期:

WHERE wk_strt_dt >= #" & Format(Forms![routeBill]![Text53], "yyyy\/mm\/dd") & "# AND wk_strt_dt  ... etc

当存储的路由值均不包含文本“Forms!”时,此查询将不会返回任何记录![routeBill]![路线]

其他地方有一个WHERE子句,其中包括和cust_no=custNo。但是,由于custNo是一个VBA变量,db引擎对它一无所知,它会将它解释为您尚未提供值的参数的名称

通过在DAO.QueryDef中使用参数查询,可以避免这些类型的问题。然后从窗体控件、VBA变量等提供参数值。。。并使用QueryDef.OpenRecordset方法加载记录集

这里有一个简单的例子

Dim数据库作为DAO.Database 将qdf设置为DAO.QueryDef Dim rs作为DAO.Recordset Dim strSelect As字符串 strSelect=从花名册中选择客户编号,其中路线=[哪个路线] Set db=CurrentDb 设置qdf=db.CreateQueryDefvbNullString,strSelect qdf.Parameters,其中_route.Value=Forms![routeBill]![路线] Set rs=qdf.OpenRecordset 用rs 如果.BOF和.EOF,则 MsgBox未找到匹配项 其他的 .最后一个 MsgBox.RecordCount和匹配项 如果结束 关 以
注意:参数查询技术避免了在文本值周围添加引号,然后还要处理文本值,这些文本值可能包含引号,并格式化日期/时间值,并将其括在分隔符内

我认为这应该是双引号。从名称上看,它看起来也像一个日期列。这只是其中的一个,还有更多的部分需要更改。事实上,它可能是一个日期字段,所以表单!。。。。[Text53]可能必须转换为正确的日期字符串。但我认为@theCowardlyFrench有足够的输入来纠正他的vba。我纠正了这一点,并添加了您以及Gustav建议的格式。奇怪的是,我在代码中有用于调试的消息框。我删除了第一个,第二个应该在其中一条路线上出现16次,至少因为它返回与路线匹配的客户编号。这也不起作用,消息框永远不会出现,因为If语句似乎永远都无效-就好像记录集是空的一样。播放《暮光之城》主题曲,如果它的行为就像记录集是空的,那么它可能是空的。在第一次查询中,用[table]中的SELECT*再次测试它,看看会发生什么。我做了,结果是一样的。我想知道我是否真的在拉记录集(即设置不正确)。我看不到任何暗示,但这正是它的表现。好像它在默默地失败。嘿,我们开始了!返回的17条记录:
SELECT CUST_NO FROM Roster WHERE ROUTE = 'Forms![routeBill]![route]'