2016-05-05 8 views
0

D5、ZEOS 6.6、SQLite。TDBGridで自動編集を停止する

私はsrcAccount.AutoEdit = Falseを持っています。

TDBGridオプションで、すべての編集機能がFalseに設定されています。インジケータ、グラインドライン、およびタイトルのみがtrueに設定されます。

私はいくつかのTDBEditとその上にすべての現在のアカウントを示すTDBGridを持つフォームを持っています。

ユーザーが新しいアカウントに対して、「新規」ボタンをクリックすると、私は持っている

dbedAcct.SetFocus; 
tblAccounts.Insert; 

、[新規作成]ボタンをクリックした後、ユーザーは、アカウント名を確認するためにスクロールしたいか、グリッド内をクリックして発生した場合新しいデータを保存し、挿入モードを終了します。

どうしたらいいですか?アカウント名を確認できるようにする必要があります。

これはD5のバグですか?もしそうなら、どうやって回避するのですか?

また、SMDBGridを使ってみましたが、全く同じことをしました。 http://www.scalabium.com/smdbgrid.htm

答えて

4

アカウント名を確認する必要があります。

グリッドへのデータ入力をユーザーに許可している場合は、同じグリッド+データセットを使用して行うことはできません。この問題は、データ入力と検索のためにグリッドを同時に使用しようとすることによって発生します。簡単な解決策は、ルックアップのためにグリッドを使用し、挿入を行うための別のフォーム(またはグリッドと同じフォームのパネル)を使用することです。これらは異なるデータセットインスタンスに接続する必要があります。

レコードを挿入する途中で、データセットをスクロールすることはできません(他のレコードを参照する必要があるため)。スクロールを可能にするためにデータセットに必要なdsBrowse状態と、挿入に必要なdsInsert状態は互いに排他的です。データセットをスクロールしようとすると、見つかったように保留中の挿入が自動的にポストされます。

実際には、ルックアップ用と挿入用の2つのデータセットインスタンスが必要です。 2つのクライアント側のClientDataSetインスタンスを使用する場合は、CDSのDataプロパティ(cdsLookup.Data := cdsLive.Data)を使用してデータを一方から他方にコピーすることが容易であるため、参照するローカルコピーを作成するのが簡単です簡単。または、クローンカーソルを使用できますか?http://edn.embarcadero.com/article/29416

+0

ありがとう、私はそれを試していましたが、2つの別々のテーブルを管理しようとするとあまりにも複雑になります。追加するときに私は両方に追加する必要があります。削除するときには "Locate"と同じものを再度スクロールしなければなりません。もう一方をスローループにする必要があります。あまりにも厄介なので、誰かがより良いシステムを見つけたかどうかを尋ねてみると思った。 – user2175495

+0

実際には、2つのクライアント側のClientDataSetインスタンスを使用すると、CDSのDataプロパティを使用してデータを1つから別のものにコピーすることが容易であるため、ルックアップのローカルコピー簡単です。 – MartynA

+0

CDSを使用して2つのビューを表示するためにデータをコピーする必要はありません。http://edn.embarcadero.com/article/29416 –

関連する問題