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

时间:2011-12-17 16:34:32

标签: sql database ms-access vba combobox

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

**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周左右开始更深入地访问。谢谢。

2 个答案:

答案 0 :(得分:2)

您的第一个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

答案 1 :(得分:0)

你最后的Dlookup声明看起来非常好,所以我有点困惑为什么它不起作用,你可能能够解决这个问题:

Combox2_AfterUpdate (Or whatever the event is called)

Dim rs As Recordset

    Set rs = Currentdb.OpenRecordset("SELECT C.Company, R.Customer_ID " & _
                                    "FROM Customer As C, RFI As R " & _
                                    "WHERE C.Customer_ID = R.Customer_ID " & _
                                    "AND R.RFI_ID =" & [Forms]![Request for Info Form]![Combo90] & " " & _
                                    "ORDER BY C.Company")

    CompanyTB = rs!Company

    rs.Close
    Set rs = Nothing

End Sub