1

VB6 (32 ビット - 1998) エラー 3061 - Windows 7 - アクセス 2007 - Excel 2007

ACCESS 2007 データベースからレコードを抽出し、それらを EXCEL 2007 シートに書き込む VB6 プログラムを作成しました。

プログラムは正常に動作し、exe を数か月使用しました。その後、騒乱が起こりました。「C」としてインストールした新しい 1GB HD が自殺し、恒久的なエラーが発生しました。私のセカンダリ 2 GB "D" も、同時に永続的なエラーを発生させました。バイバイシステム。

すべて復元できました。新しいハード ドライブを挿入します (保証によって提供されます)。W7、ACCESS 2007、EXCEL 2007、および VB6 をすべて CD から再インストールしました。

ここで、VB exe を実行すると、ランタイム エラー 3061 が表示されます - パラメーターが少なすぎます - 少なくとも 1 つが必要でした。

犯人は選択です:

Set rs = db.OpenRecordset(Select_str)

選択内容:

SELECT
    HORA,
    ARL,
    ARL_ECON,
    ESTADO_OPE,
    EST_REMUN,
    ENERGIA,
    POT_DISP,
    POT_RECORTADA,
    PIND,
    PINDFORZ,
    CGN,
    CGO,
    CFO,
    CCM,
    PRECIO_NODO,
    PR_REM_ENERGIA,
    SCTD,
    SCO,
    COSTO_406,
    COMPRA_SPOT,
    POT_DISP_RESERVA,
    POT_DISP_GAS,
    GAS_NOMINADO,
    REM_ADICIONAL,
    REM_ADIC_TOTAL,
    DESP_ECON,
    PGENE_COMP_446,
    REM_ADIC_COMP_446,
    REM_GAS_6866,
    REMUN_ADIC_6866,
    POT_DISP_ACD
FROM VALORES_GENERADORES
WHERE GRUPO = "XXXXXX"

私はこの方法で選択を構築します:

BeguinSelectString$ = "SELECT HORA, "
DE$ = " FROM "
Donde$ = " WHERE GRUPO = " + Chr(34)
FinDelSelect$ = Chr(34) + " "

Select_str = ""

' FOR/NEXT を使用してこの SELECT を作成し、すべてのフィールドをリストして SELECT に入れます。

Select_str = BeguinSelectString$

For i = 0 To (Max_Index_de_Records_1 - 1)

    Select_str = Select_str + Nombres_de_Campos_1(i) + ", "

Next i

    Select_str = Select_str + Nombres_de_Campos_1(Max_Index_de_Records_1) ' I INSERT THE LAST FIELD WITHOUT THE COMMA, ELSE IT GIVES AN ERROR

    Select_str = Select_str + _
             DE$ + _
             Tabla + _
             Donde$ + _
             sNombre_del_Grupo + _
             FinDelSelect$

プロジェクトの参照は、この順序で:

  1. アプリケーション用の Visual Basic
  2. Visual Basic ランタイム オブジェクトとプロシージャ
  3. Visual Basic のオブジェクトとプロシージャ
  4. ActiveBar コントロール
  5. ActiveEx タイプ ライブラリ
  6. Microsoft DAO 3.6 オブジェクト ライブラリ
  7. Microsoft Excel 12.0 オブジェクト ライブラリ
  8. Microsoft Access 12.0 オブジェクト ライブラリ
  9. Microsoft Office 12.0 オブジェクト ライブラリ
4

2 に答える 2

2

SELECT質問のステートメントがコードによって作成された正確なステートメントであることが確実な場合は、そのテキストをコピーし、Access クエリ デザイナーで新しいクエリを作成し、SQL ビューに切り替えて、コピーしたテキストを貼り付けて実行してみてください。

パラメータの値を入力するよう求めるパラメータ入力ボックスが表示されます。ボックスには、Access がパラメーターと見なすものの"名前"が含まれていることに注意してください。VALORES_GENERADORESそのパラメーター名は、Access がテーブルで見つけられないものです (多くの場合、フィールド名のスペルが間違っています) 。名前が見つからないため、名前がパラメーターである必要があると想定します。

于 2013-08-04T15:44:42.257 に答える
1

ありがとう、HANSUP、あなたの提案は問題を解決しました!!!

これは、サードパーティから提供された日次データベースのセットです。データベース構造とテーブル フィールドは、ここ数年変更されていません。さらに、私のプログラムはほぼ 1 年間、毎日の情報を抽出するのに問題なく動作しました!! 次に、私の PC が自殺したのと同時に、データベース設計者は、クエリを実行するテーブルの最後のフィールドの名前を変更することにしました。こんにちは、月の半ばにこの奇妙なことをしました (@#!##!!!)。テーブルのフィールド名を確認したところ、1 日目のデータベース テーブルには古い名前が残っていました。だから、すべてを再インストールしたことが原因だと思いました。

フィールド名を変更し (スペルミスや構文エラーではありませんでした)、すべてが正常に戻りました。

再度、感謝します!!!

ルディ

于 2013-08-05T14:38:57.050 に答える