2014-02-20 56 views
0

嗨我一直收到此错误无法找到表映射[表]或数据表。我使用Visual Basic 2013作为桌面,我有一个叫做垃圾的Microsoft Access Table表,我的访问文件的名称是Student.accdb。我的数据集称为StudentDataSet1。我通过Database Explorer添加了数据库,状态为Open。我不是一个程序员,我只是在玩微软Access和VB。此外,我输入连接字符串,它仍然无法正常工作。有人可以帮忙吗?无法映射表

公共类Form1中

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    'Fill retrieves rows from the data source by using the SELECT statement 
    Dim con As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\Student.accdb") 
    Dim da As OleDb.OleDbDataAdapter 
    Dim sql As String 
    Dim ds As New DataSet 
    sql = "Select * from crap " 
    da = New OleDb.OleDbDataAdapter(sql, con) 
    da.Fill(ds, "AddressBook") 
End Sub 


Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim da As OleDb.OleDbDataAdapter 
    da = New OleDb.OleDbDataAdapter 
    Dim Department As String 

    Dim i, ID As Integer 
    Dim rw As DataRow 
    'Add a new row to the Student table. 
    rw = StudentDataSet1.Tables(0).NewRow 
    ID = InputBox("Enter your ID") 
    Department = InputBox("Enter your Department") 


    rw.Item("ID") = ID 
    rw.Item("Department") = Department 

    Try 
     StudentDataSet1.Tables(0).Rows.Add(rw) 
     'Update the Student table in the testdb database. 
     i = da.Update(StudentDataSet1) 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    End Try 
    'Displays number of rows updated. 
    MessageBox.Show("no of rows updated=" & i) 
End Sub 

回答

0

当你填充DataSet,你必须给一个名字到DataTable加载选项。你已经给出了名字“AddressBook”。当您在代码中稍后调用Update方法时,应再次提供此名称

i = da.Update(StudentDataSet1, "AddressBook") 

当您调用Update方法时应考虑另一个问题。如果没有命令来执行这些操作,OleDbDataAdapter通常不能更新/删除/插入新记录。你可以编写你自己的命令并设置DataAdapter的InsertCommand,UpdateCommand和DeleteCommand属性,但是对于上面的单表查询,你可以使用一个方便的类来为你创建这些命令。提供的选择命令返回的主键表

' Move it at the global scope here to reuse the same adapter when you call the update 
Dim da As OleDb.OleDbDataAdapter 

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    Dim sql = "Select * from crap " 
    Dim ds As New DataSet 

    Using con = New OleDb.OleDbConnection(.....) 
     da = New OleDb.OleDbDataAdapter(sql, con) 
     Dim builder = new OleDb.OleDbCommandBuilder(da) 
     da.InsertCommand = builder.GetInsertCommand() 
     da.UpdateCommand = builder.GetUpdateCommand() 
     da.DeleteCommand = builder.GetDeleteCommand() 
     da.Fill(ds, "AddressBook") 
    End Using 
End Sub 


Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    ' Use the global adapter created at the form load 
    ' Dim da As OleDb.OleDbDataAdapter 
    ' da = New OleDb.OleDbDataAdapter 
    ......  
    Try 

     i = da.Update(StudentDataSet1, "AddressBook") 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    End Try 
    MessageBox.Show("no of rows updated=" & i) 
End Sub 
+0

史蒂夫,我把它称为学生,而不是与地址簿和我的点心DS作为StudentDataSet但我不断收到更新需要有效的InsertCommand当新行传递的DataRow集合。 – user3333523

+0

这是另一个问题,我会尝试更新答案。 – Steve

+0

史蒂夫我刚刚尝试了这一点,我不能建立我的解决方案,因为OleDbCommandbuilder没有定义。我有用于桌面的Visual Studio 2013。我可以告诉你我现在拥有什么。 – user3333523