Ms access 使用VBA和ADO创建MDB表,如何自动使用UUID作为主键?
我正在mdb文件中创建一个表 当前我的函数添加了一个自动递增的主键 我希望使用UUID创建新行,而不是顺序整数 这能做到吗 这是我目前正在使用的MDBCreateTable函数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
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();