首页 > 解决方案 > 微软访问。VBA。如何仅在不存在的情况下创建具有 1 条记录的临时表

问题描述

我正在寻找一种在打开表格时创建表格的方法。表应该只创建一次。因此,如果它存在,则不应创建新的。以相同的形式,我想从创建的表中的组合框中保存一些数据。为此,我尝试使用代码:

  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

不幸的是,它没有从组合框中保存选定的值。该表似乎没有记录,并且不想保存这些值。当我添加至少一个组合框存储正确值的记录时。

如何使用上面发布的代码创建一个包含一些虚拟信息的记录的表?

标签: vbams-access

解决方案


连接变量输入。用撇号分隔文本字段的参数。使用 VALUES 子句而不是 SELECT。使用If Then代替 WHERE 子句来测试表单控件的值。不要使用保留字名称作为变量。

考虑:

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

推荐阅读