Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 使用VBA和ADO创建MDB表,如何自动使用UUID作为主键?_Ms Access_Vba - Fatal编程技术网

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

Ms access 使用VBA和ADO创建MDB表,如何自动使用UUID作为主键?,ms-access,vba,Ms Access,Vba,我正在mdb文件中创建一个表 当前我的函数添加了一个自动递增的主键 我希望使用UUID创建新行,而不是顺序整数 这能做到吗 这是我目前正在使用的MDBCreateTable函数 Function MDBCreateTable(myPath As String, TableName As String, ColumnDefinition As String) As Boolean ' ColumnDefinition structure Column1;;Datatype::Co

我正在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
作为记录,此功能基于以下论坛线程

下面是我找到的一篇关于使用UUID作为主键的文章

此外,我还不熟悉使用MDB文件,目前我将所有数据存储在excel工作表中,这是我第一次尝试使用MDB文件

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

接下来,我将创建从MDB文件读写的函数 另外,我最终会转到vb.net,我希望ADOAPI在vb.net中是类似的,并且我不是白学的。我很难在DAO、ADO和ADODB之间做出选择,我想最终我是随机选择的 谢谢

您必须定义字段/列的类型,如底部所示:

ADODB.Connection cn = new ADODB.Connection(); 
ADOX.Column clx = new ADOX.Column();
ADOX.Catalog cat = new ADOX.Catalog(); 
ADOX.Table tblnam;
cn.CursorLocation = ADODB.CursorLocationEnum.adUseClient;cn.Open(sExternalDBConnectionString, "", "", 0); 
cat.ActiveConnection = cn;
clx.ParentCatalog = cat;
clx.Type = ADOX.DataTypeEnum.adGUID; 
clx.Name = "IDField";
clx.Properties["AutoIncrement"].Value = false; 
clx.Properties["Fixed Length"].Value = true;
clx.Properties["Jet OLEDB:AutoGenerate"].Value = true;clx.Properties["Jet OLEDB:Allow Zero Length"].Value = true; 
tblnam = cat.Tables[sExternalDBTableName];
tblnam.Columns.Append(clx, ADOX.DataTypeEnum.adGUID, 16);
cn.Close();