Модуль Access VBA не может получить данные из формы - PullRequest
0 голосов
/ 04 февраля 2019

ОК, поэтому моя база данных изначально была разработана в Access 2003. На одной из машин я использую Access 2007 Runtime, поскольку на машине нет Office какого-либо вида.Я пытаюсь найти решение, используя последнюю версию Access в Office 365. Я не могу напрямую получить доступ к текущей версии, работающей в Access 2003 или Access 2007 Runtime.Я не могу изменить версии на других машинах, так как они находятся в тюрьме и не имеют интернета.Это работает без проблем, запущенных в 2003 году, только 2007 год является проблемой.Так как меня там нет и у меня есть только 365. Мне нужно решение, которое будет работать для всех версий.

Используемые функции находятся в отдельных модулях и не имеют фактической формы.В форме установлен модуль, необходимый для доступа к объектам.Функция состоит в том, чтобы добавить сеанс для заключенного, чтобы посетить библиотеку.Это должно быть проверено, чтобы убедиться, что есть место в выбранное время и день недели, а также индивидуальные ограничения сеанса.

Проблема, с которой я сталкиваюсь, заключается в том, что версии 2007 и 365 не могут получить выбранные данные из списка (время в виде строки) и группы параметров (DayofWeek как число) для выполнения запроса SQL вместо него.ничего не вставляет и SQL не удается, утверждая, что есть дополнительный) в моем коде.Затем SQL используется для создания набора записей DAO.Это является частью проверки данных, чтобы убедиться, что лимиты не достигнуты.

Я трижды проверил строку, отправленную CO_GetSessionDetail, чтобы убедиться, что у меня нет лишних).Он думает, что это так, поскольку в строке справа нет ничего от my =.Я проверил ссылку на форму и несвязанные поля, и все они совпадают.Он не компилирует никаких проблем.

В 2003 году нет проблем ...

Код приведен ниже.

Function CO_NewCallout() As Boolean
...
    ' Get Session ID --------------------------------- '
    With Form_f_COs_IM
        iSession = CO_GetSessionDetail( _
            "SessionID", _
            "(((t_CO_Sess.DayOfWeek) = " & .CO_Add_DayOfWeek & ") AND " & _
            "((t_CO_Sess.tSession) = '" & .CO_Add_tSession & "'))" _
            )
        If iSession = 0 Then
            GoTo CO_NewCallout_Exit
        End If
    End With
...
End Function

Function CO_GetSessionDetail(stfield As String, stwhere As String) As Variant
'On Error Resume Next

' Variable Declerations -------------------------- '
    Dim db As Database
    Dim rst As DAO.Recordset
    Dim stSQL As String

' Set Variables ---------------------------------- '
    Set db = CurrentDb
    If stwhere <> "" Then
        stwhere = "WHERE " & stwhere
    End If
    stSQL = _
        "SELECT * " & _
        "FROM t_CO_Sess " & stwhere
    Set rst = db.OpenRecordset(stSQL, dbOpenDynaset)

' Get Session ID --------------------------------- '
    With rst
        If Not .EOF Then
            CO_GetSessionDetail = .Fields(stfield)
        Else
            CO_GetSessionDetail = 0
        End If
    End With

' Close Recordset t_CO_Sess ---------------------- '
    rst.Close
    Set rst = Nothing

End Function

Access 2003 - я получаю уникальный идентификаторСеанс

Access 2007 и 365 - не удается завершить функцию

Дайте мне знать, поможет ли еще код.

1 Ответ

0 голосов
/ 04 февраля 2019

Приложение Access, скомпилированное с использованием Office 365, не будет совместимо со средой выполнения Access 2007 или Access 2003. Вы должны скомпилировать версию более ранней или равной выбранной вами среде выполнения.К сожалению, сложно получить среду выполнения Access 2003, потому что она не может быть свободно загружена.Среда выполнения 2007 года находится в свободном доступе (что, вероятно, объясняет, почему вы решили установить более позднюю версию).

Ваш код выглядит нормально, и я предполагаю, что он компилируется и все такое.Несмотря на то, что ваша база данных 2003 должна работать со средой выполнения Access 2007, тот факт, что она не , говорит мне, что у вас есть несовместимость, которую необходимо устранить.

Ваш лучший выбор: обновите приложение до версии 2007 или более поздней, убедитесь, что оно работает в новой версии, и установите соответствующую среду выполнения на компьютерах вашего клиента.

Ссылки:

Общее обсуждение совместимости версий Access: Совместимость Access 2016/2010, Access 2016

Статья о получении среды выполнения Access 2003: MS Access Runtime 2003

...