dbgrid と sqlquery コンポーネントを含むフォームがあります。dbgrid を sqlquery で埋めようとしています。実行すると、「操作は単方向データセットでは許可されていません」というメッセージが表示されます。データの「ローカル」コピーが必要ないため、クライアント データ セットを使用したくありません。データを直接読み取って表示したいと考えています。これはどのように行うことができますか?
1 に答える
ドキュメントには明確に記載されています(強調を追加):
TSQLQuery は一方向のデータセットです。他のデータセットとは異なり、単方向データセットは複数のレコードをメモリにバッファリングしません。このため、First メソッドと Next メソッドを使用してのみナビゲートできます。組み込みの編集サポートはありません。SQL UPDATE コマンドを明示的に作成するか、プロバイダーを使用してデータセットをクライアント データセットに接続することによってのみ、SQL クエリ内のデータを編集できます。
複数のレコードのバッファリングがないため、前方以外の方向に移動することはDBGrid
できません。つまり、 は複数の行を表示したり、スクロールをサポートしたりできませんでした。
(実際、Types of DBExpress DataSetsDBExpress
に関するドキュメントによると、すべてのコンポーネントは単方向です。)
を使用するか、代わりに などのデータにアクセスする別の方法にTClientDataSet
変更するか、 ( など)以外のものを使用してデータを表示し、独自の内部ストレージを実装する必要があります。ただし、取得するデータの量がメモリ内で管理できる場合は、ディスク ファイルである必要はありません。すべてのデータは、「ローカル コピー」(「インメモリ データセット」) になることなく、そこにとどまることができます。DBExpress
ADO
TDBGrid
TStringGrid
TClientDataSet