VFP8: проверьте, вернул ли запрос результат - PullRequest
0 голосов
/ 25 июня 2018

Я импортирую несколько таблиц и обнаружил ошибки в некоторых из них.Эти ошибки были введены при создании таблиц много лет назад.Я хочу создать простое предупреждение, чтобы уведомить меня о том, что я должен вручную проверить таблицу.

Следующее работает, но оно выдает результаты запроса, которые мне не нужны.

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 голосов
/ 26 июня 2018

Чтобы предотвратить отображение результата, просто укажите цель для результата.«в массив» или «в курсор» подойдут.

Согласно вашему текущему коду, вас не интересуют возвращаемые строки, поэтому вы можете просто получить счетчик (у вас также была опечатка вкод).то есть:

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

Примечание: вы можете использовать "To Screen" какхорошо, чтобы подавить результаты и получить счет через _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
0 голосов
/ 26 июня 2018

Вы можете добавить «INTO ARRAY dummyCursorName» после того, как предложение WHERE:

   select * ;
      from table_x ;
      where field_x = 'thing used to determine it's bad' ;
      INTO ARRAY dummyCursorName

_TALLY будет по-прежнему сообщать статистику и не будет раздражать окно обзора для работы.

...