고객에게 '메모'가 포함 된 sqlite 데이터베이스가 있습니다. 데이터베이스 디자인은 매우 간단하며 메모, 고객 테이블과 고객 테이블, 고객 테이블을 연결하는 "링크"테이블을 포함합니다. notes 테이블에는 id 필드가 있으며 customer_note에는 customer_id와 note_id (1 대 다수)가 있고 customers 테이블에는 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 구성 요소에 의해 참조됩니다. UI에서 TDBLookupListbox가 데이터를 받고 있습니다.
문제는 TDBLookpListbox가 모든 고객에 대해 모든 메모를 표시한다는 것입니다. 로그 메시지에서 위의 코드에서 쿼리가 올바르게 수행 된 것처럼 보일 수 있습니다.
무엇이 잘못 될지 알고 싶습니다.