次の方法で共有

Access2010(adp)で新規レコードの既定値を読み込まない現象について

Anonymous
2010-10-22T06:14:59+00:00

Access2010のadpでのみ発生している現象がバグなのか、仕様変更なのか皆さんの対策を教えてほしいです。

確認環境

1.Access2007(accdb)+SQL Server 2005 Standard Edition

2.Access2010(accdb)+SQL Server 2005 Standard Edition

3.Access2007(adp)+SQL Server 2005 Standard Edition

4.Access2010(adp)+SQL Server 2005 Standard Edition

発生している現象

Access2010(adp)(上記4の環境)のみ新規レコードに、SQL Serverテーブルの各フィールドに設定した既定値を読み込んでいない。

テーブルの既定値を設定していない場合、今まで(上記1~3の環境)は、新規レコードの各フィールドには「Null」値がセットされていました。それをNz関数で処理している部分があったのですが、Accees2010(adp)のみは「''」(長さ0の文字列)がセットされています。

2007(adp)で作成したアプリケーションを2010で実行した場合に発見し、仕様変更であれば修正するしかないのですが、影響範囲が大きいので迷っています。

すでにこの問題を認識していて、こういう対応をしたという方がいれば教えていただきたいです。


フリー・スタイル有限会社 塩谷 忠士

*** プライバシー保護の観点より、電子メール アドレスが削除されました ***


Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

5 件の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2010-10-28T18:00:04+00:00

    こんばんは。

    SQLServer2008R2を触る機会があったので、ちらっと試してみました。a2010+adpだと規定値がとれないっす。フォームで確認するとEmptyでDirty時になって初めて取得できてるっぽく見えます。

    a2007+adpだと今迄通りの使用方法で大丈夫そうな感じで。きっとa2010固有の問題って気がします。

    サポートに問い合わせてガッツリ要求されたらよいと思います。『仕様です。』っていう回答にはきっとならないでしょうけど、声が多くないと動きが遅いと思います

    UltraAccess.comでも同じ内容のスレッドを見かけました。同じ思いの人は海の向こうにもいらっしゃるっていうことで。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2010-10-28T13:32:35+00:00

    塩谷です。皆さん、いろいろと検証していただきありがとうございます。

    自分で投降しておきながら返事が遅れましたこと申し訳ありません。

    私はadpはAccess2000の頃から使用しており、伝票入力画面などで、表示している伝票から前に入力した伝票に移動する部分などで、ボタンのクリック時のコードに

    select top 1 伝票番号 from 売上入力伝票 where 伝票番号<Nz(Me![伝票番号],9999999999) order by 伝票番号 desc

    と使用していました。空白伝票は新規レコード(空レコード)をセットしていましたので、上記のSQLでは最終の伝票番号が表示されるようにしていました。

    この場合は、Nz関数でレコードセット上の伝票番号は「Null」で返ってこないと都合が悪いのです。

    上記のようなNullの場合に、最小値や最大値を当てている処理は皆さんもよくやりませんか?私も正直なところバグとして修正してほしいのです。


    フリー・スタイル有限会社 塩谷 忠士

    *** プライバシー保護の観点より、電子メール アドレスが削除されました ***


    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2010-10-26T01:11:57+00:00

    再現手順について

    1 テーブルA を作成する

    2 フィールド コード char(5),名前 varchar(20)を作成してコードを主キーとする

    3 テーブルAの帳票フォームを作成する。

    4 ボタンを配置してクリック時のイベントで

        If IsNull(コード) Then MsgBox "Null"

        If IsEmpty(コード) Then MsgBox "Empty"

    ↑のコードを作成する。

    5 新規レコードの箇所でボタンをクリックすると「Empty」と表示される。←なぜか?????

    VBAでNz([コード],"")と処理している箇所については問題ないけど、Nz([コード],[""以外の既定値])とかやってるとうまくいかない。

    当初なやみました^^;;

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. Anonymous
    2010-10-26T00:57:06+00:00

    バグだと思っています。

    私も同じ現象を経験しました。

    結局IIFで判断したと思います。

    IIf(Nz([テキスト], "") = "", 既定値, [テキスト])

    ↑のような感じです。

    accdbではこの現象はおこりません。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  5. Anonymous
    2010-10-25T07:25:14+00:00

    塩谷 忠士 さん、こんにちは。

    私の方でも、Access 2010 + SQL Server 2005 Standard Edition で以下のような手順で試してみました。

     1. 新規 adp ファイルを作成し、SQL Server の TEST データベースと接続

     2. テーブル(T_TEST)を作成し、あるフィールドのデータ型を "text” とし、既定値の設定を "なし(NULL)" に設定

     3. T_TEST に対し、新規レコード追加("text" フィールドには何も入力しない)

     4. ビュー(V_TEST) を作成し、T_TEST を追加し、 "text" の抽出条件に 長さ 0 の文字列 '' を指定

    結果、抽出条件 = '' では、抽出結果は 0 件となり、Null を抽出条件にした場合では 1 件となりました。

    新規でレコードが追加された場合、私の方では、規定値の設定していないフィールドには Null が入りました。

    もしよければ、塩谷 忠士 さんの方で具体的のどのように設定したフィールド(データ型等)がどのような場面でレコードを追加したとき、 長さ 0 の文字列 '' がセットされるのかがわかると、みなさんからのアドバイスも集まってくるのかなと思いました。

    塩谷 忠士 さんの返信、お待ちしています。


    石田 優 – Microsoft Support

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません