我正在使用ADODB在VB 2005中開發一個程序。 考慮兩個MS Access數據庫。一個用table1,另一個用table2,table3。同步兩個數據庫的對象的程序MS Access
當我們運行程序並選擇兩個數據庫。它將創建第二個數據庫的table2,table3到第一個數據庫。要產生
該方案可以成功地產生的表的列表。之後,我有另一個功能來創建「CREATE TABLE」語句。
Function CreateCreateTableStatement(ByVal DBPath As String, ByVal TableName As String) As String
On Error GoTo EndErr
Dim cnn As New ADODB.Connection
Dim TablesSchema, ColumnsSchema, PrimaryKeysSchema As ADODB.Recordset
Dim tempsql, PrimaryKeyColumn As String
Dim i As Integer = 0
cnn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & DBPath & "';"
cnn.Mode = ADODB.ConnectModeEnum.adModeShareExclusive
DoLog("Getting tables list of " & DBPath)
cnn.Open()
TablesSchema = cnn.OpenSchema(ADODB.SchemaEnum.adSchemaTables)
TablesSchema.Filter = "TABLE_NAME = '" & TableName & "'"
PrimaryKeysSchema = cnn.OpenSchema(ADODB.SchemaEnum.adSchemaPrimaryKeys)
PrimaryKeysSchema.Filter = "TABLE_NAME = '" & TableName & "'"
If PrimaryKeysSchema.EOF = False Then PrimaryKeyColumn = PrimaryKeysSchema("COLUMN_NAME").Value
PrimaryKeysSchema.Close()
ColumnsSchema = cnn.OpenSchema(ADODB.SchemaEnum.adSchemaColumns)
ColumnsSchema.Filter = "TABLE_NAME = '" & TableName & "'"
tempsql = "CREATE TABLE " & TableName & " ("
Do While Not ColumnsSchema.EOF
tempsql = tempsql + ColumnsSchema("COLUMN_NAME").Value & " " & DataCodeToName(ColumnsSchema("DATA_TYPE").Value) & " " & " (" & ColumnsSchema("CHARACTER_MAXIMUM_LENGTH").Value & ") " '& ColumnsSchema("IS_NULLABLE").Value & ColumnsSchema("COLUMN_DEFAULT").Value & ", " & ColumnsSchema("IS_NULLABLE").Value & ", " & DataCodeToName(ColumnsSchema("DATA_TYPE").Value) & ", " & ColumnsSchema("CHARACTER_MAXIMUM_LENGTH").Value
If PrimaryKeyColumn = ColumnsSchema("COLUMN_NAME").Value Then tempsql = tempsql + " PRIMARY KEY, " Else tempsql = tempsql + ", "
ColumnsSchema.MoveNext()
Loop
tempsql = tempsql.Substring(0, Len(tempsql) - 2) + ");"
cnn.Close()
DoLog("Gotten tables list of " & DBPath)
Return tempsql
Exit Function
EndErr:
cnn.Close()
MsgBox(Err.Description)
End Function
輸出函數的是改變它之前:
CREATE TABLE Table2 (Column1 VARCHAR, Column11 UNSIGNED BYTE, Column12 SHORT, Column13 SINGLE, Column14 DOUBLE, Column15 Guid, Column16 NUMERIC, Column2 VARCHAR, Column3 LONG, Column4 DateTime, Column5 CURRENCY, Column6 LONG PRIMARY KEY, Column7 BIT, Column8 BINARY, Column9 VARCHAR);
但執行SQL的錯誤「語法錯誤的字段定義」提出之後。所以我稍微改變了功能並增加了最大長度,如上面的代碼所示。上面的代碼生成SQL:
CREATE TABLE Table2 (Column1 VARCHAR (255) , Column11 UNSIGNED BYTE () , Column12 SHORT () , Column13 SINGLE () , Column14 DOUBLE () , Column15 LONG () , Column16 DECIMAL () , Column2 VARCHAR (0) , Column3 LONG () , Column4 DateTime () , Column5 CURRENCY () , Column6 LONG () PRIMARY KEY, Column7 BIT (2) , Column8 BINARY (0) , Column9 VARCHAR (0));
生成上述SQL後,錯誤是相同的。 我想要的只是關於create table語句的幫助。下面是Table2的圖像,其中create table語句是。從我的分貝 Table2 image
做了一些測試。無法使Access接受UNSIGNED BYTE類型。 – June7
也不喜歡長,短,二進制,位,單,雙,貨幣後的parens()。根本不喜歡Decimal。 – June7
謝謝你們!你們倆。有效。但現在我陷入了另一個問題。完成一天的辛勤工作後,結果告訴我查詢創建的列沒有設置很多屬性。所以,我必須選擇另一種方法來使用vb 2005在ms access db中創建表格。 任何建議! –