• ベストアンサー

ACCESS ADOでupdateが効かない

いつもありがとうございます。 現在、ADOを使ってカレントプロジェクト以外のMDBファイルのテーブルにレコードを追加する処理を行っているのですが、何のエラーメッセージも出ないままレコードが追加されません。 この場合、updateコマンドが実行された後の状態(リターンコード)を調べる事はできないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#140971
noname#140971
回答No.3

前回の回答を訂正します。 <ある環境下ではエラーが起きないこともあります!> さて、本日、Execute での UPDATE 文が実行されないという不具合に遭遇しました。 エラーもなく表面上は「実行しました!」とのメッセージ。 「ウーン!」と考えて、UPDATE 文の発行による更新を断念。 SELECT文で読み込み1レコードづつ更新するようにコードを訂正しました。 結果、この不具合は解消されました。 多分、実行したPCが某社のCAD。 「Windows、Office の更新は誤動作の原因となるのでしていない」とのこと。 こういう場合、非手続き的なコードよりも手続き的なコードの方が信頼が高いと感じました。 質問者も、シコシコと更新手続きを書いてみると解決するかもしれません。 「エラーが出ると思う!」との下りは、このような事情で撤回します。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • venzou
  • ベストアンサー率71% (311/435)
回答No.4

>レコードを追加する処理を行っている >この場合、updateコマンドが実行された後 質問の内容より、Recordset オブジェクトのaddnew & updateで手続き的なコードを書かれていると思いますが(^^;>#3さん Execute メソッドの場合は、第2引数に影響の有ったレコード数が返ってきますので、これをチェックすれば正常に追加されたか判断出来るかも。 Dim RecordsAffected As Long Connection.Execute SQL, RecordsAffected Debug.Print RecordsAffected

kunisada
質問者

お礼

お答え下さった皆さん、回答ありがとうございます。 他の方へもここでまとめてお礼します。 まだ解決していませんが、皆さんの意見を参考にやってみます。 SQL文に書き直す というのが正解かもしれません。

すると、全ての回答が全文表示されます。
noname#140971
noname#140971
回答No.2

私も、No1 さんの回答通りにエラーが発生すると思います。 ただ、その場合、Access のエラーが発生するだけかもしれません。 いわゆる ADO エラー情報を取得するには仕掛けが必要です。 質問は、この後段の手法に関してでしょうか? であれば、次の関数を参考にされて下さい。 カレントプロジェクトであろうが外部アクセスであろうが同じことかと思います。 Public Sub ErrMessage(ByVal CnnErrors As ADODB.Error, ByVal strSQL As String)    MsgBox "ADOエラーが発生しましたので処理をキャンセルします。" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & CnnErrors.Description & Chr$(13) & _       "・Err.Number=" & CnnErrors.Number & Chr$(13) & _       "・SQL State=" & CnnErrors.SQLState & Chr$(13) & _       "・SQL Text=" & strSQL, _       vbExclamation, " ADO関数エラーメッセージ" End Sub Public Function CnnExecute(ByVal strSQL As String) As Boolean On Error GoTo Err_CnnExecute    Dim isOK As Boolean    Dim cnn As ADODB.Connection       isOK = True    Set cnn = CurrentProject.Connection    With cnn      .Errors.Clear      .BeginTrans      .Execute strSQL      .CommitTrans    End With Exit_CnnExecute: On Error Resume Next    cnn.Close    Set cnn = Nothing    CnnExecute = isOK    Exit Function Err_CnnExecute:    isOK = False    If cnn.Errors.Count > 0 Then      ErrMessage cnn.Errors(0), strSQL      cnn.RollbackTrans    Else      MsgBox "プログラムエラーが発生しました。システム管理者に報告して下さい。(CnnExecute)", _         vbExclamation, " 関数エラーメッセージ"    End If    Resume Exit_CnnExecute End Function

すると、全ての回答が全文表示されます。
  • venzou
  • ベストアンサー率71% (311/435)
回答No.1

具体的なソースがないと何とも言えませんが・・・ updateメソッドに戻り値はないと思います。 通常は失敗すればエラーになると思います。 ・ On Error Resume Next としてませんか? ・ addnew を忘れてませんか?

すると、全ての回答が全文表示されます。

関連するQ&A