Store EEP Files in the Database Using the VARBIT data type available in R:BASE 5.x, you can store EEP files in the database itself. Use a single generic EEP file to write a specific EEP from the database to a disk file and then execute the EEP. The #FORM_FORMNAME, #FORM_TABLENAME, and #FORM_COLUMNNAME system variables added in 5.0 make this easy to do. Create a table to hold the EEP data. For example, a table named EEPTable might have the following columns: Column Name Data Type Description EEPid INTEGER An autonumbered ID column. FormName TEXT 18 The name of the form the EEP is used in. The form name is returned by the #FORM_FORMNAME system variable when the form runs. TableName TEXT 18 The name of the table in the form where the EEP is placed. The current table name is returned by the #FORM_TABLENAME system variable when the form runs. FieldName TEXT 18 The name of the column or variable the EEP is placed on. The current field name is returned by the #FORM_COLUMNNAME system variable. For a table level EEP, use a key word indicating the type of table EEP: rowentry, saverow, exitrow, or exitsect. For an EEP placed on a button (5.1), use a keyword identifying the button: button1, button2, etc. EEP_Type TEXT 18 The type of EEP: field, table, or button. Descr NOTE A description of the EEP. EEP_File_Name TEXT 12 The actual file name of the EEP. EEP_Data LONG The EEP command file. VARBIT The table EEPTable can be loaded through a form, the Data Browser, or the INSERT or LOAD commands. The easiest way to load the data would be through a quick form. You can even have a form open in the Form Designer while you are entering the information about that form in the EEPTable form. Use the MDI syntax from the R> prompt window to open the EEPTable form as a window. Then as you are entering data about the EEPs, you can refer to the form in the Form Designer window and make sure all the form, table, and column name references are correct. Multiple windows open on the screen makes loading the table with all the EEP information a fairly simple process. When entering the actual EEP file in the form, just press [Shift][F10] from the EEP_data field. The Windows common file dialog box opens and you can select the EEP file name directly. That file is then loaded automatically into the table. Be aware that database File 4 can become quite large, particularly if your database application has many EEPs. If most of the EEPs are small files (< 4K), consider using a BITNOTE data type instead of LONG VARBIT. The LONG VARBIT data type always allocates a minimum of 4K per row (file). The BITNOTE data type has a maximum length of 4K, and allocates only as much space as it needs to store the file. You can use both a BITNOTE column for small EEP files and a LONG VARBIT column for larger files. Add code to the file generic.eep to determine which column contains the EEP command file. Once the EEP files have been loaded into the table, the files can be deleted from the hard disk. A single file, generic.eep, is used to run all the EEPs. Generic.eep checks to see which form, table, and field is current when generic.eep is called. The appropriate EEP code is written to a disk file with a unique name and then that file is executed. For table and button EEPs, parameters are passed from the form indicating the EEP type and identifying name. Parameters can be passed to an EEP just as parameters can be passed to a command file. A passed parameter becomes a percent variable. You can only pass parameters to an ASCII EEP, not to an EEP that is a block in a procedure file; there is not enough space on the settings screens to enter block and procedure file names as well as parameter values. The settings screens have two spaces available for naming the EEP file. One space follows the word RUN and is used to enter the name of the ASCII EEP file or command block; the second space follows the word IN and is used to indicate the name of the procedure file when the EEP is a command block. To pass parameters to an EEP, follow the name of the ASCII EEP file with the keyword USING. Then, after the word IN, place the desired parameter values. The word IN is passed as the first parameter, %1, and the other parameters are numbered respectively. The number of parameters is limited by the available space_18 characters. In generic.eep, the EEP type (field, table, or button) is passed as parameter one (%2), and the second parameter (%3) identifies a particular table or button EEP. The second parameter is compared to the column FieldName in EEPTable. The parameter passing allows easy checking and identification for table and button EEPs since they aren't associated with a particular column. When assigning generic.eep to a button, for example, the "EEP Action" dialog box looks like this: *(generic.eep) SET VAR vEEP_Type = .%2 SET VAR vEEP_fieldname = .%3 IF vEEP_Type = 'table' OR + vEEP_Type = 'button' THEN SELECT EEP_Data INTO vEEP_Data FROM EEPTable + WHERE formname = .#FORM_FORMNAME AND + tablename = .#FORM_TABLENAME AND + fieldname = .vEEP_fieldname ELSE SELECT EEP_Data INTO vEEP_Data FROM EEPTable + WHERE formname = .#FORM_FORMNAME AND + tablename = .#FORM_TABLENAME AND + fieldname = .#FORM_COLUMNNAME ENDIF -- create a unique file name using the keyword NAME SET VAR vfile = (SGET(CVAL('NAME'),8,1)+ '.eep') WRITE .vEEP_Data TO .vfile RUN &vfile ERASE .vfile CLE VAR %1-0,%2-0,%3-0,veep_type, veep_fieldname RETURN