VB6如何获得SQL求和结果到文本框

问题描述:

如何获得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

注意到,Sum()回报总是1个记录,但返回的值,如果没有记录满足条件,也许空。

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

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

注:总记录不应该被使用,因为它值从游标侧取决于:

  • 服务器端(adUseServer)是默认的,总是返回-1
  • 客户端(为adUseClient)返回的记录数

如果结果为空,则可以使用更智能的查询来返回值。

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