DOCUMENT #686 ======================================================================= JANUARY/FEBRUARY 1993 PROBLEMS & WORKAROUNDS ======================================================================= Product: R:BASE Version : 3.1 or Higher ======================================================================= Area : GENERAL INFORMATION Category: OTHER ======================================================================= Here are workarounds for verified problems. The version number listed is the version in which the problem was found. It may also occur in other versions. A Microrim reference number is included at the end of each description. Those marked Fixed have been corrected in a recent release of Upgrade Express which you can purchase by calling 800-628-6990. R:BASE 4.0 ========== Reserved Words as Names ======================= Some of the reserved words in the reserved word list do not return errors when used in RBDEFINE (Info Create/modify) as table or column names. For example, BACKGROUND, FILES and BEGIN are allowed. Using reserved words as names may cause errors depending on the context of where the name is then used. 3673 Workaround: Verify all names against the reserved word listing in the Command Dictionary section of the Reference Manual. Using ARRANGE BY ================ When you misspell the word ARRANGE to ARANGE in the EDIT USING command the command still executes; the optional ARRANGE BY is ignored. An error message should be returned. 3741 Workaround: If it appears that an ARRANGE BY clause is being ignored, double check the spelling of ARRANGE. Lookups in Forms ================ A change between 3.1 and 4.0 in Forms is that 4.0 now uses the regular R:BASE query handler instead of a special forms query handler. The special forms query handler had many special case situations written into it. By switching to the regular R:BASE query handler, some expressions, such as lookups, may operate differently in 4.0 than they did in previous versions. For example, lookups that are comparing NULL values no longer find a match. A common situation is an enter form with a lookup with 2 conditions in the WHERE clause, empid = empid in Employee where empfname=empfname and emplname= emplname. This lookup won't work in 4.0 if a value is entered for only one of the conditions, i.e. only lastname is entered, empfname is NULL. The error message "-ERROR- Syntax is incorrect for the command." is displayed. 3789 Workaround: Always enter values for all the columns specified in lookup WHERE clauses. The lookup works fine if you enter both values. Passing DATE and TIME Parameters ================================ In 4.0, passing parameters using .#DATE or .#TIME as the value will make the %var a datatype of TEXT not DATE or TIME. For example, RUN filename USING .#TIME and then SHOW VAR will show %1 has a datatype of TEXT not TIME. In 3.1C, it was the correct datatype. This can cause problems if, in your program, you then use the %var in an expression, for example, SET VAR vbegtime TIME =(.%1), since the expression processor looks at the datatype of the variable. 3771 Workaround: Remove the parentheses, SET VAR vbegtime TIME=.%1, to set the variable to a TIME datatype variable. Gateway and EXTENDED databases ============================== It is possible to damage your database when importing data into an extended database (> 80 tables or > 800 columns). If you get the message "Unable to connect database -- it is open with EXTENDED set ON.", Gateway will have overwritten your database files. 3820 Workaround: In order to open an extended database with Gateway, you MUST set EXTENDED ON and COMPATIB OFF in the RBASE.CFG file. Gateway will not read the database settings, it will read the .CFG settings only. If Gateway cannot find the RBASE.CFG file on your path it will create one with the default settings (EXTENDED OFF, COMPATIB ON) and will overwrite your database. If importing with Gateway into an extended database, place an RBASE.CFG file containing the correct settings in the directory with the database. Delete Rules and Forms ====================== The message from a delete restriction rule does not display in a form with ERROR MESSAGES OFF when you violate the rule. Other rules do display the rule error message with SET ERROR MESSAGES OFF. 3786 Workaround: When using delete rules, before bringing the form up on the screen SET ERROR MESSAGES ON. Forms on Views with an ORDER BY =============================== On a form with a table as table1 and a view as table2, a region, if the view has an ORDER BY clause saved with it, EDIT USING formname, displays data for both table and the view. But as soon as you do an F8 to move to the next row in table1, data no longer displays for the view (table2). The data for the view only displays for the first row in table1. Remove the ORDER BY from the view definition and the view data displays as expected for every row that matches. 3792 Workaround: Remove the ORDER BY clause from the view and use the ARRANGE BY option to order the rows in the view. Removing Breakpoints in Reports =============================== When editing a report definition, if you have more than one break defined and you delete the lower breakpoint (using Shift-F9 on the Create Breakpoints screen), the locations from the break footer are not deleted, they are moved either to the DETAIL section or to the last BREAK HEADER section. Note that the fields and text have not been deleted before deleting the breakpoint. The text is deleted when you delete the breakpoint, the locations are moved to another section. 3797 Workaround: Delete all the locations first and then delete the sections in edit mode (F9 to delete the lines) and then delete the breakpoints from the Create Breakpoints screen. Copying Tables ============== From Info Create/modify choose to copy a table. If the table has a long name (> 8 characters) and you copy it to a short name (< 8 characters), SYSINFO thinks the new table has a long name and that it is the same long name as the original table. Everything looks okay until you DISCONNECT and then CONNECT the database. At that time you see two tables with the same name They aren't really the same, there is an extra entry in the SYSINFO table. RBCHECK and RSCOPE won't report any errors. 3811 Workaround: Delete the row from the SYSINFO table where SYSSNAME has the new, short table name and SYSLONG has the old, long table name. RBCHECK ======= Invalid Names with RBCHECK ========================== RBCHECK does not always indicate that a table or column name is invalid. For example, names beginning with numbers are not identified as invalid table (RNAME) or column (ANAME) names by RBCHECK. Also, a backslash (\) in a column name is not flagged as invalid. 3668 Workaround: Become familiar with the R:BASE 3.1x and 4.0 rules for names. Don't rely on RBCHECK to check for illegal names. UDF's ===== SOUNDEX UDF and Forms ===================== The SOUNDEX UDF prints extraneous numbers to the screen when it executes and the value it has been passed is a NULL value. In a form it will also scroll the screen when it prints the numbers and rewrite the status line and screen locations but not the text. Thus the form is now out of alignment and two copies of the status line display The SOUNDEX UDF is normally used in a computed column on a column such as lastname. As the form prepares to enter a new row, the computed column (and thus the UDF) is evaluated with a null value causing the screen to scroll. 3808 Workaround: In 4.0, use the undocumented _SOUNDEX function. Passing Values to a UDF ======================= A UDF returns incorrect values from the R> when a literal value is passed. The UDF is written to return a text string of the form "0x0y0z,z" when passed three numbers "x.y.z". For example, SET VAR x TEXT = (UDF('udfname','1.2.3')). The expected result is 010203,3, but the variable x actually contains 01/02/03, a date. The UDF returns an incorrect value on any literal sequence of numbers that can be interpreted as either date or time values. When the expression handler sees the string 1.2.3 it needs to determine if it is a date (literal dates in expressions need quotes so they aren't divided), it decides it is and sends it off to the UDF as a date rather than a text string. 3739 Workaround: Set a TEXT variable to the literal value and pass the value to the UDF using the variables. SET VAR v_value TEXT='1.2.3' ; SET VAR x TEXT = (UDF('udfname',.v_value)) Documentation ============= Format Masks in Forms ===================== Page 6-35 of the 4.0 User's Manual states " Format masks are usually used on text fields but can also be used on DATE, TIME, and INTEGER fields" This is not correct. The Guide to New Features is correct when it says format masks can only be used on TEXT fields. 3788 EXTENDED and Multi-User ======================= On page 5-6 of the Reference Manual, in the last paragraph on the page, the third sentence reads "When EXTENDED is set to NO...." This should read "When EXTENDED is set to OFF....", not NO. 3794 R:SCOPE Contiguity Symbols ========================== The new R:SCOPE manual, on page 40, under contiguity heading, reads "A square(n) indicates a contiguous row, a triangle (t) indicates a noncontiguous row." The (n) should be a char(221), rectangle, and the (t) a char(31), upside down triangle. 3802 UDF String Length ================= The documentation that comes with the UDF packs says "(...to be safe, the maximum length of the string containing the UDF parameters should exceed 90 characters.)". It should read "... NOT exceed 90 characters.". 3740