2014-09-13 42 views
2

我無法從VB.NET創建Access表。使用VB.NET在Access中創建表

這是代碼我想出了,但我不斷收到錯誤:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Try 
     'connection string 
     Dim dbpath As String = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase) 
     dbpath = New Uri(dbpath).LocalPath 
     Dim my_connection As String = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\GhostDrive\Desktop\database.mdb" 
     Dim userTables As DataTable = Nothing 
     Dim connection As System.Data.OleDb.OleDbConnection = New System.Data.OleDb.OleDbConnection() 
     Dim source As String 

     'query string 
     Dim my_query As String = "CREATE TABLE " & TextBox2.Text & " (" & _ 
      "ID Counter, " & _ 
      "Year datetime," & _ 
      "Title varchar(40)," & _ 
      "image1 Long," & _ 
      "Image2 Long," & _ 
      "Image3 Long," & _ 
      "Image4 Long," & _ 
      "Serial varchar(20)," & _ 
      "Purchaseprice Currency," & _ 
      "Evalprice Currency, " & _ 
      "Datepurchase DateTime, " & _ 
      "Dateeval DateTime, " & _ 
      "Sign varchar(40), " & _ 
      "Grading varchar(20)," & _ 
      "Eval YesNo, " & _ 
      "Star YesNo, " & _ 
      "Folder YesNo, " & _ 
      "Forsale YesNo, " & _ 
      "Error YesNo, " & _ 
      "Barcode(varchar(20)," & _ 
      "Comm YesNo)" 

     'create a connection 
     Dim my_dbConnection As New OleDbConnection(my_connection) 

     'create a command 
     Dim my_Command As New OleDbCommand(my_query, my_dbConnection) 

     'connection open 
     my_dbConnection.Open() 

     'command execute 
     my_Command.ExecuteNonQuery() 

     'close connection 
     my_dbConnection.Close() 
     ListBox1.Items.Clear() 
     source = TextBox1.Text 
     connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + source 
     Dim restrictions() As String = New String(3) {} 
     restrictions(3) = "Table" 
     connection.Open() 
     ' Get list of user tables 
     userTables = connection.GetSchema("Tables", restrictions) 
     connection.Close() 
     ' Add list of table names to listBox 
     Dim i As Integer 
     For i = 0 To userTables.Rows.Count - 1 Step i + 1 
      ListBox1.Items.Add(userTables.Rows(i)(2).ToString()) 
     Next 

    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 


End Sub 
+0

任何錯誤信息? – lxg 2014-09-13 10:52:49

+0

對不起,這是一個錯字,代碼運行,然後在時間停止 – user3408291 2014-09-13 10:56:07

+1

你在'「標題varchar(40)」&'改變爲''標題varchar(40),「&'後缺少一個逗號,它會工作。 – jpw 2014-09-13 10:57:52

回答

5

如果我把所有的人出來,除了它的作品ID,然後我通過在背面它停止添加它們的「新年的日期時間,」 & _

YEAR是訪問SQL一個reserved word。如果我嘗試運行下面的代碼...

Dim connectionString As String = _ 
     "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
     "Data Source=C:\Users\Public\mdbTest.mdb;" 
Using con As New OleDbConnection(connectionString) 
    con.Open() 
    Using cmd As New OleDbCommand() 
     cmd.Connection = con 
     cmd.CommandText = "CREATE TABLE zzzTest (ID COUNTER, Year INTEGER)" 
     Try 
      cmd.ExecuteNonQuery() 
      Console.WriteLine("Table created.") 
     Catch ex As Exception 
      Console.WriteLine(ex.Message) 
     End Try 
    End Using 
    con.Close() 
End Using 

...我得到

Syntax error in field definition. 

但是,如果我在方括號括起來的字段名稱...

 cmd.CommandText = "CREATE TABLE zzzTest (ID COUNTER, [Year] INTEGER)" 

...然後我得到

Table created. 
+1

I將錯誤'和'Eval'作爲字段名稱。參考:[艾倫布朗的問題名稱和保留字在Access](http://allenbrowne.com/AppIssueBadWord.html#E) – HansUp 2014-09-13 16:48:17