VFP8:检查查询是否返回结果

时间:2018-06-25 20:38:36

标签: visual-foxpro

我正在导入一堆表,但在其中一些表中发现数据错误。这些错误是在几年前创建表时引入的。我想创建一个简单的警报,通知我应该手动检查该表。

以下方法有效,但是它弹出查询结果,我不需要。

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。

2 个答案:

答案 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