Проблема с запросом доступа - результаты не отображаются, если они не созданы в мастере - PullRequest
0 голосов
/ 24 марта 2011

Я создаю довольно простую систему для некоторых курсовых работ A-Level. В основном это система для механиков для записи клиентов и транспортных средств, над которыми они работали. У меня есть пять таблиц со следующими первичными ключами

Таблица: первичный ключ: внешний ключ

Заказчик: CustomerID

Сотрудник: EmployeeID

Транспортное средство: Регистрация

Часть: PartID

Фиксированные транспортные средства: FixedID: Регистрация: CustomerID: PartID: EMployeeID

Обычно, когда я создаю запрос, если он не создан с помощью мастера, он не показывает результатов, даже если какие-либо критерии оставлены пустыми. То, что я хочу иметь, - это поиск автомобиля с помощью регистрации, с указанием марки, модели и регистрации автомобиля, а также имени клиента и того, оплатили ли они счет или нет. Я бы тоже хотел сделать то же самое с помощью поиска клиентов

Вот база данных моей учетной записи Dropbox, если это поможет Доступ к базе данных

Заранее спасибо - надеюсь, кто-то может помочь

Ответы [ 2 ]

1 голос
/ 24 марта 2011

Здесь происходит несколько вещей.Во-первых, вы должны иметь возможность создавать запрос в сетке QBE без использования мастера.Во-вторых, вам нужна только таблица «Автомобиль» и «Клиент», так как вы запрашиваете данные только у этих двух.В-третьих, вы должны отметить в дизайне, что внешний ключ CustomerID в таблице Vehicle не требуется (обнуляется), и, таким образом, вы должны предположить, что в данной строке Vehicle не будет CustomerID.Чтобы получить все ряды транспортных средств, независимо от того, есть у них клиент или нет, вам нужно использовать левое соединение:

SELECT Vehicle.Make, Vehicle.Model, Vehicle.Year, Vehicle.Registration
    , Customer.Forename, Customer.Surname, Customer.Paid
FROM Vehicle
    LEFT JOIN Customer 
        ON Customer.CustomerID = Vehicle.CustomerID;

Если вы хотите выполнить поиск по клиенту, есть ли у него транспортное средство, и показать информацию об автомобиле.если он существует, вы бы отменили объединение:

SELECT Vehicle.Make, Vehicle.Model, Vehicle.Year, Vehicle.Registration
    , Customer.Forename, Customer.Surname, Customer.Paid
FROM Customer 
    LEFT JOIN Vehicle 
        ON Customer.CustomerID = Vehicle.CustomerID;

Обратите внимание, однако, что, поскольку Клиент является родительской таблицей в этом случае, если данный Клиент ассоциирован с несколькими строками Транспортных средств, результаты будут дублировать егоданные.То есть, он будет показывать одну строку для каждого транспортного средства, с которым связан Клиент (или только строку Клиента, если у них нет ассоциаций строки Транспортное средство).

0 голосов
/ 24 марта 2011

Попробуйте использовать внешние соединения вместо внутренних. Когда вы создаете объединение в окне запроса, вы можете щелкнуть правой кнопкой мыши по строке и получить раскрывающееся меню с «свойствами».

Или, если хотите, используйте представление sql, чтобы изменить «внутренний» на «левый внешний»

...