2017-08-09 17 views
-1

如何獲得SQL求和查詢的結果到文本框中?這裏是我的代碼:
我需要得到SQL求和結果爲Text112VB6如何獲得SQL求和結果到文本框

If rs3.State <> 0 Then rs3.Close 
    rs3.Open "select sum(TotalHours) as thrs from tbldwardetails where employeesid =" & Val(empids) & " And dwardate=" & Val(dwardate), db, 3, 3 
    If rs3.RecordCount <> 0 Then 
     Text112.Text = rs3!thrs 
    Else 

    End If 
+0

你實際上是在做正確的事IMO除非你的總和始終爲0,你是不是把它傳遞到正確的文本框控件。儘管我會選擇EOF和BOF來測試查詢的結果,如果您在記錄集中沒有做任何事情,我也建議立即關閉它並使用Field而不是!當檢索性能問題的值時。 – Learning

+1

我懷疑你做錯了*當沒有行符合選擇條件時,這應該返回一個Null結果,即結果* always *有一列中的一行,但它可能包含Null。 RecordCount,BOF,EOF都是要看的東西。該函數返回Null,以便將它與總計爲0的Sum區分開來。有些傻瓜會將SQL表達式中的Null強制爲0,但在代碼中測試結果總是更有意義,因爲Null不是0並且具有特定含義,在這種情況下「沒有任何匹配」。 – Bob77

+0

因爲他正在使用SUM,所以它可能是空的。當條件中沒有找到行時,我忘記了SUM與COUNT不同。他可能會在將值傳遞給文本框控件時接收到無效的NULL錯誤,但沒有提及。是的,測試EOF和BOF的結果不會有任何意義,因爲SUM或COUNT總是會返回一行。上投票。 – Learning

回答

0

注意到,Sum()回報總是1個記錄,但返回的值,如果沒有記錄滿足條件,也許空。

所以你只需要檢查返回值是空或不是:

If not IsNull(rs3!thrs) Then 
    Text112.Text = rs3!thrs 
Else 
    Text112.Text = "0" ' or vbNullString 
End If 

注:總記錄不應該被使用,因爲它值從遊標側取決於:

  • 服務器端(adUseServer)是默認的,總是返回-1
  • 客戶端(爲adUseClient)返回的記錄數
0

如果結果爲空,則可以使用更智能的查詢來返回值。

If rs3.State <> 0 Then rs3.Close 

rs3.Open "SELECT IFNULL(SUM(TotalHours), 0) as thrs from tbldwardetails where employeesid =" & Val(empids) & " And dwardate=" & Val(dwardate), db, 3, 3 

If rs3.RecordCount <> 0 Then 
    Text112.Text = rs3!thrs 
Else 
    '? 
End If 

在上面的查詢中,如果SUM函數返回NULL,則IFNULL函數將返回0。

對不起,我只注意到了MySQL標籤。我從來沒有使用過MySQL,但W3C文檔顯示了IFNULL函數,它看起來像使用相同的方式。

W3Schools的文檔:https://www.w3schools.com/sql/sql_isnull.asp