2016-06-25 4 views
0

1つの質問で2つの問題は残念ですが、コードとエラーハンドラの両方が問題になっています。私は、Access 2016フロントエンドとSQL Server 2012バックエンドを使用します。.bookmark = .lastmodifiedトリガーODBCコールが失敗し、エラーハンドラが診断に失敗しています

  1. DAOレコードセットを使用して新しいレコードを挿入します。レコードが正常に挿入されます。ただし、.Update行が正常に処理された後、 ".bookmark = .lastmodified"行はODBC Call Failedエラーをトリガーします。
  2. 上記のODBCエラーの詳細情報を取得するためにエラートラッピングを挿入しましたが、 "For Each MyError In DBEngine.Errors"行にタイプが一致しません。

いずれかのヘルプに感謝します!ここで

はコードです:これらはエラートラップの問題としなければならない場合には

Private Sub Command5_Click() 'ADD 
Dim ctl As control 
Dim rstReg As dao.Recordset 
Dim NewID as Long 
On Error GoTo trap 
If IsNull(Me.lstCustomers) Then 
    MsgBox ("You must select a customer") 
    Exit Sub 
End If 
Set ctl = Forms!frmmaintrn!lstSessions 
Set rstReg = CurrentDb.OpenRecordset("trnRegistration", dbOpenDynaset, dbSeeChanges) 
With rstReg 
    .AddNew 
    Select Case Me.txtRegType 
    Case 1 ' floating 
     !FloatClassID = Forms!frmmaintrn!fkClassID 
     !fkClassSchedID = 6760 
    Case 2 'registered 
     !fkClassSchedID = Forms!frmmaintrn!fkClassID 
    End Select 
    !DateEntered = Date 
    !fkCompanyID = Me.lstCustomers 
    !SalesRep = Forms!frmloginnames!lstOwner 
    !fkUserTypeID = Me.cboUserType 
    !fkOrderTypeID = Me.cboOrderType 
    !VerifDate = Me.VerifDate 
    .Update 
    .Bookmark = .LastModified 
    NewID = !RegistrationID 
End With 
trap: 
Dim MyError As Error 
MsgBox Errors.Count 
For Each MyError In DBEngine.Errors 
With MyError 
    MsgBox .Number & " " & .Description 
End With 
    Next MyError 
End Sub 

そしてここでは、私の参照です。私には、Microsoft DAO 3.6オブジェクトライブラリを追加しようとしましたが、私は、この「既存のモジュール、プロジェクト、またはオブジェクトライブラリと名前の競合」

References

+0

を解決する必要があります。テーブルから手動でレコードを手動で追加しようとするたびに、「無効なキャスト指定エラー」が表示されます。テーブルが破損しているかどうかをテストする方法はありますか?レコードを追加して編集または削除しようとすると、別のユーザーがテーブルを編集しようとしているというエラーメッセージが表示されるなど、他の方法でも奇妙な動作をしています。 – dkimbrell

+0

一部のSQL Serverデータ型または仕様がAccessでうまく動作しません。バックエンドテーブル用のCREATE TABLE文を追加できますか? – Andre

+0

新しいアクセスバージョンでは、DAOはDBエンジンオブジェクトライブラリに含まれています。 'DAO - C:\ Program Files(x86)\ Common Files \ Microsoft Shared \ OFFICE14 \ ACEDAO.DLL - Microsoft Office 14.0 Accessデータベースエンジンオブジェクトを表示するには、' dao'にカーソルを置き、Shift + F2を押します。 (Access 2010の場合) – Andre

答えて

0

一つの即時修正が宣言を変更することであるというメッセージが表示されますMyErrors

DBEngine.Errorsの指定したオブジェクトの 保存されたエラー・オブジェクトのすべてが含まれているErrorsコレクションを返します。 (未およびエラー オブジェクト)

その後エラースルー行くためにFor Eachを使用する - あなたが探している適切なODBCエラーを返す必要があります。

ここでは、マイクロソフト

ODBCErrHandler: 
    Dim errX As DAO.Error 

    If Errors.Count > 1 Then 
     For Each errX In DAO.Errors 
     Debug.Print "ODBC Error" 
     Debug.Print errX.Number 
     Debug.Print errX.Description 
     Next errX 
    Else 
     Debug.Print "VBA Error" 
     Debug.Print Err.Number 
     Debug.Print Err.Description 
    End If 
    Resume Exit_function 
End Function 

EDITからの例です - dbSeeChanges-

私の間違いを削除するには、レコードセットの提案を追加 - 私はあなたがSQL Server 2012のバックエンドを持って見る - 私は はdbSeeChangesが必要であることを考えます

おそらく、ブックメーカブルレコードセットの小切手に改行してください。

If .Bookmarkable = False Then 
    Debug.Print "Recordset is not Bookmarkable!" 
Else 
    .Bookmark = .LastModified 
Endif 
0
私が最初 .Bookmarkableプロパティを確認に同意

、しかし... MyError変数と

あなたの問題が宣言です。 ExcelとDAOの両方にErrorオブジェクトがありますが、ExcelリファレンスはDAOリファレンスの前にあります。この変数の明示的な宣言を使用します。

Dim MyError As DAO.Error 

これは、少なくとも助けあなたは私が私のテーブルが破損していることを恐れるために始めている問題

関連する問題