2010-11-15 75 views
0

我有查詢使用microsft access 2007和vb.net。如果我試圖手動在Microsoft Access中執行它,那麼結果很好。但在vb.net中使用的代碼,我我已經得到了結果都是一樣的不正確的查詢結果vb.net和微軟訪問

請幫助...

這裏是代碼

"SELECT " & _ 
    "amount as sss_loan_amount," & _ 
    "(SELECT amount FROM pr_deduction " & _ 
     "INNER JOIN pr_employee_deduction " & _ 
     "ON pr_deduction.deduction_id = pr_employee_deduction.deduction_id " & _ 
     "WHERE pr_deduction.deduction_type = 'pag-ibig' " & _ 
     "AND employee_id = 60) as pagibig_amount," & _ 
    "(SELECT amount FROM pr_deduction " & _ 
     "INNER JOIN pr_employee_deduction " & _ 
     "ON pr_deduction.deduction_id = pr_employee_deduction.deduction_id " & _ 
     "WHERE pr_deduction.deduction_type = 'cash Advance' " & _ 
     "AND employee_id = 60) as cashadvance_amount " & _ 
"FROM pr_deduction " & _ 
"INNER JOIN pr_employee_deduction " & _ 
"ON pr_deduction.deduction_id = pr_employee_deduction.deduction_id " & _ 
"WHERE pr_deduction.deduction_type = 'sss loan' " & _ 
"AND employee_id = 60 " 

在訪問的結果是FF

sss_loan_amount pagibig_amount cashadvance_amount  
1100    1200   1300

使用下面的輸出代碼是相同的「1100」。我無法追查爲什麼。

MsgBox(reader("sss_loan_amount")) 
MsgBox(reader("pagibig_amount")) 
MsgBox(reader("cashadvance_amount")) 
+0

爲了便於閱讀,我大量編輯了sql語句,因此如果缺少開始或結束引號或續行字符,您可能會喜歡查看原始內容。 – Fionnuala 2010-11-15 10:22:48

+0

恐怕我不明白你的問題,而且沒有人回答,我可能不是唯一的答案。 – Fionnuala 2010-11-15 15:31:22

+0

我認爲他所說的是MsgBox()語句都是從第一個字段返回數據,而不是從三個字段中的每一個返回數據。這不是一個訪問問題,所以我無法幫助。 – 2010-11-15 22:16:37

回答

0

我對訪問數據類型並不太熟悉,但它可能不喜歡使用字符串作爲字段標識符。嘗試使用reader(0)reader(1)等...此外,如果使用不正確的字段名稱reader("xxx")會發生什麼情況。

如果沒有,您能否提供顯示reader()如何填充的代碼。

+0

hi basiclife我使用回答我的問題發佈了vb代碼,因爲我無法使用添加評論發佈它。謝謝 – tirso 2010-11-16 01:40:27

+0

您是否試過@ BasicLife對讀者(0),讀者(1)......的建議? – mellamokb 2010-11-16 01:58:12

+0

我已經嘗試,但幾乎相同的輸出,它會給1100所有結果 – tirso 2010-11-16 04:49:04

0

這裏是VB代碼

Public Sub SETCONNECTION() 
     dataCon = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Persist Security Info=False;Data Source=D:\system_development\aim_global\timekeeping_payroll\timekeeping_payroll\bin\data\timekeeping_payroll.accdb;Jet OLEDB:Database Password=") 
     dataCon.Open() 
    End Sub 

    Public Sub ReadSQL(ByVal sSQL As String) 
     Try 
     SETCONNECTION() 
     CMD = New OleDbCommand(sSQL, dataCon) 
     reader = CMD.ExecuteReader(CommandBehavior.CloseConnection) 

    Catch ex As Exception 
     MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) 

    End Try 
    End Sub 

這裏是VB代碼,得到的結果和表現出來。

Dim sSQL As String 

sSQL = "SELECT amount as sss_loan_amount,(SELECT amount FROM pr_deduction INNER JOIN pr_employee_deduction ON pr_deduction.deduction_id = pr_employee_deduction.deduction_id WHERE pr_deduction.deduction_type = 'pag-ibig' AND employee_id = 60) as pagibig_amount," 

sSQL += " (SELECT amount FROM pr_deduction INNER JOIN pr_employee_deduction ON pr_deduction.deduction_id = pr_employee_deduction.deduction_id WHERE pr_deduction.deduction_type = 'cash Advance' AND employee_id = 60) as cashadvance_amount " 

sSQL += " FROM pr_deduction INNER JOIN pr_employee_deduction ON pr_deduction.deduction_id = pr_employee_deduction.deduction_id WHERE pr_deduction.deduction_type = 'sss loan' AND employee_id = 60 " 

ReadSQL(sSQL) 

reader.Read() 



MsgBox(RVC(reader("sss_loan_amount"))) 

MsgBox(RVC(reader("pagibig_amount"))) 

MsgBox(RVC(reader("cashadvance_amount"))) 
+0

嗨,作爲參考,添加代碼的正確方法是編輯您的問題,而不是發佈答案。如果我有足夠的代表,我會爲你編輯它,但我沒有。 – Basic 2010-11-16 10:35:01

+0

你能否澄清一下RVC()的調用?如果在reader.Read()之後在行上放置斷點,則調試器會告訴您關於reader對象的信息?它是否告訴你有多少行/列(字段/記錄)?另外,您在我的問題的評論中沒有提及 - 如果您使用不存在的字段名稱會發生​​什麼情況?最後,你能澄清讀者對象的確切類型嗎?例如它是'OleDb.OleDbDataReader' – Basic 2010-11-16 10:39:38

+0

假設它是一個OleDb.OleDbDataReader,它應該有以下字段:FieldCount,HasRows,VisibleFieldCount。你也應該能夠明確地調用'reader.item(0)','reader.item(1)','reader.item(「sss_loan_amount」)'等等......這些給出不同的結果嗎? – Basic 2010-11-16 10:45:09