2013-03-13 31 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而不是? (對不起,由於代表的關係,我似乎無法寫出對帖子的小評論)。