sql – dlookup多个表并将文本框设置为结果访问2007

我会尽力解决我的问题并解释我想要实现的目标.首先,我有三个表:

**RFI** (stands for Request For Information)-
Fields: rfi_id, Customer_id .....

**RFI_project** -
Fields: rfipro_id, project_id, rfi_id    *"....." represents other unnecessary fields*

**Customer** -
Fields: Customer_id, company .....

我有一个带有两个组合框的访问表单.在第一个组合框中,我选择项目的名称,此时第二个文本框将更改为显示那些与所选项目名称匹配的* rfi_id *.
现在我要做的就是这个 – 当我在第二个组合框中选择* rfi_id *时,我希望它在我的表格上的文本框中显示* rfi_id *值与组合框中的值匹配的公司.由于表的连接方式,这有点棘手……这就是我基本上试图用SQL术语在textbox字段中显示的内容:

SELECT Customer.company, RFI.Customer_id
FROM Customer, RFI
WHERE (((Customer.Customer_id)=[RFI].[Customer_id]) AND ((RFI.rfi_id)=[Forms]![Request for Info Form]![Combo90]))
ORDER BY Customer.company;

为了做到这一点,我尝试了以下无济于事.在我的第二个组合框的更新后事件中,我插入了以下内容:

companyTB = DLookup("company", "Customer", "Customer_id =" & DLookup("Customer_id", "RFI" And "rfi_id =" & [Forms]![Request for Info Form]![cmbRFI]))

当我更改组合框值时,我得到错误运行时错误’13’:类型不匹配.我已经尝试过寻找我做错了什么,但这显然是一个非常广泛的错误,我找不到任何类似的东西(或者我理解的东西).我也试过这个 –

companyTB = DLookup("company", "Customer", "Customer_id =" & DLookup("Customer_id", "RFI", "rfi_id =" & cmbRFI))

这给了我以下错误 – 运行时错误’3075’:查询表达式中的语法错误(缺少运算符).无论如何,是否有人能够给我一个细分我需要做什么来实现这个,或者我做错了什么(或者更好的方法呢?).请原谅我看似愚蠢,我刚刚开始在过去3周左右开始更深入地访问.谢谢.

最佳答案 您的第一个DLookUp语法不正确:

companyTB   = DLookup("company", "Customer", "Customer_id =" 
            & DLookup("Customer_id", "RFI" And "rfi_id =" 
            & [Forms]![Request for Info Form]![cmbRFI]))

我把它分成了三行,以便更容易看到.当它应该有一个逗号时,第二行在“RFI”和“rfi_id”之间有和.

companyTB   = DLookup("company", "Customer", "Customer_id =" 
            & DLookup("Customer_id", "RFI", "rfi_id =" & cmbRFI))

您在第二个组合中遇到的错误似乎可能是由于cmbRFI返回的结果.您可以通过填写实际的rfi_id来检查这一点,而不是对组合的引用,并通过设置一个等于cmbRFI的文本框并查看它返回的内容.组合可能很困难,因为显示的列和绑定列可能不同.

使用多个列设置组合框可能很方便,如查询中所示,因此rowsource可能是:

SELECT rfi.ID, Customer.company, RFI.Customer_id
FROM Customer 
INNER JOIN RFI
ON Customer.Customer_id=RFI.Customer_id
ORDER BY Customer.company;

(或三张桌子,必要时加入)

然后

Column count = 3
Column widths = 2cm;0;0
Bound column = 1

您现在可以参考文本框中的第二列:

= cmbRFI.Column(1)

列从零开始编号.

在使用Access之前,总是值得阅读sql:

Fundamental Microsoft Jet SQL for Access 2000
Intermediate Microsoft Jet SQL for Access 2000
Advanced Microsoft Jet SQL for Access 2000

点赞