旧バージョンとの非互換点

ここでは,旧バージョンとの非互換点のうち,運用上重要と思われるものについて列挙します。また,どのようにすればそれを回避できるのかも解説します。


書式の大文字小文字について

書式の機能文字の大文字小文字は,V3でも区別される仕様でしたが,一部区別されない実装がされていました。そのため,本来は間違った仕様外の指定でも,気付かれることがありませんでした。
V4では,これらが厳密に区別されるようになったため,旧バージョンから変換した表では意図どおりに書式変換されないことがあります。たとえば,時刻を表す hh:mm:dd や,日付を表す m/d などです。これらを,大文字で HH:MM:DDM/D などと書いている場合はうまくいきません。それぞれ正しい書式に書き換えてください。

また,全角の機能文字は,V3では半角に置き換えられて評価されていましたが,V4では区別されることがあります。たとえば,数値に対して全角で #0 と指定すれば全角の数字列が得られます。V3で無意識に全角で記述していた書式を,半角に変換する必要があるかも知れません。


<主キー>

V3では,"<主キー>" という名前の索引が存在することがありました。これは,表属性で指定された主キー索引に対して,システムが自動的に付けた名前です。V4では,表属性の主キーは廃止されました。V4で主キーを定義するには,入力必須項目に対して重複禁止の索引を作成します。その際,お好きな名前を付けられます。ただし,<〜> で囲まれた名前を付けることはできません。
V3から変換した表では,この "<主キー>" という索引は "_主キー_" (_ は半角空白) という索引名に置き換わっています。式中などで "<主キー>" を指定している場合は,DBProが自動的に置き換えていますが,V4で式中やDPLに書くときは,"_主キー_" と書くようにしてください。


選択ウィンドウでの整列

選択ウィンドウでの整列は,V3では,ウィンドウ上のレコードそのものを(物理的に)並べ替えていました。V4では,一時的に索引を作成して整列を行ないます。そのため,レコード挿入などに関しては,元の実表のウィンドウに対する操作と同一になりました。V3では,選択ウィンドウで整列してからレコード挿入しても,その整列順は保持されませんでした。

整列された選択ウィンドウ上で置換しようとする場合,V4では,その整列キーに関係する項目を置換することはできません。これは,索引を使用しているからです。整列してから選択すれば,その選択ウィンドウ自身は整列解除状態なので,どのような置換もできます。


整列時のレコード挿入位置

V3では,整列時のレコード挿入は,常に末尾に対して行なわれていましたが,V4ではそのときのセルカーソルのあったレコードの直前に挿入されます。これは,整列解除したときの並び順に影響します。


表引き対象表のオープンモード

V4では,表引き対象表は,それを参照している表のオープンモードによって,専有で開かれたり,共有で開かれたりします。V3では常に共有で開かれていたため,専有したくてもできませんでした。各種設定ダイアログの編集1ページの「専有編集時の表引き対象表」の指定で,V3と同様に常に共有でオープンすることができます。


カード編集時のカードファイルのオープンモード

V4では,カード編集時のカードファイルのオープンモードは,指定されたモードでオープンすることができます。そのとき,専有でオープンすれば,他の人はそのカードを使うことはできません。V3では常に共有でオープンされていたので,カード自身を専有することはできませんでした。各種設定ダイアログの編集1ページの「専有編集時のカードファイル」の指定で,専有時でも共有でオープンするかどうかを指定することができます。


グループ項目指定なしのときの表オブジェクト

V3では,グループ項目を指定していないときは,各レコードが別々のグループとみなされていましたが,V4では,全レコードが同じグループに属するとみなされます(ただしグループ計やグループ一括処理などの対象にはなりません)。そのため,V3で同機能を実現するために,作業用のグループ化項目を作成していた場合は,その項目を削除してください。動作が快適になります。


表オブジェクトとその外の項目オブジェクトについて

カード上に表オブジェクトを置いたとき,表オブジェクト外にある項目オブジェクトの指すレコードがV3とV4で異なります。
V3では,表オブジェクトの外の項目オブジェクトは,そのときのグループ先頭のレコードの値が表示されていました。つまり,同一グループ内であれば,表内のどこにセルカーソルがあっても表外には同じ値が表示されていました。項目オブジェクトがグループ化項目でなくてもグループ先頭のレコードの値が表示されていました。
V4では,表オブジェクト中のセルカーソルのあるレコードの値が表示されます。グループ化項目では,グループ内ではすべて同じ値なのでV3同様,表内のどこにあっても同じ値が表示されますが,グループ化項目でない場合は,セルカーソルの位置に応じて値が変化します。

DPLの場合,V3ではカーソルは表オブジェクト外の項目を参照するときは常にグループ先頭レコードを指すように調整されてしまっていました。V4ではそのようなことがなくなったため,表オブジェクト外の項目を参照するようなV3のDPLがV4ではうまく動作しない可能性があります。

たとえば,次のようなV3のDPLがあったとします。

構造コマンドパラメータ
  @csr がグループ先頭にあるとき
 カーソル移動@csr, レコード数 = -1, 開始位置 = 現在位置, 項目 = [表の外]

V3では,これでグループ先頭にカーソルが移動していましたが,V4では前のグループの最後のレコードを指すようになります。これは,次のように書き換えてください。

構造コマンドパラメータ
  @csr がグループ先頭にあるとき
 カーソル移動@csr, グループ数 = -1, 開始位置 = 現在位置, 移動位置 = 先頭, 項目 = [表の外]

DPLオープンステートメント

DPLのオープンステートメントの表示形式パラメータの省略時の意味は,V3.0からV3.2にかけて仕様変更され,V4ではV3.2と同じ意味になっています。V3.0では省略時は最後に保存したときの表示形式が採用されていましたが,V3.2からは標準表示形式が採用されます。V4では,表示形式=最終保存時の状態 を指定することで,V3.0と同等の機能を実現できます。V3.2ではできません。(4.01.0.719以降)


DPL読込みステートメント

DPLの読込みステートメントでの可変長テキストファイルの読込みに,空白削除パラメータが追加されました。V3にはこの機能はなく,常に削除されずに読み込まれていましたが,V4では既定値が削除されるようになっています。そのような場合は,陽に,空白削除=しない を追加してください。


DPL選択ステートメント

V4からカーソル同期という機能が組み込まれました。カーソル同期がオンになっていると,選択した直後のカーソル位置が元表の位置に連動します。DPLの選択ステートメントでも同様で,選択後のカーソル位置が,選択表の先頭になっていると仮定したプログラムではうまく動作しないことがあります。このようなときは,次のようにウィンドウ表示ステートメントであらかじめカーソル同期をオフにするか,

構造コマンドパラメータ
 ウィンドウ表示カーソル同期 = しない
 選択@csr, ...

選択後に次のように調整してください。

構造コマンドパラメータ
 選択@csr, ...
 カーソル移動@@, 開始位置 = 先頭, レコード数 = 0

DPLウィンドウ表示ステートメント

DPLのウィンドウ表示ステートメントのパラメータで指定したカーソル変数は,仕様上は変化しないことになっています。これは,V3でも同様ですが,実際のV3の動きはセルカーソル位置に変化してしまっていました。V4では,これを仕様どおりに変化しないようにしたため,V3で作ったDPLが,以前と異なる動きをすることがあるかも知れません。そのようなときは,V4で追加されたセルカーソル位置ステートメントを利用して,次のように調整してください。

構造コマンドパラメータ
 ウィンドウ表示@csr, ...
 セルカーソル位置@csr