使用VBA和ADO创建MDB表,如何自动使用UUID作为主键?

时间:2017-08-08 06:06:59

标签: vba access-vba

我正在mdb文件中创建一个表。

目前我的函数添加了一个自动增量主键。

我希望使用UUID创建新行,而不是顺序整数。

可以这样做吗?

这是我目前正在使用的MDBCreateTable函数。

Function MDBCreateTable(myPath As String, TableName As String, ColumnDefinition As String) As Boolean

    ' ColumnDefinition structure     Column1;;Datatype::Column2;;Datatype
    Dim Columns() As String
    Columns = Split(ColumnDefinition, "::")

    Dim xCat As ADOX.catalog
    Dim xTable As ADOX.Table

    'Instantiate the ADOX-object.
    Set xCat = New ADOX.catalog
    Set xTable = New ADOX.Table

    On Error GoTo Failed

    Dim ConnectionString As String
    ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & myPath & ";"
    xCat.ActiveConnection = ConnectionString

    'Name the table.
    xTable.Name = TableName
     'Create the field which also is the Primary Key (PK) field for the Table.
    xTable.Columns.Append "ID", adInteger
     'In order to access the properties we need to set the Parent Catalog.
    xTable.ParentCatalog = xCat
    xTable.Columns("ID").Properties("AutoIncrement").Value = True
     'Append the PK.
    xTable.Keys.Append "PrimaryKey", adKeyPrimary, "ID"

    For x = 0 To UBound(Columns)
        If inStB(Columns(x), ";;") Then
            Select Case Split(Columns(x), ";;")(1)
                Case "integer"
                    xTable.Columns.Append Split(Columns(x), ";;")(0), adInteger
                Case "decimal"
                    xTable.Columns.Append Split(Columns(x), ";;")(0), adNumeric
                Case "date"
                    xTable.Columns.Append Split(Columns(x), ";;")(0), adDate
                Case Else
                    xTable.Columns.Append Split(Columns(x), ";;")(0), adWChar
            End Select
        End If
    Next x

    xCat.Tables.Append xTable
    MDBCreateTable = True

Failed:
End Function

对于记录,此功能基于以下论坛帖子

http://www.ozgrid.com/forum/printthread.php?t=40365

这是我发现的关于使用UUID作为主键的文本

https://tomharrisonjr.com/uuid-or-guid-as-primary-keys-be-careful-7b2aa3dcb439

此外,我是使用MDB文件的新手,我目前将所有数据存储在excel工作表中,这是我第一次尝试使用MDB文件。

所以我开始创建数据库文件和下一次创建表。

(接下来我将创建从MDB文件读取和写入的函数) (我也将最终转移到vb.net,我希望ADO api在vb.net中类似,并且我没有学到它。我很难在DAO,ADO和ADODB之间进行选择,最后我随便挑选,我想) 谢谢!

1 个答案:

答案 0 :(得分:1)

您必须将字段/列的 Type 定义为底部的here

let decodedValue = decodeURI(encodedValue);