At 11:43 AM 6/3/2010, David Fowler wrote:

Is there a way to allow the user to enter a search string or "where clause"
?  I've done it in 2.11 by assigning a variable and having the variable
filled in (fillin x using "Enter search criteria") and then taking that
variable (x) and placing it after the Where in a select command ie. Select
LName from Job where .x (x being something along the lines of - date eq
12/1/2009 or Month eq May and Week eq One). Remember, this is from 2.11 so
eq works and quotes aren't needed.  I have tried this kind of set-up in
7.6, but get a syntax incorrect error, even with correct use of = and '.


David,

Here's how you can give your users the power they need. Just copy and
paste the code below and see what you get.

Use RRBYW14, RRBYW15, or RRBYW16 sample databases to test this technique.

-- User_Defined_Search_String.RMD
-- User_Defined_Search_String.RMD
-- A. Razzak Memon
-- June 3, 2010
-- Supported Versions:
-- R:BASE 7.6 for Windows
-- R:BASE Turbo V-8 for Windows
-- R:BASE eXtreme 9.0 (32/64)

-- Steps:

-- 00. Pre-Define All Global Variables
-- 01. Select Table/View
-- 02. Select Column(s)
-- 03. Build WHERE Clause, if necessary
-- 04. Build Syntax
-- 05. Execute Command

-- Step 00: Predefine All Global Variables
   SET VAR vTableViewName TEXT = NULL
   SET VAR vSys_Table_ID INTEGER = NULL
   SET VAR vColumns TEXT = NULL
   SET VAR vWhereSortClause TEXT = NULL
   SET VAR vSyntax NOTE = NULL
   SET VAR vOutPut TEXT = 'Screen'
   SET VAR vLines INTEGER = NULL
   SET VAR vSyntaxForBROWSE TEXT = NULL
   SET WALKMENU ON

-- Step 01: Select Table/View ...
LABEL PickTableView
   CLS
   CHOOSE vTableViewName FROM #VALUES FOR +
   ((LJS(SYS_TABLE_NAME,54))&SYS_COMMENT),SYS_TABLE_NAME FROM SYS_TABLES +
   WHERE SYS_TABLE_TYPE <> 'SYSTEM TABLE' ORDER BY SYS_TABLE_NAME ASC +
   CHKBOX 1 TITLE 'Select Table/View' +
   CAPTION 'Step 1' LINES 40 FORMATTED +
   OPTION LIST_FONT_COLOR MAROON +
   |LIST_BACK_COLOR 15395562 +
   |LIST_FONT_SIZE 11 +
   |LIST_FONT_NAME COURIER +
   |TITLE_FONT_COLOR RED +
   |TITLE_BACK_COLOR 15395562 +
   |WINDOW_BACK_COLOR 15395562 +
   |TITLE_FONT_SIZE 11 +
   |TITLE_FONT_NAME Verdana +
   |WINDOW_CAPTION +
   |BUTTONS_SHOW_GLYPH ON +
   |BUTTONS_BACK_COLOR WHITE +
   |THEMENAME R:BASE Rocks!
IF vTableViewName = '[Esc]' THEN
  SET VAR vTableViewName = NULL
  GOTO Done
ENDIF
IF vTableViewName IS NULL THEN
  PAUSE 2 USING 'Table/View Not Selected!' ICON STOP +
  OPTION THEMENAME R:BASE Rocks!
  GOTO PickTableView
ENDIF

-- Stepe 02: Select Columns
LABEL PickColumns
   CLS
   SELECT SYS_TABLE_ID INTO vSys_Table_ID INDIC iv1 FROM SYS_TABLES +
   WHERE SYS_TABLE_NAME = .vTableViewName
   SET VAR vLines INTEGER = 0
   SELECT COUNT(*) INTO vLines INDIC iv1 FROM SYS_COLUMNS +
   WHERE SYS_TABLE_ID = .vSys_Table_ID
   IF vLines > 40 THEN
      SET VAR vLines = 40
   ENDIF
   CLS
   CHOOSE vColumns FROM #VALUES FOR +
   ((LJS(SYS_COLUMN_NAME,52))&SYS_COMMENT),SYS_COLUMN_NAME FROM SYS_COLUMNS +
   WHERE SYS_TABLE_ID = .vSys_Table_ID +
   CHKBOX TITLE 'Select Columns' +
   CAPTION 'Step 2' LINES .vLines FORMATTED +
   OPTION LIST_FONT_COLOR MAROON +
   |LIST_BACK_COLOR 15395562 +
   |LIST_FONT_SIZE 11 +
   |LIST_FONT_NAME COURIER +
   |TITLE_FONT_COLOR RED +
   |TITLE_BACK_COLOR 15395562 +
   |WINDOW_BACK_COLOR 15395562 +
   |TITLE_FONT_SIZE 11 +
   |TITLE_FONT_NAME Verdana +
   |WINDOW_CAPTION +
   |BUTTONS_SHOW_GLYPH ON +
   |BUTTONS_BACK_COLOR WHITE +
   |THEMENAME R:BASE Rocks!
IF vColumns = '[Esc]' THEN
   SET VAR vColumns = NULL
   GOTO Done
ENDIF
IF vColumns IS NULL THEN
  PAUSE 2 USING 'Column(s) Not Selected!' ICON STOP +
  OPTION THEMENAME R:BASE Rocks!
  GOTO PickColumns
ENDIF

-- Stepe 03: Build WHERE Clause
   CLS
   CHOOSE vWhereSortClause FROM #WHERE IN &vTableViewName +
   OPTION THEMENAME R:BASE Rocks!
   IF (SLEN(.vWhereSortClause)) < 10 THEN
      SET VAR vWhereSortClause = NULL
   ENDIF

-- Stepe 04: Build Syntax
   SET VAR vSyntax = +
   (IFNULL(.vWhereSortClause,('SELECT'&.vColumns&'FROM'&.vTableViewName), +
   ('SELECT'&.vColumns&'FROM'&.vTableViewName&.vWhereSortClause)))
   SET VAR vSyntaxForBROWSE = +
(IFNULL(.vWhereSortClause,('BROWSE'&.vColumns&'FROM'&.vTableViewName&'NOCHG'), +
   ('BROWSE'&.vColumns&'FROM'&.vTableViewName&.vWhereSortClause&'NOCHG')))

-- Step 05: Execute Command
SWITCH (.vOutPut)
  CASE 'SCREEN'
    &vSyntaxForBROWSE
    BREAK
  CASE 'PRINTER'
    SET LINES 59
    OUTPUT PRINTER FONTNAME COURIER FontSize 12
    &vSyntax
    SET LINES 19
    OUTPUT SCREEN
    BREAK
  CASE 'HTA'
    SET VAR vFileName = (.vTableViewName+'.HTA')
    SET WIDTH 700
    SET LINES 0
    OUTPUT &vFileName
    -- Added Minimum Legal HTML Tags
    WRITE '<HTML>'
    WRITE '<BODY>'
    -- the following must be <PRE> to display plaintext output
    WRITE '<PRE>'
    &vSyntax
    WRITE '</PRE>'
    WRITE '</BODY>'
    WRITE '</HTML>'
    OUTPUT SCREEN
    SET LINES 19
    SET WIDTH 79
    LAUNCH &vFileName
    BREAK
  CASE 'PDF'
    SET VAR vFileName = (.vTableViewName+'.PDF'&'PDF')
    SET VAR vFileNameView = (.vTableViewName+'.PDF')
    SET WIDTH 400
    SET LINES 0
    OUTPUT &vFileName
    &vSyntax
    OUTPUT SCREEN
    SET LINES 19
    SET WIDTH 79
    LAUNCH &vFileNameView
    BREAK
  DEFAULT
    BREAK
ENDSW

LABEL Done
CLEAR VARIABLES iv%,vTableViewName,vColumns,vWhereSortClause, +
vSys_Table_ID,vSyntax,vOutPut,vLines,vSyntaxForBROWSE
RETURN
-- End here ...

Have fun implementing this technique into your own application!

Very Best R:egards,

Razzak.


Reply via email to