vxBase 2.04 October 30, 1992 ----------------------------- IMPORTANT NOTE TO EXISTING VXBASE USERS: ---------------------------------------- See the VXLOAD.EXE discussion below. Prerequisites ------------- vxBase is a dynamic link library of xBase functions that has been customized for use with Microsoft Visual Basic. You must have Visual Basic in order to run the VB sample application. If you are intending to use vxBase with another language (such as C), create the directory \VB before beginning installation of vxBase. The default installation directory is \VB, which is where Visual Basic is normally set up. The directory that vxBase is installed into MUST exist. If \VB does not exist, or if you wish to install vxBase into another directory, ensure that it exists prior to installation. vxBase Installation ------------------- If INSTALL.EXE is resident on this diskette, use the program manager RUN command A:INSTALL to install vxBase. If changing the default directory from \VB, the directory being changed to MUST exist. ZIP version ----------- vxBase is distributed on a single diskette or on bulletin boards as two compressed .ZIP files. The first ZIP file is vxbdoc.zip, which contains the documentation in a Windows Write file. This file is essential to understanding and using vxBase. If it is missing, contact the author at the address below. The documentation is separated from the rest of vxBase to allow potential users to preview it before installing and actually using vxBase. This is especially helpful to potential users who extract vxBase from a bulletin board. They can evaluate the system from a documentation standpoint before committing to downloading the larger system. Unzip vxbdoc.zip and view or print it. The manual is more than 250 pages long. It was formatted for an Epson 24-pin printer using standard Courier fonts. Printed manuals may be obtained for $20.00. See the end of the documentation for ordering information. The second ZIP file (vxbase.zip) contains the sample source code and Visual Basic project files, vxbase.txt which includes all of the Visual Basic declarations for the routines in the vxBase DLL, the vxBase DLL itself, and VXLOAD.EXE - a Visual Basic Design Mode Utility. If you are going to upload vxBase to a bulletin board, it must be sent as it was received - in two ZIP files. When the system ZIP file is decompressed, it contains this readme.doc file and 2 more ZIP files. These ZIP files are: vxbdll.zip the vxBase DLL and vxload.exe vxbtest.zip sample source code and vxbase.txt To install vxBase, first make a subdirectory under your \vb directory named \vb\vxbtest and copy the vxbtest.zip file there. Unzip it and delete the vxbtest.zip file from your hard disk. To run the sample application it is essential that these files be in directory \vb\vxbtest because this path is hard-coded into the sample code. If you MUST put it somewhere else, you'll have to modify the file names in the source code to reflect your location. Unzip vxbdll.zip and place the resulting files (VXBASE.DLL and VXLOAD.EXE) in your \windows directory. To run the sample program, see the Sample Application section in the manual. Remember to run vxload.exe before starting Visual Basic. Better Memory Management in Design Mode with VXLOAD.EXE ------------------------------------------------------- NOTE: vxload.exe included with vxbase is a utility that simply loads vxbase.dll and runs in an iconized state. It is highly recommended that you run this program immediately PRIOR to calling up Visual Basic in Design Mode. vxload controls the vxbase memory. Any crashes when testing a vxbase program in design mode will not affect the vxbase memory pool at all if vxload is running. Copy vxload.exe to your \windows directory and set it up as a group item next to your VB icon. It is also suggested that you add the following two lines of code to your initialization procedure (somewhere after the call to vxInit()): Call vxSetLocks(FALSE) j% = vxCloseAll() vxSetLocks is described in the namual. Adding these two lines to the init procedure will close any files that were left open as a result of a Design Mode VB error. vxSetLocks will ensure that any open files left over from a crashed VB run will not have any leftover locks on your second and subsequent runs of the program while in Design Mode - and vxCloseAll will close any leftover files so you can start off with a clean slate. If you wish to use the default locking scheme in your finished .EXE, remove the vxSetLocks(FALSE) that you set up for design mode testing before compiling (and the vxCloseAll as well although that is not critical). If your vxBase program terminates abnormally (or you use the VB End menu item to terminate), and then you exit Visual Basic, an attempt to close VXLOAD.EXE from the system menu that appears when you click on its icon will result in a "Task Sequence Closure Error". This is because your vxBase Visual Basic program never called vxDeallocate, which removes Visual Basic from the vxBase task list being maintained by VXLOAD. If this happens to you, simply double click the VXLOAD icon to bring the VXLOAD window into view and select the EXIT menu item. Closing VXLOAD in this fashion ignores the task list. vxBase 2.04 October 30, 1992 ----------------------------- (1) formatted vxMemoRead with memo ending in 2 spaces caused GPF. Problem corrected. (2) Multitask index select error corrected. (3) Obscure "DataBase not selected" and "Internal index root seek errors" corrected. (4) Win API OpenFile function substituted for MSC _sopen to stop error when opening more than 15 files (5) vxLocked/vxIsRecLocked now reports correct lock status on network files. Previously, only the status as imposed by the current workstation was reported. (6) vxUseDbf, vxUseDbfRO, and vxUseNtx now position the record pointer to the top of the file and fill the record buffer a la Clipper. Filters are respected. (7) On multiuser Retry? message boxes, caption now set to vxSetErrorCaption string instead of "vxbase" if present. (8) Search algorithm in vxBrowse changed. If a table has been defined with the vxTablexxx functions, the search is limited to browse displayable data only. The search also will not cross field boundaries as it does in the raw data display (where the entire record is searched - unchanged from previous releases). (9) VX_FLAT style added to vxCtlStyle. Define Global Const VXFLAT = 3 in global module before using as an attribute with vxCtlStyle. VX_FLAT flattens VX_RECESS and VX_RAISE control styles. This attribute may be used effectively to indicate the readiness of a text box to accept data. If the text box is drawn on the form with no borders and colored light gray, it is invisible on the form. You can use vxCtlStyle with VX_RECESS, VX_RAISE, and VX_FLAT to dynamically change the control's appearance. (10) Italian support added to vxSetLanguage (VX_ITALIAN). (11) The type of an index expression is now tested when the index is opened with vxUseNtx. If the expression evaluates as numeric or as a date, the open is denied. YOU MUST USE CHARACTER INDEX EXPRESSIONS IN VXBASE. Use The STR() function to convert numbers to strings and the DTOS() function to convert dates to strings within your index expressions. (12) date insertion in memo editor via F5 key now conforms to international standards set with vxSetDate. (13) potential sharing violation when opening a read only file with vxUseDbfRO (or subsequent vxUseNtx calls) corrected. (14) made vxErrorMsg and vxChrToInt functions exportable for C users. (15) Field functions changed to speed up alias testing. (16) Error 912 incorrectly defined in manual as "Index key does not exist" when it should have been "Index key already exists". Occurs when attempting to add a key whose key expression and record number already exist in the index. (17) vxAreaDbf now reports system wide area as reported in the documentation. (18) potential close error with vxCloseAll() corrected. (19) sporadic no index key addition with big files corrected. (20) vxZap now clears associated dbt file as well. (21) VGA determination algorithm changed to allow 3d support on ps/2 monitors. (22) alias names defined with vxSetAlias now allowed in xBase expressions with the classic alias delimiter "->" (e.g., "master->namefld"). The delimiter for alias name use in vxBase function calls remains the same (i.e., "master.namefld"). (23) vxCopy now respects filters. It may be used to create file subsets. (24) vxCtlFormat passes Enter and Escape keys to VB default procedure. (25) Logical vxNtxRecNo is now synchronized with a physical vxGo. Changes to Release 2.00 ----------------------- File open error when using vxSetupPrinter corrected. vxFilterReset memory deallocation corrected to stop memory leak. vxBrowse creeping window corrected when using default positioning and a parent window with no menu. Incorrect open area reported if vxUseNtx is called on an already open index. Corrected. Locked index after vxTop corrected. Functions Added to Release 1.07 ------------------------------- (1) vxBrowseSetup allows the user to fine tune the appearance of a Browse table (both the old window browse and the new vxCtlBrowse). (2) vxCtlBrowse allows the placement of a browse table in a form multiline text box. Communication with the browse table is enabled with the new vxCtlBrowseMsg function. The Browse table no longer has to be terminated when a selection is made, etc. It also allows dynamic memo linking. All standard events and procedures attached to the text box may be used in normal fashion while the browse is running. (3) vxCtlBrowseMsg communicates with a vxCtlBrowse. Messages the programmer can pass are both interrogatory and procedural (e.g., VXB_GETCURRENTREC extracts the record number of the currently highlighted record and VXB_REFRESH redraws the browse starting at a different record number). (4) vxCtlFormat adds TEXT FORMATTING to vxBase. Add declaration and global constants as defined below. (5) vxCtlHwnd gets the window handle associated with a Visual Basic control. (6) vxCtlPenWidth added to control the depth of Recessing and Raising a control when using vxCtlStyle. Add declaration as defined below. (7) vxDbfCurrent reports the current database select area. Add declaration as defined below. (8) vxErrorTest added to test the result of a vxBase function that uses the alternate error method set by vxSetErrorMethod. Add VxErrorStruc type and vxErrorTest function declaration as defined below. (9) vxGetVersion returns a string containing the current vxBase version number. Add declaration as defined below. (10) vxFieldTrim returns a string representing the defined field with trailing spaces removed. Add declaration as defined below. (11) vxLocate searches for a record from and including the current record position that satisfies a logical xBase expression. The search direction may be specified. Add declaration and constants as defined below. (12) vxLocateAgain searches for a record from and NOT including the current record position that satisfies a logical xBase expression as defined by the last vxLocate for the selected database. The search direction may be specified. Add declaration and constants as defined below. (13) vxNtxCurrent reports the current index select area. Add declaration as defined below. (14) vxNtxRecNo returns the ordinal position of the key in the current index. Add declaration as defined below. (15) vxPrinterDefault returns a string describing the Windows default printer in a format suitable for use by vxPrinterSelect (16) vxPrinterEnum enumerates all printers on the system and returns a string suitable for setting the default printer with vxPrinterSelect. Add declaration as defined below. (17) vxPrinterSelect changes the default Windows printer. The printer setup string must be in the same format as that returned by vxPrinterEnum. Add declaration as defined below. (18) vxReplDateString replaces a field with a date string formatted as per vxSetDate (default "mm/dd/yy"). This goes hand in glove with dates input into text boxes via vxCtlFormat or displayed with vxDateString. Add declaration as defined below. (19) vxReplRecord replaces the entire record buffer with the data pointed to by a record typedef or string (see vxRecord). BE CAREFUL with this function. No data checks are implemented! Add declaration as defined below. (20) vxSeekFast speeds up seek times on Read Only files by 35%. Add declaration as defined below. (21) vxSetAlias allows field qualification in all vxBase field functions. Add declaration as defined below. (22) vxSetErrorMethod allows an alternate method of trapping errors found by vxBase. The normal method is to report the error through a message box at run time. If you use the alternate method, nothing is reported (for most functions); instead, an error structure is filled with information about the error which may be extracted with the vxErrorTest function. Add declaration as defined below. (23) vxSetMeters allows you to turn the analog meter bars displayed by vxPack, vxReindex, and vxTestNtx on or off (default is ON). Add declaration as defined below. (24) vxSetRelation adds true relational capability to vxBase. Add declaration as defined below. (25) vxTableFieldExt added to provide column definitions to vxBrowse when using vxSetRelation to add multi-file fields on the same browse row. Add declaration as defined below. International Functions Added ----------------------------- The following functions all deal with the problem of a database that contains characters from the high end of the ANSI or OEM character sets, which is commonplace if the database stores data in a language other than English. (1) vxSetAnsi(FALSE) properly handles databases that were created with a DOS based application (such as Clipper). These databases are OEM databases. Characters with diacritical marks in the high end of the OEM character collating sequence are NOT the same as the ANSI characters. It is necessary for vxBase to translate the characters to ANSI (both Windows and vxBase native mode) before they can be used in a vxBase application. They also must be translated back again when they are written. The default value of vxSetAnsi is TRUE (no translation takes place). If the database was created and is maintained by vxBase (or DataWorks), and the database is going to be used exclusively by Windows applications, vxSetAnsi should be TRUE. (2) vxCollate allows the programmer to create his own collating sequence table (for EITHER an ANSI database or an OEM database). The OEM character set in particular does not use any kind of logical collating sequence for characters with diacritical marks. The ANSI table handles these characters more intelligently - but its sequence is also incorrect for some languages. It is necessary to define a collating sequence table to properly build an index that uses these characters. (3) vxSetCollate can toggle a defined collating table on or off. If you have received an upgrade to an existing vxBase system, you may only wish to print only those pages of the manual that contain the documentation for the new functions listed above. Terry Orletsky vxBase (512523 Alberta Ltd) #200, 10310 - 176 Street Edmonton, Alberta, Canada T5S 1L3 Phone (403) 489-5994 Fax (403) 486-4335 BBS (403) 483-5687 2400 BAUD 8N1 Compuserve I.D. 70524,3723