2013-03-13 55 views
0

我有一个VB.Net程序,检查是否在上周使用了特定的终端。我想用if语句向我发送结果。如果TableAdapter的是空(NULL),那么我想它在程序执行的东西......现在我得:空表适配器值与if语句

Me.1TableAdapter.Fill(Me.SwiperCheck.1, DTstartdate, TodayEnd) 

If (Me.SwiperCheck.1.Count = 0) Then 

msgbox ("It Worked") 

这里是我的数据集查询:

SELECT  CASE WHEN COUNT(sTerminal) = 0 THEN NULL ELSE COUNT(sTerminal) END AS terminal 
FROM   Swipe 
WHERE  (dtCreated BETWEEN @startdate AND @enddate) AND (sTerminal = 'Swiper 1') 

但是这不是工作,我知道输出是“空”如果输出不为空,程序正常工作。

回答

1

如果您希望它在计数为零时不返回记录,那么您必须执行下列操作:

SELECT  COUNT(sTerminal) terminal 
FROM   Swipe 
WHERE  (dtCreated BETWEEN @startdate AND @enddate) AND (sTerminal = 'Swiper 1') 
HAVING COUNT(sTerminal) > 0 

这应该会让你的精准IF工作正常。

0

尝试改变0的DBNull或

me.swipercheck.1.count is nothing 
+0

我试过了,它没有工作。 – Shmewnix 2013-03-13 12:45:01

+0

什么是错误显示? – Kasnady 2013-03-14 00:44:03

+0

“是”运算符不接受“整数”的操作数。操作数必须被引用或可为空类型。我也尝试过DBNULL,并且dbnull返回相同的错误。 – Shmewnix 2013-03-14 16:50:52

0

您的查询,如写的,总会有一个排。您的状况正在检查表格上的行数。因此,“如果(1 = 0),那么” ......

你真正需要检查的是:

If (Me.SwiperCheck.1.Item(0) Is DBNull.Value) Then 
+0

这不起作用。我没有收到消息框。 – Shmewnix 2013-03-16 20:51:24

+0

@Shmewnix您是否尝试调试您的代码?在'if'语句中设置一个断点,并将'Me.SwiperCheck.1.Item(0)'放在Watch窗口中。看看里面有什么。 – 2013-03-17 06:19:35

0

我觉得从您的查询的NULL回报给你的麻烦。您可以通过删除CASE语句并返回计数(sTerminal)来简化查询。然后,你有一个一致的返回值:

SELECT COUNT(sTerminal) AS terminal 
FROM   Swipe 
WHERE  (dtCreated BETWEEN @startdate AND @enddate) AND (sTerminal = 'Swiper 1') 

那我就关注@比尔的建议,因为你总是有一个返回行:

If (Me.SwiperCheck.1.Item(0) = 0) Then 

查看您的“可空”的错误本文MSDN-Nullable Value

+0

错误对于类型Swipercheck.1Row'和Integer – Shmewnix 2013-03-16 20:51:02

+0

@Shmewnix没有定义运算符'='......很难知道在没有看到类的代码的情况下,原因是什么。但是,这个想法是,您可以从查询中找到返回的值并将逻辑应用到它。 – MikeTWebb 2013-03-18 14:15:50

0

试过IsDbNull(me.swipercheck.1.count)= false而不是? (对不起,由于代表的关系,我似乎无法写出对帖子的小评论)。