sql >> データベース >  >> RDS >> Oracle

実行時エラー:-2147217887(80040e21) システムは、OraOLEDB のメッセージ ファイルでメッセージ番号 0x80040e21 のメッセージ テキストを見つけることができません

    このように多くのパラメータを使用すると、課題は任意になる可能性があります データ型、データ長などの不一致を含む 1 つの項目。ここで、デバッグと呼ばれる技術を行使する必要があります。

    <オール> <リ>

    テーブルのデータ型を注意深く確認してください (T_SAP_ZSSTABL_NEW )。 Oracle には、ADO タイプ BLOB など 、 CLOBBFILE 、高精度数値型、最大文字型、または拡張型 (XML、メディアなど)。

    <リ>

    データの長さを拡張してみてください (またはパラメーターの割り当てで空白のままにしてください):

    Set MyParameter =cmd.CreateParameter("MATNR", adVarChar, adParamInput, 100, POSNR)Set MyParameter =cmd.CreateParameter("MATNR", adVarChar, adParamInput, , POSNR)  

    必要に応じて、VBA の Len() で変数の長さを確認してください パラメータを追加する前にユーザーに警告を発します。

    <リ>

    SELECT を実行してみてください 同じパラメーターを持つクエリのバージョンを使用して、結果の単一行を返します。同じエラーが発生した場合は、最初のパラメーターから始めて、2 番目または 10 個のバッチを順番に追加して、問題のあるアイテムを分離します。

    <プレ>SELECT ? AS TSZ_CHARG_PARAM, ? AS TSZ_MATNR_PARAM, ? AS TSZ_MAKTX_PARAM, ...FROM T_SAP_ZSSTABL_NEWWHERE TSZ_VBELN =? AND TSZ_POSNR =? <リ>

    一貫性を保つためにコードをリファクタリングします。多くの繰り返し行で発生する可能性のある 1 つを見逃したり、ずれたりする可能性があります。常に DRY (Don't Repeat Yourself) コードを目指してください。 1 つのオプションは、辞書 160 以上の変数や名前付き範囲の代わりにキーと値のペアを使用:

    Dim key As VariantDim paramDict As ObjectSet paramDict =CreateObject("Scripting.Dictionary")For ... paramDict.Add "KeyX", "ValueX"Next ...... With cmd .ActiveConnection =myOracleConn .CommandText =strSQL .CommandType =adCmdText For Each key In paramDict.Keys .Parameters.Append .CreateParameter(key, adVarChar, adParamInput, , paramDict(key)) 次のキー .ExecuteEnd With  

    型が混在している場合は、型ごとに異なる辞書を作成し、それらを順番に繰り返してパラメーターを追加してみてください。 UPDATE を調整します すべての同じタイプが互いに近くにあります。 UPDATE を思い出してください テーブル定義の列の順序に従う必要はありません。

    <リ>

    可能であれば (または長期的な解決策)、TSZ のワイド フォーマット テーブルの再設計を検討してください。 列を長い形式の正規化された形式に変換します。

    ID POSNR VBELN Indicator Value # XXX XXX CHARG XXX # XXX XXX MATNR XXX # XXX XXX MAKTX XXX...  

    これにより、一意の識別子ごとに 167 行が追加されますが、データベース設計では、行は列よりもはるかに安価であるため、クエリが容易になり、データ ストレージがよりスケーラブルになり、メンテナンスがより効率的になります。たとえば、新しいメトリクスには、すべてのメタ情報を含む新しく定義された列は必要なく、単に新しい行が必要です。そして、Oracle の PIVOT を使用 ワイド フォーマットを簡単に再レンダリングできます。

    全体として、データベース接続などの API 拡張から発生するこのような実行時エラーをデバッグする明確な方法はありません。 SQL 構文または VBA オブジェクトの参照は簡単に処理できますが、データ固有の問題については、プロセス全体を創造的に掘り下げる必要があります。



    1. 「Automysqlbackup」および「Autopostgresqlbackup」ツールを使用してMySQL/MariaDBおよびPostgreSQLをバックアップ/復元する方法

    2. AND / OR Search Django-Postgres Appを実行するための効率的な方法は何ですか?

    3. ワイルドカードを使用したLIKEを使用したパラメーター化されたクエリの適切なPDO構文(例:%、_)

    4. 列Aの条件が満たされた場合は、列Aの行に列Bの値を入力します。