Непрерывная форма, как добавить / обновить записи с внешним подключением - PullRequest
1 голос
/ 11 мая 2010

РЕДАКТИРОВАТЬ После еще одного исследования я обнаружил, что не могу использовать непрерывную форму с несвязанной формой, поскольку она может ссылаться только на одну запись за раз. Учитывая, что я изменил свой вопрос ...

У меня есть образец формы, которая извлекает данные для внесения в таблицу в качестве посредника.

Изначально форма не привязана, и я открываю соединения с двумя основными наборами записей. Я установил набор записей списка равным одному из них, а набор записей форм - другому.

Проблема в том, что я не могу добавлять записи или обновлять существующие. Попытка ввести ключ в поле ничего не делает почти так, как если бы поле было заблокировано (а это не так). Настройки наборов записей: 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

1 Ответ

0 голосов
/ 18 мая 2010

Я обнаружил, что вы не можете обновить / добавить набор записей без строки подключения, содержащей как поставщика, так и поставщика данных для файлов базы данных Microsoft Access (внешние). Как указывалось выше, я смог вытащить и отобразить записи, но если я не использую методы ADO Add / Update через жесткий код, у меня нет этих возможностей.

Эта ссылка имеет решение для соединений SQL и JET, чтобы сделать это с внешними файлами базы данных, используя эти два типа провайдеров. Запутывающей частью было добавление параметров пароля (для глобального файлового пароля) в строку подключения в используемом мной классе подключения.

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

...