Visual dBASE 5.5a Maintenance Release Welcome to the Visual dBASE 5.5a Maintenance Release! The Visual dBASE 5.5a Maintenance Release will update your version of Visual dBASE 5.5 and will correct many behaviors of Visual dBASE 5.5. It will also update your dBASEWIN.EXE, DB55RUN.EXE and DBDEPLOY.DLL files. In addition, it will make a .\BACKUP subdirectory in which it will place copies of each file from the last release of Visual dBASE 5.5 in case you wish to revert to the former version of a file. The Visual dBASE 5.5a Maintenance Release works exclusively with the original Visual dBASE 5.5 release (Build .673). THE VISUAL dBASE NEWSLETTER For more updates on the latest exciting news about Visual dBASE, you can now get a dBASE newsletter delivered right to your internet mailbox! You can subscribe either by e-mail or via the Web. To subscribe to the free Visual dBASE News by e-mail, send an Internet e-mail to: listserv@borland.com The body of message should include the text: subscribe visual_dbase YOUR_FIRST_NAME YOUR_LAST_NAME To subscribe via the Web, go to http://www.borland.com/Connect/interact.html for instructions about subscribing to the Visual dBASE Newsletter. You can even view back issues of the newsletter from your web browser! Just go to the TECH SUPPORT PAGE, dBASE, at http://www.borland.com to browse back issues of Visual dBASE Newsletters for technical tips and interesting dBASE news. INSTALLING THE MAINTENANCE RELEASE If you are electronically downloading this release, the file VDB55A.ZIP (~2.5MB) contains all the files you need to install the Maintenance Release to the main product, the Compiler, or the Deployer. Download this file to your system and unzip it. If you only need a specific patch file (see below for information on which patch files are used to patch DBASEWIN.EXE, DB55RUN.EXE and the language-specific versions of DBDEPLOY.DLL) then you can download the appropriate file(s) and PATCH.EXE (60KB). If you received the Maintenance Release on disk, disk one contains the main product patch file, VDB55A.RTP, and this README.TXT; disk two contains the runtime patch file, VDB55A.RTP, the various language versions of the Deployer patch files, and the PATCH.EXE. To install the Maintenance Release: Copy into your \VISUALDB\BIN directory (or other directory that contains your Visual dBASE executable files): VDB55A.RTP in order to patch DBASEWIN.EXE for the main product (1.4MB). VDC55A.RTP in order to patch DB55RUN.EXE for the compiler (1.08MB). For the dBASE Deployer, copy one of the following files to that directory: If you are using the English version of Visual dBASE, copy DPU55A.RTP. If you are using the German version of Visual dBASE, copy DPG55A.RTP If you are using the French version of Visual dBASE, copy DPF55A.RTP If you are using the Italian version of Visual dBASE, copy DPI55A.RTP If you are using the Spanish version of Visual dBASE, copy DPS55A.RTP Then copy the file, PATCH.EXE into the same directory. INITIATING THE MAINTENANCE RELEASE To initiate the patch, run the following commands from \VISUALDB\BIN at the DOS prompt: >PATCH VDB55A.RTP >PATCH DP?55A.RTP >PATCH VDC55A.RTP (Replace the ? with either U, G, F, I, or S, depending on which language version you are deploying.) This Maintenance Release addresses the following areas: -The Symbol Table -The Compiler -Language Additions -Data Handling -Forms -The Application Deployer -Tables -The UI -The Query Designer THE SYMBOL TABLE The size of the Visual dBASE symbol table has been dramatically increased. This increase allows more names of fields, memory variables and objects to exist in memory at the same time. THE COMPILER You can now add an object file to an existing RSP in the Build dialog without losing the Icon, Splash and To settings from the RSP. LANGUAGE ADDITION The OnChange and OnAppend events of Form and Browse now pass a numeric parameter that indicates the work area in which the Append or Change was made, similar to the parameter that is passed to OnNavigate. DATA HANDLING 1. Record deletions started during a transaction against SQL and Paradox tables can now ROLLBACK() successfully. 2. The KEYMATCH() function will correctly search index tags of deleted records. 3. The Referential Integrity dialog now works for Paradox tables with no foreign keys by automatically generating the appropriate secondary index. FORMS 1. The IsRecordChanged() method returns the correct value when: - A memo field of a record has been opened/closed with the F9 key. - Focus is on a control without a DataLink and a table is open. - You highlight and attempt to edit text in an EntryField or SpinBox that's DataLinked to a read-only field. - When you click on a record in a Browse control. 2. When a ListBox has a table as its DataSource, the focus can be on the ListBox when no records in the table meet a SET FILTER condition. 3. You can inspect multiple controls on a Form, then open and close the Property Builder without problems. 4. The Form Designer generates the correct code when characters from the extended character set are used in the name of the Form. 5. Blank dates can be saved from a SpinBox with a DataLink to a date field. 6. You can select multiple controls and then select a new color from the Color Picker. 7. You can set the View Property to a nonexistent table or view without problems. 8. When working with a form that has a Browse control on it, the parent form will not become "read only" if you break a relation. 9. The onNavigate method's parameter returns the correct workarea value with multiple sessions. 10. If a Browse control exists on your form and, while a record is being appended, you issue SaveRecord() followed immediately by BeginAppend(), the record pointer now remains in the correct position. Previously, the pointer moved to the last physical record. Also, a pair of duplicate records are no longer added when you issue SaveRecord() followed by BeginAppend() after editing the pending record through the Browse control. 11. A GPF no longer occurs when you click a field in the field palette after issuing Clear All in the Command Window. 12. RangeMax and RangeMin are now enforced when DataLink is set to a field. 13. When an item in a Combo Listbox has the same shortcut key as a pushbutton on the same form, and the Listbox has focus, the Listbox item is selected when the shortcut key is pressed. Previously, the Pushbutton was fired, even when the Listbox had focus. 14. The correct button is now selected when a form opens with focus on a datalinked group of radio buttons. Previously, the first button in the Z-order was always selected, regardless of the content of the datalink. TABLES 1. The record pointer in a child work area no longer moves when you modify the key field in the parent table a second time in a CONSTRAIN INTEGRITY RESTRICTED relation. 2. After editing data in a child table and then changing a key field in the parent table of a CONSTRAIN INTEGRITY relation, and choosing to "Cascade Delete?", moving the record pointer in either table will not generate an error. 3. Adding three records to the parent table in a CONSTRAIN INTEGRITY relation when there is an Editor control on the form that is DataLinked to a memo field in the child table will not generate an error. 4. When BeginAppend() in the child work area is followed by BeginAppend(), SaveRecord(), or AbandonRecord() in the parent work area, the pending child record is now appropriately saved or abandoned if a Browse control exists on the form for each table. 5. The Value of a Style - 0 or Style - 1 ComboBox that's DataLinked to a read-only field in an encrypted table can not be edited. 6. The data in the key field of a child table in a CONSTRAIN INTEGRITY relation now correctly can not be edited through a Style - 0 or a Style - 1 ComboBox. 7. After changing the value of the key field in the parent table of a CONSTRAIN INTEGRITY relation, you can now change it back to its original value before moving the record pointer without generating an error. 8. You can now add records to the parent table in a CONSTRAIN INTEGRITY RESTRICTED relation. Previously, this was not possible if the table contained a record with a blank key value and that key value had children. 9. Data from a table which is at EOF() can now safely be used in a REPLACE operation. Previously, REPLACE failed and corrupted current data. 10. You can no longer open a Memo, OLE or Binary field editor from a datalinked control when you are at EOF(). Previously, performing this action erroneously would report that IsRecordChanged() was true. 11. INTEGRITY is now fully enforced when adding records with duplicate key values to a parent table. Previously, if the parent table was also the child table in a CONSTRAIN relation and the record pointer in the parent was not positioned on a record with a matching key value, INTEGRITY was not enforced. 12. You can now safely use BeginAppend() and AbandonRecord() to add and abandon four records in the parent table in a CONSTRAIN INTEGRITY relation. Previously, this action generated an "Database Engine Error: Too many open BLOB" message if an Editor control existed on the form that was datalinked to a memo field in the parent table. 13. A ListBox which has an empty table as its DataSource will now update correctly when records are added. 14. When you call AbandonRecord() from a PushButton that has its SpeedBar property set to .T., and then move the record pointer, the record is now abandoned correctly. 15. You can now add a record to the parent table of a CONSTRAIN INTEGRITY relation when the key field isn't the first field modified and a record already exists with a blank key value. 16. If you attempt to create an index via the Manage Indexes dialog when the table is encrypted and is not already open exclusively, pressing the "New" button will cause an "Exclusive access required" dialog to appear, and you will not be able to create the index. This prevents the table from being corrupted. 17. dBASE properly regains focus when SaveRecord() is issued after BeginAppend() while the key field is blank in the parent table of a CONSTRAIN INTEGRITY relation and the form has a Browse control for the parent table. Previously, dBASE could not regain focus for the rest of the Windows session when these conditions existed. 18. When a ComBobox has a DataSource of one table and a datalink to another, it now automatically displays the correct initial datalink value. Previously, it displayed the first value in the DataSource. 19. Encrypted tables that use existing indexes no longer generate an error when you try to reuse them after modifying their indexes. Previously, if you encrypted a table and then made modifications such as tag name changes, sort order changes or duplicate allowance changes, a "Not a valid dBASE table" error was generated when the table was reused. APPLICATION DEPLOYER 1. The Application Deployer correctly finds the Windows System Directory on NT systems. 2. You can deploy an application when the destination directory is set to C:\. 3. You will now get an error message if you attempt to build a disk cut when the destination directory is "read only." USER INTERFACE 1. In a Catalog Window with Associations switched on, you can select file types and move from one part of a catalog to another without problems. 2. Adding a Window menu to a MenuBar that is attached to _app.FrameWin no longer generates a GPF. 3. Browse controls are now refreshed immediately after clicking Yes in a Cascade Delete dialog box. Previously, deleted child records remained visible until the record pointer was moved. QUERY DESIGNER You can now open the Query Designer with a numeric field filter set to a negative number.