dlookup несколько таблиц и установить текстовое поле для получения доступа к 2007 - PullRequest
4 голосов
/ 17 декабря 2011

Я постараюсь разобрать мою проблему как можно лучше и объясню, чего я пытаюсь достичь.Во-первых, у меня есть три таблицы:

**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 * во втором поле со списком, я хочу, чтобы он отображал в текстовом поле в моей форме company , где значение * rfi_id * соответствуетзначение в выпадающем списке.Это немного сложно из-за способа объединения таблиц ... вот что я по сути пытаюсь отобразить в поле текстового поля в терминах SQL:

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 ]

2 голосов
/ 17 декабря 2011

Ваш первый 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, и посмотрите, что оно возвращает. Комбинирование может быть затруднено, поскольку отображаемый столбец и связанный столбец могут различаться.

Может быть удобно настроить ваш комбинированный список с несколькими столбцами, как показано в вашем запросе, поэтому источник строк может быть:

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)

Столбцы нумеруются с нуля.

Всегда стоит ознакомиться с sql перед началом работы с Access:

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

0 голосов
/ 17 декабря 2011

Ваше последнее высказывание 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...