使用条件的MS Access查询

问题描述 投票:0回答:1

我在MS访问方面还很陌生,我正在努力完成一个查询,以找出哪些合作伙伴在特定的选定月份/年份未付款。

[我有2个表,一个表具有所有合作伙伴的名称(Sócios),第二个表已注册了所有合作伙伴的所有付款,包括付款的月份和年份。

[如果我尝试的方法不是最好的,我不是。但是,首先,我创建了一个表单,允许用户选择月份(组合框:Registro de Pagamento)和年份(组合框:TBoxMes ),以找出在选定时期内哪些合作伙伴尚未付款。

然后我的想法是创建一个查询(命名为TBoxAno),其中包括合伙人的姓名以及从Selecionar_Mes_Cobranca表中完成的每笔付款的月份和年份,我还将这两个表之间的关系设置为显示全部从Registro de Pagamento表中进行注册,如下图所示。

Socios

但是,在月份和年份的条件字段中,我试图将以下表达式enter image description here包括在“月”字段中,并将<>[Forms]![Selecionar_Mes_Cobranca]![TBoxMes]包括在“年”字段中。这个想法是只返回没有从用户选择的月份和年份中注册的合作伙伴名称,但是它没有用,我希望获得一些帮助,以了解为什么以及如何完成此操作。

提前感谢

ms-access
1个回答
0
投票

使用'<>'不会为您提供所需的结果。这将导致获得指定月份未付款的款项。

您最好更改JOIN原因并使用Codigo字段代替名称。这将产生更好的性能。我假设Registro de pagamento中的Codigo(社会代码)是外键,因此具有索引,也不能为空值。修改数据库结构以将外键分配给数字索引字段确实是一个好主意。建议:在整个数据库中,使字段名称保持相同。从长远来看,这将使您的生活更轻松。还要避免在其中使用空格。您可以使用大写符号来帮助阅读它们(例如MesDoBoleto)。然后,您需要的是NOT IN运算符。这将提取在指定月份内不在Registro de Pagamento中的Socios:您需要这样的东西:

<>[Forms]![Selecionar_Mes_Cobranca]![TBoxAno]

请注意,我没有在字段名称中使用重音,请进行相应调整。

请注意,IN,EXISTS,NOT IN和NOT EXISTS都有自己的怪癖。使用前请仔细阅读它们。您可以在此处找到一个示例:SELECT [Socio Nome],Codigo FROM Socios NOT IN (SELECT Codigo FROM [Registro de Pagamento] WHERE [Mes do Boleto]=[Forms]![Selecionar_Mes_Cobranca]![TBoxMes] AND [Ano do Boleto]=[Forms]![Selecionar_Mes_Cobranca]![TBoxAno]);

© www.soinside.com 2019 - 2024. All rights reserved.