1

次のチェーンを使用します

TADOQuerry->TDataSetProvider->TClientDataSet

Items と ItemType テーブルのデータを取得し、オフラインで操作します。アイテム TADOQuery の SQL プロパティに単純なクエリが含まれています

select i.ID,i.Name, i.TypeID, i.Qnty, i.Price, it.TypeName 
from Items i join ItemType it on (it.ID = i.TypeID)

ItemType はさらに単純です。

select * from ItemType

今 - cdsItems の場合、TypeName フィールドをルックアップ フィールドに変更し、それを cdsItemType にチェーンします (珍しいことではありません)。cdsItems をグリッドにバインドします。しかし、グリッドでコンボボックスを使用してデータを変更しようとすると、「読み取り専用フィールドを変更しようとしています」というエラーがスローされます。

両方の TCliendDataSet ReanOnly:= false のすべてのフィールドに設定します。また、for を使用して TClientDataSets にデータを取得した後、すべてのフィールドを ReadOnly:=False に再度設定しました。しかし、それでも「読み取り専用フィールドを変更しようとしています」というメッセージが表示されます。

使用データベースはMS SQL Server 2005 Express editionです。

4

1 に答える 1

2

見つかった!!!!

GetItems クエリ (ADOQuery タイプ) の TypeID 列のタイプにあるバグ - すべてのフィールドをロードしたとき - TAutoIncField として追加された TypeID - TIntegerField に変更したとき - すべてうまくいきます。

于 2012-05-13T17:11:56.573 に答える