新規投稿 記事一覧 ホーム
●ご利用方法,ご利用に際しての規約はこちらをお読みください。
こちらからの投稿は、先頭に表示されているコメントへの返信になります。
PRIMARY_KEYについて KUMA さん [ 5月29日(火) 13時36分 ]

    こんにちわ。教えてください。
    VB.NETよりDB400へアクセスして更新するアプリを初めて開発しています。
    既存のDBはDDSより作成されておりPFには一切KEYを付けず論理FのみにKEY設定されています。

    DATASETで更新する為にはPRIMARY_KEYが必要ですが、既存PFにはKEYがありません。
    現在はSQLのUPDATEで更新をしていますが大変面倒です。

    後からPRIMARY_KEYは追加することは出来るのでしょうか?
    ALTER TABLEでは追加できませんでした。
    ところがSQLから作成したTABLEではPRIMARY_KEYの追加が出来ました。
    調べてみたところDDSとDDLで作成したTABLEは似てはいるが別物?のようです。

    結局のところPFにKEYを追加して再作成するかDDLで再作成するかしか手がなさそうなのですが
    TABLE作成時に指定するしか手がないのでしょうか?
    良い方法があればご教授願えれば大変助かります。

    RE:PRIMARY_KEYについて IKD さん [ 5月29日(火) 15時33分 ]

      ご指摘の問題はVBによる開発だけではなくデータ・ベースを
      キーなしで作成した当初の設計に問題があります。

      確かにキーなし物理ファイルに複数のアクセス・パスの論理ファイルを
      ぶら下げることはできますので昔、一時期に物理ファイルをキーなしで
      作成するように指導した○○がいたようで、根拠のない構成のために
      後で多くの開発者やユーザーが不便を強いられることになります。
      キーなし物理ファイルを作成する合理的な利点はありません。

      それはともかく物理ファイルにぶら下がっている論理ファイルのどれかが
      物理ファイルのレコードを「一意的」に識別できるキーを持つ論理ファイルが
      存在しているはずです。

      これを調べるのは面倒ですが

      (1) DSPDBR コマンドによって従属論理ファイルを調べる

          [例] DSPDBR MYLIB/MYFILE
          [例] DSPDBR MYLIB/MYFILE OUTPUT(*OUTFILE) OUTFILE(QTEMP/DSPDBR)

      (2) 上記の従属論理ファイルのひとつひとつに対してアクセス・パスを調べる

          [例] DSPFD MYLIB/MYLF TYPE(*ACCPTH)

           ----> この中で「固有キー値が必要」(UNIQUE     YES) と指定されている
            論理ファイルが見つかれば、それが求めるPRIMARY_KEYを持つ
            論理ファイルです。
            この論理ファイルのアクセス・パスを PRIMARY_KEY として
                 VB を開発してください。

         
       

      RE:PRIMARY_KEYについて KUMA さん [ 5月29日(火) 16時1分 ]

        お返事ありがとうございます。

        ご指摘の通り物理FにKEYがないのは古くからの名残のようです。
        基本設計が20年以上前の基幹システムなので、クラッシュ&ビルドが早急に必要で
        今回のVB.NETでの開発もそれの足がかりなのです。

        UNIQUEキーは殆どの場合論理ファイルの1番目(FILEL01)に設定されていることが分かっていま
        す。
        しかしVBでFILEL01を指定しても実行段階で「物理ファイルでない」というエラーになってしまいま
        す。
        よって物理Fにキー設定が必要なのだと思っています。

        Iシリーズナビゲータで索引の追加は可能で論理Fとして作成されます。
        しかしPRIMARY_KEYはALTER TABLEで通常追加できると思いますが、実行してもエラーになりますし
        マニュアルを読んでもADDはありません。なぜかDROPはあります。
        http://publib.boulder.ibm.com/html/as400/v4r5/ic2962/info/db2/rbafzmstatabl.htm

        キーの設定に関係なくレコードbヘ自動的に振られていますが、これをPRIMARY_KEYには出来ないの
        でしょうか?

        物理Fの再作成しか道はないように思えてきました。

        RE:PRIMARY_KEYについて IKD さん [ 5月29日(火) 18時29分 ]

          「VBでFILEL01を指定しても実行段階で「物理ファイルでない」というエラー」と
          ありますが、そのエラー・メッセージID 等の詳細はわかりますでしょうか ?
          確かに SQL や ODBC の場合、物理ファイルと論理ファイルは明確に区別されますが
          i5/OS では基本的に論理ファイルを更新することが可能ですので
          SQL での制約があったとしても 基本的には論理ファイルからの更新もできるはずです。

          レコードbヘ DB2/400 では RRN (=レコード番号) というもので
          レコードの中の項目とは定義されていませんので出力用の項目とすることは
          できますが、キーとすることはできません。

          物理ファイルの再作成はリスクをかなり伴います。
          複数メンバーの場合や物理ファイルのサイズが拡張されていることも
          あり、また従属論理ファイルがどのような構成されているかを
          慎重に調べる必要があります。
          何より関連するプログラムへの影響も考慮しなければなりません。
          レイアウトやデータに変更がなくても、ファイルが LVLCHK=*YES で
          再作成されれば、たちまちプログラムからのアクセスは OS によって
          拒否されてしまいます。

        DDS ASD さん [ 6月1日(金) 10時56分 ]

          QDDSSRCをキー付きに変える。
          CHGPFをする。
          うまくいけば、データはそのまま、論理ファイルもそののまま。
          レベル識別も引き継ぐ。

お名前
パスワード
e-mailアドレス
タイトル
ホームページ
アドレス