我正在导入一堆表,但在其中一些表中发现数据错误。这些错误是在几年前创建表时引入的。我想创建一个简单的警报,通知我应该手动检查该表。
以下方法有效,但是它弹出查询结果,我不需要。
procedure checkForBadRecord
select * ;
from table_x ;
where field_x = 'thing used to determine it's bad'
if _tally > 0 then
messagebox("Check the table for errors!")
endif
endproc
有没有一种方法可以检查表中是否有任何满足条件的行而不显示实际行?
我正在使用Visual FoxPro 8。
答案 0 :(得分:3)
您可以在WHERE子句之后添加“ INTO ARRAY dummyCursorName”:
select * ;
from table_x ;
where field_x = 'thing used to determine it's bad' ;
INTO ARRAY dummyCursorName
_TALLY仍将报告统计信息,并且没有烦人的浏览窗口要处理。
答案 1 :(得分:1)
要防止显示结果,只需指定结果目标。 “进入数组”或“进入光标”即可。
根据您当前的代码,您对返回的行不感兴趣,因此您只需获取计数即可(代码中也有错字)。即:
procedure checkForBadRecord
local array laBadCount[1]
select count(*) ;
from table_x ;
where field_x = "thing used to determine it's bad" ;
into array laBadCount
use in (select('table_x'))
if laBadCount[1] > 0 then
messagebox("Check the table for errors!")
endif
endproc
可能不想编写这样的过程,而是想为更一般的用途编写该过程:
if checkForBadRecord('table_x', 'field_x', "thing used to determine it's bad")
messagebox("Check the table table_x for errors!")
endif
procedure checkForBadRecord(tcTableName, tcFieldToCheck, tuValueToCheck)
local array laBadCount[1]
select count(*) ;
from &tcTableName ;
where &tcFieldToCheck = m.tuValueToCheck ;
into array laBadCount
use in (select(m.tcTableName))
return laBadCount[1] > 0
endproc
注意:您也可以使用“至屏幕”来抑制结果并通过_Tally获取计数。即:
procedure checkForBadRecord
set console OFF
select * ;
from table_x ;
where field_x = "thing used to determine it's bad" ;
to SCREEN
set console ON
use in (select('table_x'))
if _Tally > 0 then
messagebox("Check the table for errors!")
endif
endproc