2016-09-23 204 views
0
Public Class frmOrder 
Dim ItemNumber As String 
Dim con As New OleDb.OleDbConnection 
Dim dbprovider As String 
Dim dbsource As String 
Dim ds As New DataSet 
Dim da As OleDb.OleDbDataAdapter 
Dim sql As String 
Dim ds1 As New DataSet 
Dim da1 As OleDb.OleDbDataAdapter 
Dim sql1 As String 
Dim ds2 As New DataSet 
Dim da2 As OleDb.OleDbDataAdapter 
Dim sql2 As String 
Dim ds3 As New DataSet 
Dim da3 As OleDb.OleDbDataAdapter 
Dim sql3 As String 
Dim ds4 As New DataSet 
Dim da4 As OleDb.OleDbDataAdapter 
Dim sql4 As String 
Dim lastReceiptNumber As Integer 
Dim CustomerID1 As Integer 

Private Sub frmOrder_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    ItemNumber = frmShop.Label13.Text 
    CustomerID1 = Convert.ToInt32(frmLogin.Label3.Text) 
    dbprovider = "PROVIDER = Microsoft.ACE.OLEDB.12.0;" 
    dbsource = "Data Source = C:\Users\Patrick\Desktop\FinalDatabase.accdb" 
    con.ConnectionString = dbprovider + dbsource 
    con.Open() 
    sql = "SELECT * FROM ITEMS" 
    da = New OleDb.OleDbDataAdapter(sql, con) 
    da.Fill(ds, "Items") 
    sql1 = "SELECT Address FROM CUSTOMER WHERE CustomerID= " & CustomerID1 & "" 
    da1 = New OleDb.OleDbDataAdapter(sql1, con) 
    da1.Fill(ds1, "Address") 

    sql2 = "SELECT * FROM [ORDER]" 
    da2 = New OleDb.OleDbDataAdapter(sql2, con) 
    da2.Fill(ds2, "ORDER") 

    sql3 = "SELECT MAX(ReceiptNumber) FROM [ORDER]" 
    da3 = New OleDb.OleDbDataAdapter(sql3, con) 
    da3.Fill(ds3, "Orders") 
    sql4 = "SELECT * FROM DELIVERY" 
    da4 = New OleDb.OleDbDataAdapter(sql4, con) 
    da4.Fill(ds4, "Delivery") 

    con.Close() 

    txtItemCode.Text = ds.Tables("Items").Rows(ItemNumber).Item(0) 
    txtItemName.Text = ds.Tables("Items").Rows(ItemNumber).Item(1) 
    txtSize.Text = ds.Tables("Items").Rows(ItemNumber).Item(2) 
    txtPrice.Text = ds.Tables("Items").Rows(ItemNumber).Item(4) 
    txtDeliveryFee.Text = "100.00" 
    txtDeliveryAddress.Text = ds1.Tables("Address").Rows(0).Item(0) 

End Sub 

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 
    frmShop.Show() 
    Me.Close() 
End Sub 

Private Sub btnBuy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuy.Click 


    Dim today As System.DateTime 
    Dim deliverydate As System.DateTime 
    today = System.DateTime.Now 
    deliverydate = today.AddDays(7) 
    Dim cb As New OleDb.OleDbCommandBuilder(da2) 
    Dim dsNewRow As DataRow 
    Dim cb1 As New OleDb.OleDbCommandBuilder(da3) 
    Dim dsNewRow1 As DataRow 

    dsNewRow = ds2.Tables("ORDER").NewRow() 
    dsNewRow.Item(1) = CustomerID1 
    dsNewRow.Item(2) = txtItemCode.Text 
    dsNewRow.Item(3) = txtQuantity.Text 
    dsNewRow.Item(4) = txtPrice.Text 
    dsNewRow.Item(5) = txtDeliveryFee.Text 

    ds2.Tables("ORDER").Rows.Add(dsNewRow) 
    da2.Update(ds2, "ORDER") 




    lastReceiptNumber = ds3.Tables("Orders").Rows(0).Item(0) 

    dsNewRow1 = ds4.Tables("Delivery").NewRow() 
    dsNewRow1.Item(0) = lastReceiptNumber 
    dsNewRow1.Item(1) = txtDeliveryAddress.Text 
    dsNewRow1.Item(3) = deliverydate 
    dsNewRow1.Item(4) = "Processing" 

    ds4.Tables("Delivery").Rows.Add(dsNewRow1) 
    da4.Update(ds4, "Delivery") 
    MsgBox("Item Bought!", MsgBoxStyle.OkOnly + MsgBoxStyle.Information) 

End Sub 

末級語法錯誤插入語句錯誤

IM上da2.Fill(DS2,「訂單」),有人可以幫我這個有錯誤?錯誤是語法錯誤插入到語句中。我會很感激所有那些會有所幫助的。謝謝!

+0

你爲什麼不使用鏈接表? – JCro

+1

你的代碼有很多問題。請修改您的編碼風格,嘗試捕獲錯誤,嘗試使用「使用」方法,並讓系統在您使用後關閉連接,嘗試使用參數以避免sql注入,最後請使用表格的前綴來消除名稱衝突!訂單是訪問中的關鍵字! –

+0

@krishKM:我假設你的意思是'使用'*聲明*。我堅決不同意你的「表格的前綴」建議。 – onedaywhen

回答

0

當您使用命令生成器來創建InsertCommandUpdatedCommandDeleteCommand的數據適配器,它要麼是你在SelectCommand使用或採取相同的列名,如果您使用通配符(*)將採取數據庫表中的列名稱。如果其中一個列名是保留字或包含空格或其他特殊字符,則生成的SQL將無效。有三種方法可以解決這個問題:

  1. 更改您的列名,使它們不是保留字或包含空格或其他特殊字符。這應該是你的第一選擇。
  2. 請勿在查詢中使用通配符。如果你明確指定每一列,那麼你將被迫轉義任何保留字等,並且命令生成器也會這樣做。
  3. 設置命令生成器的QuotePrefixQuoteSuffix屬性,以便它轉義所有列名稱。

如果您不能使用選項1,那麼選項2嚴格來說是剩餘選擇的更好選擇,但選項3更容易。在使用Microsoft數據庫時,您可以分別將這些屬性設置爲「[」和「]」。

+0

謝謝。它解決了我的問題。 –