2016-06-16 9 views
0

У меня есть база данных sqlite, содержащая «заметки» для клиентов. Дизайн базы данных довольно прост и включает в себя одну таблицу для заметок, таблицу «ссылок», связь, привязку клиентов и заметок с именем customer_note и таблицу клиентов. В таблице заметок есть поле id, у customer_note есть customer_id и note_id (один для многих), а таблица клиентов также имеет идентификатор.TSQLQuery и обновление компонентов, осведомленных о данных

Запрос для получения ноты для выбранного клиента является:

SELECT * FROM note n 
INNER JOIN customer_note cn 
ON (cn.note_id = n.id) 
WHERE customer_id = :customerID 
ORDER BY created_on ASC 

Запрос выполняется в случае, когда прокручивают клиентов клиентский набор данных, т.е.

customersCDSAfterScroll() 
{ 
int cID = customerCDS->FieldByName("id")->AsInteger; 
customerNotesQ->Params->ParamByName("customerID")->AsInteger = bID; 
customerNotesQ->Open(); 

//Get notes 
string note = stdstr(customerNotesQ->FieldByName("note")->AsString); 
Log(lInfo) << "Note is: "<<note; 
customerNotesQ->Close(); 

}

Запрос ссылается на DataSetProvider, ClientDataSet и компонент DataSource. В пользовательском интерфейсе TDBLookupListbox принимает данные.

Проблема заключается в том, что TDBLookpListbox показывает ВСЕ примечания для всех клиентов. В сообщениях журнала, из приведенного выше кода, я вижу, что запрос, похоже, выполняет свою работу правильно.

Любая идея о том, что происходит не так?

ответ

0

Поскольку результат запроса содержит только примечания, правильно отфильтрованные параметром, невозможно, чтобы этот запрос был единственным, предоставляющим данные в список.

Таким образом, ответ может быть так, что вы неправильно сконфигурировали DBLookupListBox и назначили ему другой источник данных, который указывает на запрос, который не фильтрует ваши заметки.

Также мы не видим, действительно ли clientNotesQ закрывается, когда вы назначаете значение параметра и открываете запрос. Но если нет, парам не будет иметь никакого эффекта.