2011-08-16 11 views
0

私のプログラムはファイルからレコードを読み込み、ファイル内のレコードごとにDBから値を取得します。 Pro * Cプログラムでホスト変数を宣言しました。私はプログラム内で私の選択したクエリの1つでそのホスト変数を使用しました。変数のメモリはレコードごとにクリアされません。値を読み込んでホスト変数に格納する際に問題がありますか?

たとえば、最初のレコードの場合、sqlクエリは "ABCD"を取得します。次に、2番目のレコードに対して、クエリは "EFGHIJKL"を取得します。 3番目のレコードでは、DBの実際の値は "GHI"ですが、メモリはクリアされず、 "GHIHIJKL"が出力されます。

解決方法

答えて

0

NULバイトを含むデータを扱うことができるように、データベース呼び出しで指定された長さで作業する必要があります。

または、指定した長さで手動で文字列を終了します。これは "NUL-less"文字列でのみ機能します。

1

ここでは基本的に何をすべきですか?自動的に行うべきPro * Cのインライン設定もありますが、いくつかの問題がありましたので、私はこのソリューションを好んでいます。これはすばやく簡単です。

VARCHAR var[50+1];  /* Add 1 char more than the size of the queried column of the database */ 

EXEC SQL SELECT thing INTO :var WHERE /* whatever */ 

if(sqlca.sqlcode == 0) 
    var.arr[var.len] = 0;  /* Add the \0 char at the end of you var. 
関連する問題