2016-07-23 16 views
-1

我試圖從MySQL中讀取數據,並顯示在DataGridView中有如下代碼:讀取數據的DataGridView

Dim totalManagerQuantity As Integer 
Dim totalStaffQuantity As Integer 
Dim totalProductionQuantity As Integer 
Dim totalSalesManager As Double 
Dim totalSalesStaff As Double 
Dim totalSalesProduction As Double 
     sqL = "SELECT TDate, InvoiceNo, 
        (
        SELECT TD.Quantity 
        FROM TransactionDetails as TD 
        WHERE TD.InvoiceNo = T.InvoiceNo 
        AND TD.ProductNo = 1 
       ) as ManagerQuantity, 
        ( 
        SELECT TD.ItemPrice 
        FROM TransactionDetails as TD 
        WHERE TD.InvoiceNo = T.InvoiceNo 
        AND TD.ProductNo = 1 
       ) as ManagerPrice, 
        (
        SELECT TD.Quantity 
        FROM TransactionDetails as TD 
        WHERE TD.InvoiceNo = T.InvoiceNo 
        AND TD.ProductNo = 2 
       ) as StaffQuantity, 
        ( 
        SELECT TD.ItemPrice 
        FROM TransactionDetails as TD 
        WHERE TD.InvoiceNo = T.InvoiceNo 
        AND TD.ProductNo = 2 
       ) as StaffPrice, 
        ( 
        SELECT TD.Quantity 
        FROM TransactionDetails as TD 
        WHERE TD.InvoiceNo = T.InvoiceNo 
        AND TD.ProductNo = 3 
       ) as ProductionQuantity, 
        ( 
        SELECT TD.ItemPrice 
        FROM TransactionDetails as TD 
        WHERE TD.InvoiceNo = T.InvoiceNo 
        AND TD.ProductNo = 3 
       ) as ProductionPrice 
      FROM Transactions as T 
      WHERE TDate BETWEEN '" & frmFilterReportInvoice.dtpStartDate.Value.ToString("MM/dd/yyyy") & "' 
      AND '" & frmFilterReportInvoice.dtpEndDate.Value.ToString("MM/dd/yyyy") & "' 
      AND StaffID = '" & lblTempStaffID.Text & "'" 
     ConnDB() 
     cmd = New MySqlCommand(sqL, conn) 
     dr = cmd.ExecuteReader 

     dgvReportInvoice.Rows.Clear() 
     dgvTotalQuantity.Rows.Clear() 
     totalManagerQuantity = 0 
     totalStaffQuantity = 0 
     totalProductionQuantity = 0 
     totalSalesManager = 0 
     totalSalesStaff = 0 
     totalSalesProduction = 0 

     Do While dr.Read = True 

      dgvReportInvoice.Rows.Add(dr("TDate"), dr("InvoiceNo"), dr("ManagerQuantity"), dr("StaffQuantity"), dr("ProductionQuantity")) 

      'Compute total manager, staff and production to Display 
      totalManagerQuantity += dr("ManagerQuantity") 
      totalStaffQuantity += dr("StaffQuantity") 
      totalProductionQuantity += dr("ProductionQuantity") 

      'Calculate the total amount per products 
      totalSalesManager += (dr("ManagerPrice") * dr("ManagerQuantity")) 
      totalSalesStaff += (dr("StaffPrice") * dr("StaffQuantity")) 
      totalSalesProduction += (dr("ProductionPrice") * dr("ProductionQuantity")) 

     Loop 

但我的代碼有錯誤時處理的計算量(+ =)爲每下面,你會幫助我如何解決我的問題,什麼是正確的代碼,謝謝。

P.S.如果我的桌子上沒有數據,就會報錯。 http://imgur.com/a/2BIAd

問候,

+0

請不要把「回答」,或在標題爲「解決」。在這裏,正確的做法是點擊解決問題的答案旁邊的複選標記。請參閱[Tour]瞭解更多信息,您可能還想閱讀[Ask] - 錯誤消息圖片的鏈接沒有得到很好的接收。你也應該使用SQL參數 - 這會簡化你的代碼。 – Plutonix

回答

0

你應該空檢查值相加前:

If not IsDBNull(dr("ManagerQuantity")) Then 
    totalManagerQuantity += dr("ManagerQuantity") 
End If 
+0

嗨@安德魯,感謝您的幫助,現在工作,祝您有個美好的一天... – dhewa