FIREBIRD、DBEXPRESSを利用しております。SQLDATASET,Datasetprovider、ClientDataSetと接続をしてDBEDITを利用してデータの入力を行い一度DBに登録した後再度レコードを呼び出し登録内容の変更をDBEDITで行った場合、入力がうまくいかない場合が、多いです。一度DBEDITをダブルクリックすると入力領域がブルーに変わり入力できるのですが、すんなり入力内容の変更ができません。
特に登録済みの内容に追加をする場合は、うまくいきません。スムーズに登録内容の変更をする方法ありましたら教えてください。
Transactionは、どのようにしていますか?
Transaction処理をしている場合としていない場合でも、同じ現象です。
イメージといたしましては、一度作成した伝票を再度呼び出し変更するような場合です。DBのテーブルの項目が、多すぎるせいでしょうか?現在は、仕方なくClientDataSetの内容をDBEDITでは、なく通常のEDIT.TEXTに入れて変更された内容を画面を閉じる段階で最後にClientDataSetの項目に入れております。
亀レスで、既に解決済みかもしれませんが
05/19(木)の質問の
>入力がうまくいかない場合が、多いです。
は、どのように入力がうまくゆかないのか理解できません。
>すんなり入力内容の変更ができません。
は、変更内容のDBへの適用がうまく行かないと言うことと理解しますが、
dbExpressを使用した場合は、ClientDataSetのApplyUpdateメソッドが働かないということでしょうか?
更新適用のタイミングはどのようにしていますか? [適用]ボタンなどで編集後更新するのでしょうか?
更新適用のコードはどのようにしていますか?
05/23(月) の発言で、現在は
>DBEDITでは、なく通常のEDIT.TEXTに入れて変更された内容を画面を閉じる段階で最後にClientDataSetの項目に入れております。
ともいわれていますが、ClientDataSetに入れた変更内容をどのようなコードでDBへ更新をかけているのでしょうか?
小生の場合は、IBXでの接続ですがApplyUpdateで問題なく更新できています。
FB2.1 - TIBDataBase - TIBQuery - Datasetprovider - ClientDataSet - DataSource - DBGridで現在運用中ですが
DBGridの画面へDBEditを追加、ClientDatasetの一部のFieldをDBEditでも表示、編集出るようにチョット改造して確認してみました。
DBEditの追加とプロパティ(DataSource,Field)の設定のみで他のコードは一切手を加えることなくデータの編集、更新可能でした。
更新適用は、DBGrid内での行移動時に変更の有無をChangeCountで判定して処理しています。
TDataModule1.ClientDataSet1BeforeScroll(DataSet: TDataSet);
begin
if ClientDataset1.ChangeCount > 0 then
ClientDataSet1.ApplyUpdates(-1);
ClientDataSet1.Refresh;
end;
また、行移動なしで閉じる場合を考慮し、BeforeCloseイベントにも(Refreshの行なしで)同じコードを書いてます。
DBEditで編集し、別の場所へマウスカーソルを移すとDBGrid内の同一データが更新されるのが眼の前で確認できます。
ツイート | ![]() |