初めまして。宜しくお願いします。
現在、既存アプリ(MSACCESS+BDE使用)をDelphi7Pro付属のADOExpressコンポーネントに移行する作業を行なっています。
そこで、TADOTableで新規レコードをAppendする際に、MDB側に設定してある既定値で新規レコードの値が作成されないといけないのですが、Appendした際にMDB側の既定値が全く無視されNULLで返ってきてしまいます。既定値の値を使用するようにする方法はどのようにすればよろしいでしょうか?
なお、プロパティ設定は
CursorLocation = clUseClient
LockType = ltOptimistic
などとなっています。
初歩的な質問で誠に恐縮ですが、宜しくご教授のほど宜しくお願いします。
別段何をするわけでもなく、私が試した限りでは
正しく規定値で設定されますが・・・
Syake様
ご回答ありがとうございます。
テストアプリを作成し、試してみた結果、
ADOTable2.Open;
ADOTable2.Append;
(この間はNULLで読込まれる)
ADOTable2.Post;
ADOTable2.Requery;
(Postして読み込み直すとデフォルト値が反映される)
ADOTable2.Close;
という状況が分かりました。
Append時点で既定値が入っていないと計算上支障が出るのですが、上手くそのようになりません・・・。
Appendするとキャッシュされた!?DataSetの更新とmdbの直接更新します。
規定値はmdb側で設定されるだけなので、既に取得しているDatSetには規定値
は反映されないことになります。
あまり、この様な使い方をしないので詳細は不明ですが再読み込みしないと
駄目みたいです。
私が見たのはmdb直接でしたので回答がおかしくなりました。
すいません。
>Append時点で既定値が入っていないと計算上支障が出るのですが、上手くそのようになりません・・・。
計算のタイミング等は不明ですので、回答になるかどうか・・・
ならば、面倒ですがAppendの後にADOTableに規定値を設定する記述をしてから
計算するようにすれば如何でしょうか?
PostもRefreshも不要です。
Syake様 度々恐れ入ります。
私が採用している計算方法は主に次のような感じです。
ADOTable2.Append;(←OnNewRecordイベントでキー項目を設定)
(この間にI/F若しくはプログラムで計算のパラメータを設定)
ADOTable2.Post;(←BeforePostイベントで計算する)
BDEではこの方法で上手く行っていたのですが・・・。
やはりOnNewRecordイベント等で既定値を流し込む手法を採るべきなのでしょうか・・・。
追記。
BeforePostイベントには共通の計算ルーチンを入れてあります。
>やはりOnNewRecordイベント等で既定値を流し込む手法を採るべきなのでしょうか・・・。
処理の流れ的に面倒ですが、この方法が最善かと私的(つたない技術レベル)には思います。(^_^;)
BeforPostイベントはいじらなくて良いし、OnNewRecordに追加記述だけで
すので・・・
Syake様
OnNewRecordの記述を試みます。
色々ありがとうございました。
ツイート | ![]() |