Q. 変数が未定義などと以前動いていたプログラムが突然動かなくなった?
最近の新しい機種のDOSでは拡張メモリのハンドリングがおかしいようです。 DOSのバージョンを古いのに戻してみてください。 他の機種で動作していた物が動かないときはSET SPLDRVの確認とメモリー領域が十分有るか、それでも動かないのはDOSの移植のBUGです。
Q. Windows 95のDOSから印刷ができない?
A. DOSで使うプリンタードライバーがセットアップされていますか?
DOSプロンプトからPRINTコマンドで正常にプリントできるか確認ください。
Networkでプリンターが正常に動かないときが有ります。MSでは問題がわかっているようですのでもう新しいサービスパックでは修正されていると思います。
Q.プログラムの実行時にメモリ不足になる。
A.DOSの場合、まずCHKDSKコマンドやMEMコマンドを使って、フリーエリアの大き さを調べてください。dBXL/QuickSilver 1.5の場合、少なくとも450KB~500KBのフリーエリアが必要です。Arago dBXL/QuickSilverの場合500KB~550KBのフリーエリアが必要 です。
<環境を整える方法>
AUTOEXEC.BAT・CONFIG.SYSの中からいらないデバイスをはずすなどしてフリーエリ アを確保するようにしてください。環境を整えるには、MEMMAKERを使用して自動設定さ せるのもよい方法です。また、EMS内などでコンフリクトを起こしている可能性があると き、MS標準のもの(EMM386)などを使用してみてください。
<プログラミング>
プログラムを実行してメモリ不足のエラーが発生するときは、MEMORY()、WAITなどを 使用してメモリの状況を複数個所で調べてみてください。その値が極端に減っているとき、 ファイル(データベース、インデックス)のオープン数に注意してください。dBXL/ QuickSilverの場合、ファイルを1つオープンするごとに約4KBのメモリを使用します。 Aragoの場合、データベースをオープンすると約4KBのメモリを使用し、インデックスを オープンすると約1KB(EMS未使用時約2KB)のメモリを使用します。また、メモリ 変数(特に配列変数)の使いすぎにも注意してください。基本的には、ファイルは必要な時に オープンし、必要がなくなったらクローズする、メモリ変数はRELEASEするようにしてく ださい。
また、QuickSilver 1.5、Arago QuickSilverを使って、.EXEを作成する場合、それぞれの
.PRGファイルが小さくなるようにしてください。QuickSilver
1.5、Arago QuickSilverどち
らもオーバーレイ構造の.EXEファイルを作成しますが、オーバーレイは、.PRGの単位で行
われます。したがって、.PRGのサイズが大きいとメモリの効率は悪くなります。
Q.数値の丸め誤差について
A.dBXL/QuickSilver、ARAGOで小数点以下の数値を扱った場合に不正確な値を返すことが あります。数値は内部では2進数に変換されて扱われていますが、小数点以下の数値を含んだ 10進数を2進数に変換すると完全には変換されずに誤差が生じる場合があります。これを丸め 誤差といいます。
通常の計算ではこの誤差は気にする必要はありません(誤差は十分に小さいもので、その値 を10進数に変換するときに相殺されるので)が、INT()やROUND()などの数値関数を使用し たり、小数点以下の数値を使って何回も計算を繰り返したときに、誤差が出てしまいます。
このような場合には、あらかじめ数値を10倍、100倍にして小数点以下の数値が入らない ようにして計算を行なうか、次の関数ファイルのように、数値を一度文字列に変換して文字列 操作で数値関数と同様の処理を行い、その結果を数値に変換すると良いでしょう。
* 関数ファイル UDF1.PRG
FUNCTION Iint
PARAMETERS value
PRIVATE temp, tmp
temp = STR(value, 12, 3)
temp = LEFT(temp, len(temp)-4)
tmp = VAL(temp)
RETURN tmp
* メインプログラム IINT.PRG
SET TALK OFF
SET UDF TO udf1
? iint(2.98+0.01+0.01)
このプログラムでは、整数部8桁、小数部3桁の数値を処理します。それ以外の桁数のと きは次の行を変更してください。
temp = STR(value, 12, 3)
temp = LEFT(temp, len(temp)-4)
Q.西暦2000年以降の日付型データの対応について
A. dBXL/QuickSilver1.5でSET CENTURY OFFにしているときは、日付型の年の部分は2桁対応しているだけですので、Xbase言語 の仕様として1900年代の日付型データのみ対応しています。2000年以降の日付型デー タを利用するときはSET CENTURY ONにしてください。1899年以前のデータはサポートしていませんので、日付型を使用せず文字 型として扱ってください。尚、ARAGOシリーズでは9999年のデータまで対応してい ます。
Q.ESC/Pプリンタで漢字:ANKの印字比率を2:1に設定する
A.次のプログラムは、DOS/V上でESC/Pプリンタを使用したとき印字比率を2:1に変更し ます。(制御コードについてはプリンタのマニュアルを参照してください)
??? CHR(27)+"@"
??? CHR(27)+CHR(32)+"{0}"
??? CHR(28)+"S"+"{0}"+CHR(12)
??? CHR(28)+"T"+"{0}"+CHR(7)
あるいは、次のように記述することもできます。(どちらも同じコードを送っていま す。)
??? "{ESC}"+"@"
??? "{ESC}"+CHR(32)+"{NULL}"
??? "{28}S{NULL}{12}"
??? "{28}T{NULL}{7}"
Q.QuickSilverで作成したアプリケーションの必要メモリの計算方法
A.メモリ不足で問い合わせを受けたとき、EXE実行時の必要メモリの計算方法をよく聞かれます。リンカーOPTOVLのMAPオプションを使って計算する方法が、マニュアルに記載 されていますのでそれを参考にして計算してください。(Using QuickSilver 1.5の4.31)
Q.QuickSilverでエラー22、23、24、25、26、27が発生する
A.これらのエラーは状況がそのエラーに該当しないとき、メモリ不足が原因で発生しているこ とがあります。フリーエリアを増やしてみてください。
Q.Arago QuickSilverでプログラムのコンパイル時にメモリ不足になったり、ハングアップ してしまう。
A.-Aオプションを指定して複数のプログラムを連続してコンパイルした場合、メモリ不足に なってしまうことがあります。
面倒になりますが、-Aオプションを使わずにPRGごとにコンパイルするか、メインプログ ラムからではなく、サブプログラムからコンパイルするようにしてください。また、リンクパ ラメータファイル(.LNK)の変更もお願いします。
Q.Netware3.12上で動作がおかしい。
A.Network OSが、MS-DOS3.1以降のネットワークファンクションコールをサポートしてい る場合、1.5シリーズ、Arago Dos/Windowsでは、正常にネットワーク機能が使用できるはず です。Netware3.12上での動作はまだ調査中ですが、一部のプロトコルドライバが、 LIM3.0規格に対して正常に動作してないようです。そのため、データベースを扱ったときに メモリをこわしています。もしお困りの方はしばらく Netware3.11を使用してくださるようお願いいたします。また、Windows95上で動作がおかしいときは、Windows95のディレクトリにあるNetwork.txtをご覧ください。
Q.起動時に、Initialize errorになってしまう
A.コンベンショナルメモリのフリーエリアが512KBより少ないと、起動時にInitialize errorになってしまいます。
Q.Runtime error #201になる
A.次のような場合にRuntime error #201が発生します。
1)PARAMETERSコマンドがプログラムの先頭に記述されてる場合
2)REPORT FORMコマンドを使用している場合
この場合、メニューの[R/]の中のレポートフォームサマリーの出力をしない設定にして ください。
3)一行のコマンドラインの長さが254文字を超える場合
4)IF、DO WHILEでコマンド名のすぐ後にカッコ“(”がある場合。
IF(a=1)やDO WHILE(.not. EOF())とした場合。IF (a=1)、DO WHILE (.not. EOF())のようにIF、WHILEの後ろにスペースが空いていれば、エラーになりません。
SET SPLDRV=PC9801でのInitialize error、PARAMETERSコマンドについての不具合は、NIFTY-serveのSSPLフォーラムの データライブラリ #7 その他 [SPL Upload]に修正分の差分ファイルをアップロードしてあり ます。
また、フロッピーディスク(手数料\1,545 税込切手可)でも提供いたしますので、手数料を添えて営業部宛にお申し込みください。