Установить источник записей формы из библиотечной формы в таблицу приложения - PullRequest
1 голос
/ 24 февраля 2020

Я столкнулся с проблемой, пытаясь установить источник записей в нескольких формах, хранящихся в базе данных библиотеки. Эти формы предназначены для общего использования c, в то время как данные для доступа хранятся в (связанных) таблицах в самом приложении.

Например, форма "frm_settings" (в библиотеке accde) (частичный код)

Private Sub Form_Open(Cancel As Integer)
    Dim strSQL As String
    Dim strTblName As String
    Me.InsideWidth = Cm2Twip(18)
    Me.InsideHeight = Cm2Twip(17.2)
    CenterForm Me.Name, False, False, False
    strTblName = "USysAppSettings"
    If not TableExists(strTblName) Then
        MsgBox "The required table " & strTblName & " is not found or not available.", _
               vbCritical + vbOKOnly, "Missing or blocked table"
        DoCmd.Close acForm, Me.Name, acSaveNo
    End If

    strSQL = "SELECT * FROM USysAppSettings;"

    Me.RecordSource = strSQL
End 

Согласно [этому сообщению] [1] мне нужно добавить предложение IN в строку источника записей:

Если форма ссылается на таблицы или запросы в приложении вам нужно установить источник записи формы в событии On Open. Вам также необходимо добавить предложение «IN C: \ Program Files \ MyDirectory \ MyApp.MDB» к любым запросам, ссылающимся на таблицы в ваших приложениях MDB.

Кто-нибудь сталкивался с этим? Означает ли это, что формы в библиотеке БД могут работать только как несвязанные формы? Если это так, мне нужно создать различные процедуры для чтения, удаления и обновления таблиц с использованием DAO / ADO.

Art

1 Ответ

1 голос
/ 24 февраля 2020

Просто чтобы быть уверенным, что ссылка на таблицу или упрощенную строку SQL не будет работать, я скопировал форму из базы данных библиотеки в приложение (frm_settings_local) и попытался ее открыть. Он работал безупречно.

Продолжая решение (старый пост) на странице http://www.granite.ab.ca/access/addins.htm, и, несмотря на то, что я работаю в Accesss x64 2016, я попытался изменить SQL и добавить цитату отметки вокруг пути к приложению / имени строки.

strSQL = "SELECT * FROM USysAppSettings IN '" & CurrentProject.FullName & "';"

Это сработало! Это означает, что при использовании форм в базе данных библиотеки:

  1. Вы не можете использовать имя таблицы (и, возможно, ни запрос тоже) в качестве form.recordsource, если эта таблица (или запрос) хранится в само приложение.
  2. Вы должны добавить "IN '[полный путь и имя приложения]';" к источнику записи SQL строка.

Надеюсь, это поможет другим с тем же вопросом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...