VB6+oo4o を利用していたプログラムにてアプリケーションエラー


MASA  2007-09-04 10:02:39  No: 137318

教えて下さい。
VB6+oo4o を利用していたプログラムを修正しているのですが、
ORACLE6 のLONG型フィールドに 文字列を格納しているのですが、

 = オブジェクト.Field("LONG型の項目")

にて取得すると 「クライアントから切断されました」と表示され
VB自体がアプリケーションエラーにて 終了してしまいます。
項目の中に入っているデータ長が長い場合に発生している様にみえますが、
対応方法(取得方法)がわかりません。

ご存じの方がいらしたらご教授願います。

よろしくお願いいたします。


魔界の仮面弁士  2007-09-04 10:25:01  No: 137319

> ORACLE6
うわぁぉ。(^^;

> ORACLE6 のLONG型フィールドに 文字列を格納しているのですが、
格納は上手くいったのですね?

> = オブジェクト.Field("LONG型の項目")
OraField オブジェクトのプロパティを利用していないという事は、
  Set obj = オブジェクト.Field("LONG型の項目")
のように、OraField オブジェクトそのものを取得している部分でしょうか?

> にて取得すると
GetChunkメソッド の引数は、どのように指定していますか?


MASA  2007-09-04 16:21:35  No: 137320

お返事有難う御座います。
申し訳御座いません。 oracle6と記載しましたが、oracle9でした。

過去のプログラムの修正なので、調べてみましたが、

ワークエリア =  = オブジェクト.Field("LONG型の項目")

と記載すると アプリケーションエラーとなります。

GetChunkメソッドは そのメソットを使う前に 
oracle.Field.Value が isnull?という様なチェック項目を通過
した時点で同様のエラーになってしまいます。

以上 宜しくお願い致します。


MASA  2007-09-04 16:31:08  No: 137321

お世話になります。
続報ですが GetChunkByteメソットを使ってみました。
GetChunkByte の引数のサイズを 0,32768としてみましたが
同様の結果になってしまいました。

以上 よろしくお願いいたします。


魔界の仮面弁士  2007-09-04 16:57:28  No: 137322

> ワークエリア =  = オブジェクト.Field("LONG型の項目")
= = って?
Fields ではなく、Field?
オブジェクトって、具体的には何のことでしょう?

OraField オブジェクトそのものの取得であるならば、
取得には、必ず「Set」を使わねばなりません。
そうではなく、フィールド値の取得(Let)であるならば、
上記は NG です。OraField のプロパティ経由で値を得る必要があります。

oo4o は、DAO/ADO の場合と違って、デフォルトプロパティの実装が
微妙に異なるので、直接 OraField から値を読み書きしようとすると
失敗します。(偶然うまくいくこともありますが、それに頼るべきではない)

あと、VB そのものがクラッシュするような状況に置いては、
Oracle サポートに問い合わせて、最新の Oracle Client の
修正パッチがリリースされていないか、問い合わせるのも手かと。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加