ADO+Jet4.0による新規DBレコード作成について

解決


ラーク  2007-06-19 23:15:30  No: 26744

初めまして。宜しくお願いします。

現在、既存アプリ(MSACCESS+BDE使用)をDelphi7Pro付属のADOExpressコンポーネントに移行する作業を行なっています。
そこで、TADOTableで新規レコードをAppendする際に、MDB側に設定してある既定値で新規レコードの値が作成されないといけないのですが、Appendした際にMDB側の既定値が全く無視されNULLで返ってきてしまいます。既定値の値を使用するようにする方法はどのようにすればよろしいでしょうか?

なお、プロパティ設定は
CursorLocation = clUseClient
LockType = ltOptimistic
などとなっています。

初歩的な質問で誠に恐縮ですが、宜しくご教授のほど宜しくお願いします。


Syake  2007-06-20 00:05:18  No: 26745

別段何をするわけでもなく、私が試した限りでは
正しく規定値で設定されますが・・・


ラーク  2007-06-20 00:45:54  No: 26746

Syake様

ご回答ありがとうございます。
テストアプリを作成し、試してみた結果、

  ADOTable2.Open;
  ADOTable2.Append;
    (この間はNULLで読込まれる)
  ADOTable2.Post;
  ADOTable2.Requery;
    (Postして読み込み直すとデフォルト値が反映される)
  ADOTable2.Close;

という状況が分かりました。
Append時点で既定値が入っていないと計算上支障が出るのですが、上手くそのようになりません・・・。


Syake  2007-06-20 02:21:53  No: 26747

Appendするとキャッシュされた!?DataSetの更新とmdbの直接更新します。
規定値はmdb側で設定されるだけなので、既に取得しているDatSetには規定値
は反映されないことになります。
あまり、この様な使い方をしないので詳細は不明ですが再読み込みしないと
駄目みたいです。

私が見たのはmdb直接でしたので回答がおかしくなりました。
すいません。


Syake  2007-06-20 02:38:33  No: 26748

>Append時点で既定値が入っていないと計算上支障が出るのですが、上手くそのようになりません・・・。
計算のタイミング等は不明ですので、回答になるかどうか・・・
ならば、面倒ですがAppendの後にADOTableに規定値を設定する記述をしてから
計算するようにすれば如何でしょうか?
PostもRefreshも不要です。


ラーク  2007-06-20 03:22:13  No: 26749

Syake様  度々恐れ入ります。

私が採用している計算方法は主に次のような感じです。
  ADOTable2.Append;(←OnNewRecordイベントでキー項目を設定)
      (この間にI/F若しくはプログラムで計算のパラメータを設定)
  ADOTable2.Post;(←BeforePostイベントで計算する)
BDEではこの方法で上手く行っていたのですが・・・。

やはりOnNewRecordイベント等で既定値を流し込む手法を採るべきなのでしょうか・・・。


ラーク  2007-06-20 03:23:36  No: 26750

追記。
BeforePostイベントには共通の計算ルーチンを入れてあります。


Syake  2007-06-20 04:09:27  No: 26751

>やはりOnNewRecordイベント等で既定値を流し込む手法を採るべきなのでしょうか・・・。
処理の流れ的に面倒ですが、この方法が最善かと私的(つたない技術レベル)には思います。(^_^;)
BeforPostイベントはいじらなくて良いし、OnNewRecordに追加記述だけで
すので・・・


ラーク  2007-06-20 04:33:11  No: 26752

Syake様

OnNewRecordの記述を試みます。
色々ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加