2016-11-19 103 views
-1
Sub GetData(ByVal SelectedColumn As String, ByVal Table As String, ByVal ConditionField As String, ByVal ConditionValue As String, ByVal FieldValue As Integer) 
    con.Close() 
    con.Open() Query = "select " & SelectedColumn & " from " & Table & " where " & ConditionField & " = " & ConditionValue 
    cmd = New OleDbCommand(Query, con) 
    DR = cmd.ExecuteReader 
    While DR.Read 
     FieldValue = DR.Item(SelectedColumn) 
    End While 
    con.Close() 
End Sub 

我創建這個子到一個值獲取數據庫我的數據庫是Access 2010中當我運行它fieldValue方法沒有返回正確的值fieldValue方法沒有返回

Dim S As Integer 
GetData("Price", "ProductList", "ProductName", "'7up'", S) 
MsgBox(S) 

現在我用的是Sub並打印它獲取的值,但MsgBox值爲零(0)。它應該是八(8)。我試圖把一個msgBox放入Sub並打印FieldVAlue,然後獲取值並打印出正確的值。但爲什麼我的模糊「S」仍然是零?順便說說小組在我的模塊

+0

安置自己在這裏的代碼,如文本,請 – Danh

+0

子的GetData(BYVAL SelectedColumn作爲字符串,BYVAL表作爲字符串,BYVAL ConditionField作爲字符串,BYVAL ConditionValue作爲串,BYVAL fieldValue方法作爲整數) con.Close() con.Open() 查詢= 「選擇」 &SelectedColumn& 「從」 &表& 「其中」 &ConditionField& 「=」 &ConditionValue CMD =新OleDbCommand(Query,con) DR = cmd.ExecuteReader While DR.Read FieldValue = DR.Item(SelectedColumn) End While con.Close() 結束子 –

+0

昏暗S作爲整數 的GetData( 「價格」, 「產品列表」, 「產品名稱」, 「 '七喜'」,S) MSGBOX(S) –

回答

0

您的問題是FieldValueS的副本。你根本沒有設置S。聲明ByRef FieldValue...和你在商業

在vb.net中有值和參考類型。值類型參數(如integer)作爲值的副本傳遞。而引用類型傳遞地址的副本。當你傳遞int(10)ByVal時,你通過了複製。當您執行FieldValue = DR.Item(SelectedColumn)時,您可以在方法內設定值。但是你沒有設置S。但是,如果您通過ByRef,則通過地址複製,並在此情況下設置與S相同的值。

當然,如果您在查詢中使用while可能會返回多於1個結果 - 這是一個問題。至少,使用if如果你希望值1,或者更好 - ExecuteScalar

+0

感謝它的工作:)但你能解釋給我嗎? –

+0

@ArnoldBarrozo請接受並點贊答案。我會將解釋添加到回答 –

+0

完成,但不能完成。 –