TSQLQuery и обновление компонентов, учитывающих данные

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

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

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector