How to search all tables and all fields for a string?

試著忘記壹切 提交于 2019-12-24 17:25:07

问题


I want to search all fields in all tables of a database for a user supplied value and display records which contain that input keyword. Something like this:

FOR EACH _file WHERE (NOT _file-name   BEGINS "_" AND NOT _file-name  BEGINS "sys") 
    NO-LOCK:

    FOR EACH _field OF _file  
        NO-LOCK:

        ASSIGN
            ttable = _file._file-name 
            tfield = _field._field-name .

        FOR EACH &ttable WHERE ttable.tfield MATCHES "urpon frisbee " 
            NO-LOCK :

            MESSAGE "hai"
                VIEW-AS ALERT-BOX INFO BUTTONS OK.
            DISPLAY _file._file-name .
        END.

    END.
END.

回答1:


You want to study "dynamic queries".

procedure x:

  define input parameter tbl as character no-undo.
  define input parameter fld as character no-undo.
  define input parameter xyz as character no-undo.

  define variable qh as handle no-undo.
  define variable bh as handle no-undo.
  define variable fh as handle no-undo.

  create buffer bh for table tbl.
  create query qh.
  qh:set-buffers( bh ).
  qh:query-prepare( "for each " + tbl ).
  qh:query-open.

  qh:get-first( no-lock ).
  do while qh:query-off-end = no:
    fh = bh:buffer-field( fld ).
    if fh:buffer-value = xyz then  /* needs special handing if there are array fields in the db ... */
      do:
        display tbl fld bh:recid fh:buffer-value.
        pause.
      end.
    qh:get-next( no-lock ).
  end.

  delete object bh.
  delete object qh.

  return.

end.

for each _file no-lock where not _hidden:

  for each _field no-lock of _file:

    if _data-type <> "character" then next.  /* skip non-char fields */

    run x ( _file-name, _field-name, "urpon frisbee" ).

  end.

end.


来源:https://stackoverflow.com/questions/29925313/how-to-search-all-tables-and-all-fields-for-a-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!