我想从一个表中返回记录,该表只在另一个表中有一个链接记录。
例如,2个表,tblClients和tblOrders,其中OTM关系由tblClients.ID和tblOrders.ClientID链接(不是我的情况确切但更容易解释)。我希望打开带有过滤器的frmClients,其中客户端只放置了一个订单 - 即在tblOrders中的另一个记录中没有重复tblorders.ClientID的记录。
通过阅读看来,SELECT / COUNT查询似乎是要走的路,但我似乎无法使语法正常工作。这是我到目前为止所得到的:
Public Function onlyone()
Dim uWHERE As String
uWHERE = "SELECT tblOrders.Client_ID FROM tblOrders WHERE Count(tblOrders.Client_ID) = 1;"
Debug.Print uWHERE
End Function
我对SQL非常有限,并且对VBA不太满意(如果从上面看不清楚的话!)如果我在OpenForm中运行此代码,使用uWHERE作为WHERE子句,我会收到语法错误(我有其他更简单的WHERE子句在其他子系统中工作正常。如果我将uWHERE输出到msgbox,我会将SELECT字符串作为提示,并且debug.print行不执行任何操作。
我认为我完全错误地处理了这种语法,或者没有理解SELECT查询实际上是什么,但无法弄清楚如何解决它。我很感激一点指导=]
谢谢!
EDIT ++++++++++++++++
好的,不同的大头钉。 tblOrders有一个未绑定的列表框,其行源是从为该Client_ID下达的订单日期设置的。如果他们只下了一个订单,那么只有一个条目,那么我是否可以打开表单,只显示在此列表框中有一个条目的记录?我试过了Dim uWHERE As String
DoCmd.OpenForm "frmworklog", , , , acFormEdit
With frmworklog
Filter = "forms!frmworklog.searchres.listcount = 1"
FilterOn = True
End With
Msgbox Forms!frmworklog.searchres.ListCount
过滤器不起作用,但msgbox为开始记录提供了正确的计数。 uWHERE是WHERE子句,定义与'Filter'现在相同 - 我只是忘了把声明拿出来。
非常感谢=]
答案 0 :(得分:1)
有关汇总值的条件,请使用having
,而不是where
:
SELECT o.Client_ID
FROM tblOrders o
HAVING Count(*) = 1;
答案 1 :(得分:0)
这不是我问题的直接答案,但对我来说这是一个可接受的解决方法,所以也许它也可以为其他人实施。
我添加了一个额外的字段'订单' to tblOrders使用未绑定的框' searchres'来保存归属于该ClientID的订单总数。其中包含在该ClientID下的每个订单的日期列表:
Private Sub btnsave_Click()
Me.Orders = Me.searchres.ListCount
DoCmd.RunCommand acCmdSaveRecord
Me.searchres.Requery
End Sub
然后我可以使用一个简单的OpenForm命令,其中Orders = 1。
完成工作。