1

編集さらに調査した結果、一度に1つのレコードしか参照できないため、バインドされていないフォームで連続フォームを使用できないことがわかりました。質問を変更したことを考えると...

データを引き出して仲介者としてテーブルに入力するサンプルフォームがあります。

最初はフォームがバインドされておらず、2つのメインレコードセットへの接続を開きます。リストボックスのレコードセットをそれらの1つに等しく設定し、フォームのレコードセットをもう1つに等しく設定しました。

問題は、レコードを追加したり、既存のレコードを更新したりできないことです。フィールドにキー入力しようとしても、フィールドがロックされているかのようには何も起こりません(ロックされていない場合)。レコードセットの設定は、OpenKeysetとLockPessimisticです。

テーブルはリンクされていません。テーブルはこのプロジェクトとは別の外部アクセスデータベースからのものであり、そのままにしておく必要があります。データを取得するためにadodb接続を使用しています。プロジェクトからのデータの分離がこれを引き起こしている可能性がありますか?

フォームからのサンプルコード

Option Compare Database
Option Explicit

Private conn As CRobbers_Connections
Private exception As CError_Trapping
Private mClient_Translations As ADODB.Recordset
Private mUnmatched_Clients As ADODB.Recordset
Private mExcluded_Clients As ADODB.Recordset

//Construction
Private Sub Form_Open(Cancel As Integer)
    Set conn = New CRobbers_Connections
    Set exception = New CError_Trapping

    Set mClient_Translations = New ADODB.Recordset
    Set mUnmatched_Clients = New ADODB.Recordset
    Set mExcluded_Clients = New ADODB.Recordset

    mClient_Translations.Open "SELECT * FROM Client_Translation" _
                              , conn.RBRS_Conn, adOpenKeyset, adLockPessimistic

    mUnmatched_Clients.Open "SELECT DISTINCT(a.Client) as Client" _
                          & "  FROM Master_Projections a " _
                          & " WHERE Client NOT IN ( " _
                          & "       SELECT DISTINCT ClientID " _
                          & "         FROM Client_Translation);" _
                          , conn.RBRS_Conn, adOpenKeyset, adLockPessimistic

    mExcluded_Clients.Open "SELECT * FROM Clients_Excluded" _
                           , conn.RBRS_Conn, adOpenKeyset, adLockPessimistic

End Sub

//Add new record to the client translations
Private Sub cmdAddNew_Click()
    If lstUnconfirmed <> "" Then
        AddRecord
    End If
End Sub

Private Function AddRecord()
    With mClient_Translations
        .AddNew
        .Fields("ClientID") = Me.lstUnconfirmed
        .Fields("ClientAbbr") = Me.txtTmpShort
        .Fields("ClientName") = Me.txtTmpLong
        .Update
    End With
    UpdateRecords
End Function

Private Function UpdateRecords()
    Me.lstUnconfirmed.Requery
End Function

//Load events (After construction)
Private Sub Form_Load()
    Set lstUnconfirmed.Recordset = mUnmatched_Clients   //Link recordset into listbox
    Set Me.Recordset = mClient_Translations
End Sub

//Destruction method
Private Sub Form_Close()
    Set conn = Nothing
    Set exception = Nothing
    Set lstUnconfirmed.Recordset = Nothing
    Set Me.Recordset = Nothing
    Set mUnmatched_Clients = Nothing
    Set mExcluded_Clients = Nothing
    Set mClient_Translations = Nothing
End Sub
4

1 に答える 1

0

マイクロソフトアクセスデータベースファイル(外部)のプロバイダーとデータプロバイダーの両方を含む接続文字列がないと、レコードセットを更新/追加できないことがわかりました。上記のように、レコードをプルして表示することはできましたが、ハードコードを介して手動でADO Add / Updateメソッドを使用しない限り、これらの機能はありません。

このリンクには、SQL接続とJET接続の両方で、これら2つのプロバイダータイプを使用して外部データベースファイルでこれを行うためのソリューションがあります。紛らわしいのは、使用している接続クラスの接続文字列にパスワードパラメーター(グローバルファイルパスワード用)を追加することでした。

http://support.microsoft.com/kb/281998

于 2010-05-17T21:34:04.250 に答える