DOBON.NETプログラミング道掲示板
(現在 過去ログ1 を表示中)

[ 最新記事及び返信フォームをトピックトップへ ]

■33259 / inTopicNo.1)  Windows10+VB6+oo4o で 更新不具合
  
□投稿者/ 3時 一般人(1回)-(2016/02/26(Fri) 11:43:36)
  • アイコン環境/言語:[Windows10(64bit) VB6.0 Oracle Client11g] 
    分類:[VB6以前] 

    環境
    OS:Windows10(64bit)
      Oracle Client11 oo4o接続
    サードパーティ:Spread6.0
    ※Oracle Client11/Spread6.0は Windows10(64bit)のサポートがないことは認識済

    上記環境で、Spread上で入力した値を DBへ登録する処理を行っています。
    登録処理は正常に行われたと思っていましたが、実際データが一部欠けて登録されていました。
    入力内容:test001
    DB更新内容:tes

    デバックしたところ、Spreadからは test001とデータがとれているようにみえます。
    また、DbExecuteSQL処理を行う前の値でも test001とデータがとれているようにみえます。

    サポートがないからしょうがない!といわれれば何もいえませんが・・・

    他に調査内容・対応案など 教えて頂きたく。

    ※WPF化への開発を、現在進めています。

    ※現場対応のため返信が遅くなります。



引用返信 削除キー/
■33260 / inTopicNo.2)  Re[1]: Windows10+VB6+oo4o で 更新不具合
□投稿者/ 3時 一般人(2回)-(2016/02/26(Fri) 11:47:01)
  • アイコンNo33259に返信(3時さんの記事)
    > 環境
    > OS:Windows10(64bit)
    >   Oracle Client11 oo4o接続
    > サードパーティ:Spread6.0
    > ※Oracle Client11/Spread6.0は Windows10(64bit)のサポートがないことは認識済

    追記
    ・Windows7(32bit)では動作可能でした。
    ※Oracle Client11/Spread6.0は Windows10(64bit)のサポートがないことは認識済
    Windows7でも動いたので Windows10でも問題ないかな〜と思っていました。
引用返信 削除キー/
■33261 / inTopicNo.3)  Re[2]: Windows10+VB6+oo4o で 更新不具合
□投稿者/ 魔界の仮面弁士 大御所(1009回)-(2016/02/26(Fri) 12:35:46)
  • アイコン2016/02/26(Fri) 16:52:52 編集(投稿者)

    No33260に返信(3時さんの記事)
    > ・Windows7(32bit)では動作可能でした。
    それぞれの環境で、NLS_LANG 等の設定が違っているということはないでしょうか。


    ところで、Spread上で入力した値は
    「どういうコードで」DBへ登録しているのでしょうか。

    それと、一部欠けたデータというのは、具体的にはどのようなものでしょうか。

    データ内容あるいは入力手順が一緒の場合、全く同じ欠け方になるのでしょうか。

    それとも、OS 環境さえ条件を満たせば、データ内容に関係なく
    同じような問題を起こしているのでしょうか。


    過去のバージョンではありますが、Oracle Client の不具合で、
    行数が特定値の倍数だった場合に EOF 判定が間違ってしまう問題や、
    OS によって、StrConv の動作が変わっているという問題、
    「""」と「vbNullString」で処理結果が異なるケースや、
    Field オブジェクトの Value プロパティを省略して誤動作するケース、
    ドライバ等の更新で解決したケースなど、多種多様な障害を経験しています。

    実環境をお持ちの3時さん側で、まずは問題箇所の切り分けを行ってみてください。

    # サポートの終了した製品を使っている以上、
    # その切り分けは自力で行うしかないわけで…。
引用返信 削除キー/
■33263 / inTopicNo.4)  Re[3]: Windows10+VB6+oo4o で 更新不具合
□投稿者/ 3時 一般人(3回)-(2016/03/01(Tue) 12:00:28)
  • アイコン魔界の仮面弁士さん返信ありがとうございます。
    No33261に返信(魔界の仮面弁士さんの記事)
    > ■No33260に返信(3時さんの記事)
    >>・Windows7(32bit)では動作可能でした。
    > それぞれの環境で、NLS_LANG 等の設定が違っているということはないでしょうか。
    確認しましたが すべて同じでした。

    >
    >
    > ところで、Spread上で入力した値は
    > 「どういうコードで」DBへ登録しているのでしょうか。
    >
    抜粋して以下のコードになります。
    Dim strData() As String
    Dim strSql As String
    ReDim strData(Me.spdList.MaxCols)

    strSql = "INSERT INTO TableA ("
    strSql = strSql + & " 社名,"
    strSql = strSql + & " 住所"
    strSql = strSql & " ) VALUES ("
    strSql = strSql & " '" & strData(COL_CorpNm) & "',"
    strSql = strSql & " '" & strData(COL_CorpAddress) & "'"

    oracleDB.DbExecuteSQL(strSql)

    > それと、一部欠けたデータというのは、具体的にはどのようなものでしょうか。
    >
    > データ内容あるいは入力手順が一緒の場合、全く同じ欠け方になるのでしょうか。
    >
    > それとも、OS 環境さえ条件を満たせば、データ内容に関係なく
    > 同じような問題を起こしているのでしょうか。
    >

    ※対象のPCは 70台(すべて Windows10)
    ※64bit65台 32bit5台

    入力内容が欠けたOS(下記以外の Windows10はこれから行う予定)
    Windows10(64bit) 4台
    Windows10(32bit) 1台
    ※手順等はすべて同じ

    セルに入力した値を(セルは特定のセルではなくランダム)
    ・test001
    ・猫山商事
    ・テストデータ(半角カタカナ※1)
    対象のテーブルをSelectした結果
    ・tes
    ・猫山商
    ・テストデ(半角カタカナ※1)

    ※1 投稿時に、半角カタカナで入力することができないので。

    上記ソース上で、DbExecuteSQLの実行前のデバックでは、確かに
    test001(他入力した値)とウォッチした結果格納されていました。

    問題は、DbExecuteSQL後に何かしらの問題で データが一部欠けて登録されていると思っています。


    >
    > 過去のバージョンではありますが、Oracle Client の不具合で、
    > 行数が特定値の倍数だった場合に EOF 判定が間違ってしまう問題や、
    > OS によって、StrConv の動作が変わっているという問題、
    > 「""」と「vbNullString」で処理結果が異なるケースや、
    > Field オブジェクトの Value プロパティを省略して誤動作するケース、
    > ドライバ等の更新で解決したケースなど、多種多様な障害を経験しています。
    >
    ググって参照してみます。

    > 実環境をお持ちの3時さん側で、まずは問題箇所の切り分けを行ってみてください。
    >
    > # サポートの終了した製品を使っている以上、
    > # その切り分けは自力で行うしかないわけで…。
    これは十分認識しています。。。
    oracle12clientにあげることで対応できるかなぁ〜と思っていましたが
    oo4oが使えなくなるので・・・。



引用返信 削除キー/
■33264 / inTopicNo.5)  Re[4]: Windows10+VB6+oo4o で 更新不具合
□投稿者/ 魔界の仮面弁士 大御所(1010回)-(2016/03/01(Tue) 14:19:48)
  • アイコンNo33263に返信(3時さんの記事)
    > strSql = strSql & " '" & strData(COL_CorpNm) & "',"
    strData の中身はサニタイズ済みの文字列なのですね。


    > ※64bit65台 32bit5台
    > 入力内容が欠けたOS(下記以外の Windows10はこれから行う予定)
    > Windows10(64bit) 4台
    > Windows10(32bit) 1台
    > ※手順等はすべて同じ

    残りの64bit×61台と32bit×4台は、
    現象が再現しなかったのではなく、
    現時点で未評価ということでしょうか?



    > 対象のテーブルをSelectした結果
    > ・tes
    > ・猫山商
    > ・テストデ(半角カタカナ※1)

    化け方に共通点が無いですね…。
    対象フィールドの型は何ですか?
     ・データ型(NVARCHAR2、VARCHAR2、CHAR、NCHAR 等)
     ・長さおよびセマンティクス(BYTE、CHAR)
     ・データベースの文字コード

    最初は、データ長かなと思ったのですが、
    JA16SJISTILDE, AL32UTF8, AL16UTF16 それぞれで
     ・猫山商  → 6 バイト、9 バイト、6 バイト
     ・テストテ゛→ 5 バイト、15 バイト、10 バイト
    となるわけで、統一性がないですし…何でしょうね。

    ただ、実際に Oracle に渡されるまでの間に、
    ・OS の文字コード変換(大抵は ANSI 変換が入る)
    ・oo4o の文字コード変換(設定次第では無変換な場合もある)
    ・Oracle 側の変換処理
    の 3 段階が起きますので、その中のいずれかで問題を起こしている可能性はありそうです。


    INSERT SQL の VALUES に渡す内容を
     strSql = strSql & " '" & strData(COL_CorpNm) & "',"
    ではなく、
     strSql = strSql & " UTL_RAW.CAST_TO_VARCHAR2( HEXTORAW( 'C3BDC4C3DEB0C0' ) ),"
    にしてみたらどうなりますか?

    上記では、JA16SJISTILDE フィールドに対して、
    半角カナ 7 文字の「テストテ゛ータ」を渡しています。



    > 上記ソース上で、DbExecuteSQLの実行前のデバックでは、確かに
    デバックではなく
    デバッグ(debug)という重箱隅なツッコミはさておき:


    > test001(他入力した値)とウォッチした結果格納されていました。
    生成した SQL 文字列自体に正しい値が入っているのであれば、
    >>> サードパーティ:Spread6.0
    は原因から除外できることになりそうです。

    Spread を使っていない実験プロジェクトを作成し、
    そこから同じ SQL を発行してみてください。

    なお、VB6 の文字列処理(StrConv なども含む)は、exe のプロパティの
    「互換性」タブ - [互換モード] で、結果が変化することがあります。
    駄目元で、互換モードの OS 設定を変更してみては如何でしょうか。


    > ググって参照してみます。
    問題が oo4o または Oracle Client にあるとすれば、
    google 検索では、情報を得にくいかもしれません。

    Oracle のパッチ情報は、サポート契約を結んでいないと提供されませんし、
    その内容を blog 等で公開することも許可されていませんので…。


    > oo4oが使えなくなるので・・・。
    環境設定の問題なのか、ミドルウェアの問題なのかを切り分けるため、
    まったく同じ SQL を、
     ・oo4o
     ・DAO ODBCDirect
     ・RDO
     ・ADODB MSDAORA
     ・ADODB OraOLEDB.Oracle
    などの別の環境で実行してみると如何でしょうか。



    《以下蛇足》
    > strSql = strSql & " '" & strData(COL_CorpAddress) & "'"

    VALUES 句末尾の閉じ括弧が無いようです。


    > strSql = strSql + & " 社名,"
    「+ &」というのは何でしょうか?

    元のソースには、間に何か情報があったのかも知れませんが、
    それでも「& &」になるべきで、文字列結合で、+ と & を
    混在させるメリットは何も無いですよね。(^^;


    > oracleDB.DbExecuteSQL(strSql)
    これだと、
     Call oracleDB.DbExecuteSQL((strSql))
    に相当する意味になってしまいます。

    今回は VB6 なので、
     oracleDB.DbExecuteSQL strSql
     rowcount = oracleDB.DbExecuteSQL(strSql)
     Call oracleDB.DbExecuteSQL(strSql)
    などが本来の記述方法です。
引用返信 削除キー/
■33265 / inTopicNo.6)  Re[5]: Windows10+VB6+oo4o で 更新不具合
□投稿者/ 3時 一般人(4回)-(2016/03/01(Tue) 14:58:52)
  • アイコン魔界の仮面弁士さん返信ありがとうございます。

    > 残りの64bit×61台と32bit×4台は、
    > 現象が再現しなかったのではなく、
    > 現時点で未評価ということでしょうか?
    はい。 今週中にすべての対象PCを検証します。

    >>test001(他入力した値)とウォッチした結果格納されていました。
    > 生成した SQL 文字列自体に正しい値が入っているのであれば、
    > >>> サードパーティ:Spread6.0
    > は原因から除外できることになりそうです。
    >
    > Spread を使っていない実験プロジェクトを作成し、
    > そこから同じ SQL を発行してみてください。

    午前中に、テキストボックスの値を取得し、同じSQLを使ったところ
    データが欠けることはありませんでした。
    (Spreadを使わず すべて テキストボックスとして入力)

    また、以下のテストも行いました。
    >  ・oo4o
    >  ・DAO ODBCDirect
    >  ・RDO
    >  ・ADODB MSDAORA
    >  ・ADODB OraOLEDB.Oracle
    上記のRDO
    SQL文は 一緒のを使い データが欠落されないことを確認しました。

    > なお、VB6 の文字列処理(StrConv なども含む)は、exe のプロパティの
    > 「互換性」タブ - [互換モード] で、結果が変化することがあります。
    > 駄目元で、互換モードの OS 設定を変更してみては如何でしょうか。
    こちらも試してみたのですが 結果がかわることはありませんでした。


    > 《以下蛇足》
    そのままコピペできなかったので、手入力で誤字脱字を・・。
    また、本来の記述方法を教えてもらいありがとございます。

    現在、開発チームと協議中です。





引用返信 削除キー/
■33266 / inTopicNo.7)  Re[6]: Windows10+VB6+oo4o で 更新不具合
□投稿者/ 3時 一般人(5回)-(2016/03/01(Tue) 15:16:32)
  • アイコン魔界の仮面弁士さん。

    > 現在、開発チームと協議中です。
    協議中に、チームメンバーが 以下の対応を行うことで 欠落データがなくなりました。

    Windows7 で作成した EXEを
    Windows10で作成した EXEで上書き。

    メンバーによると

    ソースの変更はなし。
    開発環境を Win7⇒Win10に移行し、Exeの再作成をしただけ。

    といってました。
    (この情報は どこから入手したの?と確認しましたが 覚えてないと・・・)

    また Spread6.0は Windows10では 動作が少しおかしいこともわかりました。
    (スクロール幅極端に細くなる・表示幅に余分な幅・余分なヘッダー等)

    動作の保障がないので しょうがないということで・・・。


    今回の問題は データの欠落でしたので、この問題が解消された?っぽいので
    しばらくはこれで 様子をみようと思います。
    (新規開発が終わるまで)

    ありがとうございました。

解決み!
引用返信 削除キー/
■33268 / inTopicNo.8)  Re[7]: Windows10+VB6+oo4o で 更新不具合
□投稿者/ 3時 一般人(6回)-(2016/03/01(Tue) 17:58:32)
  • アイコン> 動作の保障がないので しょうがないということで・・・。
    >
    >
    > 今回の問題は データの欠落でしたので、この問題が解消された?っぽいので
    > しばらくはこれで 様子をみようと思います。
    > (新規開発が終わるまで)
    >
    > ありがとうございました。
    >

    上記、まったくの勘違いでした。

    代用プログラムで対応することで 一時しのぎし、原因は ひとまず
    サポート対象外のため で 落ち着こうと思います。



解決み!
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/


- Child Tree -