2016-06-16 8 views
0

私はsqliteデータベースに顧客のための「メモ」を含んでいます。データベース設計は非常にシンプルで、ノート用の1つのテーブル、customer_noteという名前の顧客とノート、customersテーブルをリンクする「リンク」テーブルが関連しています。 notesテーブルにはidフィールドがあり、customer_noteにはcustomer_idとnote_id(1対多)があり、customersテーブルにはidもあります。TSQLクエリとデータ認識コンポーネントの更新

選択した顧客のためにノートを入手するための照会は次のとおりです。

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はすべての顧客に対してすべてのメモを表示することです。 上記のコードからのログメッセージでは、クエリが正しく機能するように見えることがわかります。

何が問題になるのでしょうか?

答えて

0

クエリの結果には、パラメータによって正しくフィルタリングされたメモのみが含まれているため、このクエリがリストボックスにデータを提供するクエリである可能性はありません。

したがって、DBLookupListBoxを誤って構成し、メモをフィルタリングしないクエリを指す別のデータソースが割り当てられている可能性があります。

また、param値を割り当ててクエリを開いたときに、customerNotesQが実際に閉じられているかどうかはわかりません。しかしそうでない場合、paramは効果がありません。