2014-09-13 2 views
2

У меня возникли проблемы с созданием таблиц доступа из VB.NET.создание таблиц в Access с использованием VB.NET

Это код, который я придумал, но я продолжаю получать ошибки:

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

+0

извините, что это была опечатка, код запускается, а затем останавливается в timedate. – user3408291

+1

. Вам не хватает запятой после '' Title varchar (40) "&' Change to '" Заголовок varchar (40), & quot; и 'и это будет Работа. – jpw

ответ

5

если я беру все их кроме ID он работает, а затем я добавить их на на на спине она останавливается " Год дата и время,»& _

YEAR в Access 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 были бы ложными именами «Error» и «Eval» в качестве полей. Ссылка: [имена проблем и имена зарезервированных слов Allen Browne в Access] (http://allenbrowne.com/AppIssueBadWord.html#E) – HansUp

Смежные вопросы