2013-05-01 2 views
0

Моя проблема заключается в получении данных из моей базы данных доступа для отображения в представлении. Всякий раз, когда я запускаю приложение, он выдает ошибки перед da2.Fill (ds2, «Inventory»). Таблицы, которые я использую, называются Product и Inventory. Попробовали все, что я мог придумать, любые подсказки/источники, которые были бы очень полезными.Заполнение DataGridView

Public Class Form1 
Dim con As New OleDb.OleDbConnection 
Dim ds As New DataSet ' in memory version of database 
Dim da As OleDb.OleDbDataAdapter 
Dim sql As String 

Dim ds2 As New DataSet 
Dim da2 As OleDb.OleDbDataAdapter 
Dim sql2 As String 

Dim strProdNo As String 
Dim inc, MaxRows As Integer 

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    'TODO: This line of code loads data into the 'ComputerWarehouseProjectDataSet.Product' table. You can move, or remove it, as needed. 
    'Me.ProductTableAdapter.Fill(Me.ComputerWarehouseProjectDataSet.Product) 
    con.ConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source = ComputerWarehouseProject.mdb" 
    con.Open() 'put a try catch around this 
    sql = "SELECT * FROM Product order by ProdNo" 
    da = New OleDb.OleDbDataAdapter(sql, con) 
    da.Fill(ds, "ComputerWarehouseProject") 
    con.Close() 
    MaxRows = ds.Tables("ComputerWarehouseProject").Rows.Count 
    inc = 0 
    NavigateRecords() 

End Sub 
Private Sub NavigateRecords() 
    Try 
     txtId.Text = ds.Tables("ComputerWarehouseProject").Rows(inc).Item(0) 
     txtPart.Text = ds.Tables("ComputerWarehouseProject").Rows(inc).Item(1) 
     txtQoh.Text = ds.Tables("ComputerWarehouseProject").Rows(inc).Item(3) 
     txtCost.Text = ds.Tables("ComputerWarehouseProject").Rows(inc).Item(4) 
     'MessageBox.Show("Works 1") 
     txtSugPrice.Text = ds.Tables("ComputerWarehouseProject").Rows(inc).Item(5) 
     cbProd.Text = ds.Tables("ComputerWarehouseProject").Rows(inc).Item(0) & " " & ds.Tables("ComputerWarehouseProject").Rows(inc).Item(1) 
     'MessageBox.Show("Works 2") 
     txtRecBeg.Text = (inc + 1).ToString 
     'MessageBox.Show("Works 3") 
     txtRecEnd.Text = ds.Tables("ComputerWarehouseProject").Rows.Count.ToString 
     'MessageBox.Show("Works 4") 
     bldInv() 
     'MessageBox.Show("Works 5") 
    Catch 
     MessageBox.Show("Data Error! Cannot Navigate to Selected Record at position " & inc.ToString) 

    End Try 

End Sub 
Private Sub bldInv() 

    strProdNo = ds.Tables("ComputerWarehouseProject").Rows(inc).Item(0) 
    sql2 = "Select * from Inventory where ProdNo = " + strProdNo 
    ds2.Clear() 
    MessageBox.Show(sql2) 
    da2 = New OleDb.OleDbDataAdapter(sql2, con) 

    MessageBox.Show("Right before fill") 
    da2.Fill(ds2, "Inventory") 


    dgvInv.DataSource = ds2.Tables("Inventory") 
    dgvInv.AutoResizeColumns() 


End Sub 
+0

Итак, когда вы выполняете SQL в SQL2 непосредственно с базой данных Access, вы получите записи обратно? – DeanOC

+0

Попробуйте изменить свой набор данных на объект данных. Я думаю, ваша проблема в том, что вы пытаетесь переименовать таблицу. – SSS

+0

Или вы можете попробовать изменить запрос на «SELECT * FROM Product AS ComputerWarehouseProject order by ProdNo» – SSS

ответ

0

Вы также можете попробовать это:

da.Fill(ds) 
con.Close() 
MaxRows = ds.Tables(0).Rows.Count 
Смежные вопросы