MS Access. VBA. Как создать временную таблицу с 1 записью, только если она не существует - PullRequest
1 голос
/ 30 марта 2020

Я ищу способ создать таблицу при открытии формы. Таблица должна быть создана только один раз. Поэтому, если оно существует, новое не должно быть создано. В той же форме я хотел бы сохранить некоторые данные из поля со списком в созданной таблице. Для этого я попытался использовать код:

  Sub ViaVBA()
    Const strSQLCreateFoo_c As String = _
          "CREATE TABLE Foo" & _
          "(" & _
          "MyField1 INTEGER," & _
          "MyField2 Text(10)" & _
          ");"
    Const strSQLAppendBs_c As String = _
          "INSERT INTO Foo (MyField1, MyField2) " & _
          "SELECT Bar.MyField1, Bar.MyField2 " & _
          "FROM Bar " & _
          "WHERE Bar.MyField2 Like 'B*';"

    If Not TableExists("foo") Then
        CurrentDb.Execute strSQLCreateFoo_c
    End If
    CurrentDb.Execute strSQLAppendBs_c
End Sub
Private Function TableExists(ByVal name As String) As Boolean
    On Error Resume Next
    TableExists = LenB(CurrentDb.TableDefs(name).name)
End Function

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

Как создать таблицу с одной записью с некоторой фиктивной информацией, используя код, указанный выше?

1 Ответ

1 голос
/ 30 марта 2020

Конкатенация ввода переменных. Разделите параметры для текстового поля апострофами. Используйте предложение VALUES вместо SELECT. Используйте If Then вместо предложения WHERE для проверки значения элемента управления формы. Не используйте зарезервированное слово Name в качестве переменной.

Обратите внимание:

Sub ViaVBA()
    If Not TableExists("foo") Then
        CurrentDb.Execute "CREATE TABLE Foo(MyField1 INTEGER, MyField2 Text(10));"
    End If
    If Forms!Bar.MyField2 LIKE "B*" Then
        CurrentDb.Execute "INSERT INTO Foo (MyField1, MyField2) " & _
            "VALUES(" & Forms!Bar.MyField1 & ", '" & Forms!Bar.MyField2 & "')"
    End If
End Sub

Private Function TableExists(ByVal strName As String) As Boolean
    On Error Resume Next
    TableExists = LenB(CurrentDb.TableDefs(strName).Name)
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...