2015-06-05 5 views
0

Я новичок в Access и запросы, однако пытаюсь узнать быстро :)запроса доступа на основе результатов запроса

Проект имеет 2 таблицы: tblClientData содержит только данные клиентов, tblClientComments содержит все комментарии, сделанные для всех клиентов ,

  1. Database

    • Таблица с данными Клиенты называют tblClientData
    • Таблица с комментариями к клиентам под названием tblClientComments
    • форму, показывая все верхние данные с функциональными возможностями, чтобы найти, добавить или изменить существующие данные

Я хотел сделать кнопку опции - если она отмечена галочкой, она будет показывать только определенных Клиентов, и когда она будет отмахиваться, она снова покажет все. Проблема возникает здесь.

Критерии этого запроса взяты из другой таблицы (tblClientComments) в пределах этой базы данных. Например: если к клиенту обратился сотрудник - он делает комментарии.

Для завершения этой задачи мне нужно получить все уникальные идентификаторы от tblClientComments, а затем добавить все их критерии в запрос tblClientData. Я попытался создать массив со значениями от tblClientComments, а затем создать запрос, но до сих пор все еще сражался с синтаксисом.

Возможно, есть другой способ?

+0

_ .. но до сих пор все еще сражался с синтаксисом_, что вы пробовали? – Y2Que

+0

Я просто хочу быть уверенным - когда кнопка выбора отмечена, запрос показывает только клиентов с комментариями? Кроме того, я ожидаю, что для некоторых клиентов может быть несколько комментариев? – ZX9

ответ

2

Я не вижу причин, по которым вам нужен VBA для создания вашего запроса. Простой SQL IN() заявление должно, конечно, хватит:

SELECT Client.ID, Client.OtherInfo 
FROM tblClientsData As Client WHERE Client.ID IN(SELECT tblClientComments.CustID From tblClientComments) 

Теперь у вас есть несколько вариантов. (Я предполагаю, что вы используете флажок для простоты.)

  1. Присвойте SQL запросу, которое вы используете для своей формы. Так как эти изменения зависят от изменений в флажком, назначить суб VBA для After Update события:
    • Перейти к Layout View
    • Нажмите на свой флажок
    • Перейдите на вкладку Event на панели свойств
    • Хит кнопку ... рядом с On Нажмите
    • Hit Code Builder

Теперь положить в некоторых трески е:

If(Forms!yourForm!yourCheckbox = True) Then 
    CurrentDB.QueryDefs("yourQuery").SQL = "SELECT Client.ID, Client.OtherInfo FROM tblClientsData As Client WHERE Client.ID IN(SELECT Comments.CustID From Comments)" 
Else 
    CurrentDB.QueryDefs("yourQuery").SQL = "SELECT Client.ID, Client.OtherInfo FROM tblClientsData As Client" 
End If 

Вы можете просто использовать Forms!yourForm.Refresh, чтобы отразить изменения с флажком.

  1. Альтернативным, вероятно, более простым решением может быть использование a filter, которое вы включаете/выключаете.DoCmd.ApplyFilter должен быть очень простым способом изменить содержимое формы. (Обратите внимание, что пример последней гиперссылки очень похож на вашу ситуацию.)
+0

Я заполняю свои списки с запросами, поэтому синтаксис выглядит несколько иначе, но вы сделали хороший момент. Поскольку я новичок в этой области, я понятия не имел, что могу использовать WHERE xxxyyyzzz IN. Это было безукоризненно, чем я был! Спасибо, милосердие! :) – lowak

+0

@ Iowak Glad Я мог бы помочь! Проверьте [этот замечательный сайт] (http://www.w3schools.com/sql/default.asp) для большего количества SQL, имея в виду, что Access SQL - своеобразная вещь. Большинство вещей работает, но это технически не то же самое, что другие версии. – ZX9

Смежные вопросы