アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもありがとうございます。

現在、ADOを使ってカレントプロジェクト以外のMDBファイルのテーブルにレコードを追加する処理を行っているのですが、何のエラーメッセージも出ないままレコードが追加されません。

この場合、updateコマンドが実行された後の状態(リターンコード)を調べる事はできないでしょうか?

A 回答 (4件)

>レコードを追加する処理を行っている


>この場合、updateコマンドが実行された後

質問の内容より、Recordset オブジェクトのaddnew & updateで手続き的なコードを書かれていると思いますが(^^;>#3さん

Execute メソッドの場合は、第2引数に影響の有ったレコード数が返ってきますので、これをチェックすれば正常に追加されたか判断出来るかも。

Dim RecordsAffected As Long
Connection.Execute SQL, RecordsAffected
Debug.Print RecordsAffected
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/01/26 09:56

前回の回答を訂正します。



<ある環境下ではエラーが起きないこともあります!>

さて、本日、Execute での UPDATE 文が実行されないという不具合に遭遇しました。
エラーもなく表面上は「実行しました!」とのメッセージ。
「ウーン!」と考えて、UPDATE 文の発行による更新を断念。
SELECT文で読み込み1レコードづつ更新するようにコードを訂正しました。
結果、この不具合は解消されました。

多分、実行したPCが某社のCAD。
「Windows、Office の更新は誤動作の原因となるのでしていない」とのこと。
こういう場合、非手続き的なコードよりも手続き的なコードの方が信頼が高いと感じました。
質問者も、シコシコと更新手続きを書いてみると解決するかもしれません。

「エラーが出ると思う!」との下りは、このような事情で撤回します。
    • good
    • 3

私も、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
    • good
    • 0

具体的なソースがないと何とも言えませんが・・・



updateメソッドに戻り値はないと思います。
通常は失敗すればエラーになると思います。

・ On Error Resume Next としてませんか?
・ addnew を忘れてませんか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A