【发布时间】:2019-06-22 17:18:51
【问题描述】:
我正在尝试在 Microsoft Access 查询设计器中编写一个查询,以查看我的 VBA 代码在表中所做的选择。
基本上我有以下 VBA 循环,它沿着表 TBL_ForQB 中的客户列向下移动,如果客户不同,则执行查询“QB_Make_Model”,然后运行不同的查询并且循环停止。
主要问题:
如何让“QB_Make_Model”看到 VBA 代码所在的客户,目前使用我的代码它只是插入来自所有客户的信息。
QB_Make_Model 查询:
INSERT INTO InvoiceLine ( InvoiceLineDesc, FQSaveToCache )
SELECT DISTINCT t.Make_Model, 1
FROM TBL_ForQB AS t;
VBA 循环:
Dim dbs As Database
Set dbs = CurrentDb
Dim rst As Recordset
Set rst = dbs.OpenRecordset("TBL_ForQB")
Dim cust As String
Stop
rst.MoveFirst
Dim fcust As String
fcust = rst!Customer
MsgBox rst!Customer
Do Until rst.EOF
cust = rst!Customer
If cust = fcust Then
DoCmd.SetWarnings False
MsgBox "Same Customer"
DoCmd.OpenQuery "QB_Make_Model"
Else
DoCmd.OpenQuery "QB_Invoice_PK"
MsgBox "Diffeent Customer, I have Stopped and Sent to QB!"
'fcust = rst!Customer
'DoCmd.OpenQuery "QB_Make_Model_PK"
'DoCmd.OpenQuery "QB_Invoice_PK"
End If
rst.MoveNext
Loop
新问题
@Parfait 的答案似乎工作正常,现在的问题是:
假设表“TBL_ForQB”中有两条相同的客户记录,使用新参数查询“QB_Make_Model”匹配客户名称,VBA 执行它。问题是它发送“TBL_ForQB”的 Make_Model 列中与客户名称匹配的所有行。并且与同名客户的次数一样多。
例如:
我有一个名为“Customer1”的客户,它有 2 条记录,每条记录都包含表“TBL_ForQB”中的一条 Make_Model 记录(每条记录)。新的 VBA 代码将运行并执行查询“QB_Make_Model”,它将匹配客户参数但每次有客户记录时都会插入“QB_Make_Model”的两条记录。
看到问题了吗?
【问题讨论】:
-
您是否收到任何错误日志。如果是这样,请发布。
-
没有错误日志,我只想让我的查询查看 VBA 循环当前在哪个客户上,并且只对那个客户执行查询任务,而不是整个列表
-
我无法具体回答,因为自从我完成它以来已经很久了,但是您需要在查询中添加 WHERE 子句,然后您需要将 fcust 作为参数传递给查询.有点像他们在这里所做的事情:stackoverflow.com/a/24535025/2174085。希望有人可以发布必要的特定代码,或者您可以自己弄清楚。抱歉,这是我现在能做的最好的了!
-
@RussellB 有什么建议吗?
-
您不应按名称选择客户,而应按primary key。每张桌子都必须有一张。在 Access 通常是一个自动编号。然后,不要使用文本框进行客户选择,而是使用ComboBox that looks up this primary key。