dBlocks - Abbrevation Expansion

dComplete - Code Completion

dPreview - Print Preview

dLocator - Find in Files - Using the Source editor

dBable - Source Editor Properties File

dExtract - Copy to File

Using the Source editor


Whats New in dBASE PLUS 9

Starting with - French language support


FIXES (Since dBASE Plus 8)


Changes not related to bugs...

 - Updated Graphics for file type icons, (Forms, Datamodules etc...)

 - Line numbers in margins are set to a smaller font


BDE/Database related issues...

#311  - Fixed - Default for Encrypted table file changed to User's directory - otherwise, get encryption not support errors

#575  - Fixed - numbers in a table with 19 or 20 digits using all digits available show as asterisks

#1269 - Fixed - try running app (using SQL through ADO only - no BDE) in runtime with DefaultEngine=None .. causes crash if BDE is not installed

#1346 - Fixed - get 'unknown database' error trying to create a .sql using a User BDE Alias

#1355 - Fixed - setting database and query properties manually then turning them on does not populate the Field Palette


ADO related isues...

#391  - Found Fix - ADO with date field in MySQL Causing rowcount of -1

#789  - Fixed - When assigning a value to a ADO character field .. if the number of characters is > the size of the field .. nothing gets entered

#892  - Fixed - Multiple params does not work for updates to tables

#893  - Fixed - adoParameter does not understand timestamp



#1070 - Fixed where Gifs were not drawing in image objects on a form.

Source Editor

#1067 - Added Forground and Background indicators in Source Editor Properties Color tab

#1266 - Fixed - regression on toolbar image background transparency

#1329 - Fixed - Resource images showing black background.


Data Objects

#1029 - Corrected streaming order of requestLive and Active in ADOQuery class

#1013 - Fixed dbase table's field readonly property which was not streamed out to source code after setting it in the inspector

#1002 - Fixed problems with null logical fields comparisons in a table (=Null is now returning true when it should)

#948  - Fixed having to force calculation of variable before calculation can be done on ado database

#1169 - Fixed - Get 'end of table' error modifying table with deleted records.

#1186 - Fixed - dBASE crashes with Enable BCD set to true for dBASE Alias

#1194 - Fixed - Strange behavior with Seek()

#1215 - Fixed - Bugs with numeric fields over 10 digits - Get Syntax error or Data Type Mismatch error with Seek()


MENU related issues...

#212  - Fixed - Custom .bmp (no graphic) not Displaying in Menu

#818  - Fixed - images disappear from menu items after closing standard toolbar

#1027 - Fixed - Menu item not greyed out when it should be. In 2.80 when a program changed a menu from enabled to disabled it grayed out

there and then. In Plus8 it does not grey out until you wave the mouse over it.

#1115 - Fixed - reference to a form from a menu opening forms based on custom forms is referencing the wrong form

#1170 - Fixed - Plus executable is not responding when closing form with menu item and popup menu.

#1178 - Fixed - Crash in app with menu and onOpen form event


Form objects

#445  - Fixed - issue with combobox display

#1018 - Fixed wrong ascii code for Delete key in an editor

#961  - Fixed Text Items in ListBox print with bottom of each row cutoff

#855  - Fixed ListBox Transparent so it works when ListBox is within a Container

#841  - Fixed - ListBox linked to dBASE fields - all but character and Autoinc. shows blackout on selected row.

#1204 - Fixed - get Value out of Range trying to set TabBox CurSel

#1211 - Fixed - PaintBox Transparency issue

#1230 - Fixed - rectangle border is not being removed when set correctly in a report

#1266 - Fixed - regression on toolbar image background transparency

#1275 - Fixed - Moving transparent component in transparent container in Form Designer also moves background with component

#1281 - Fixed - TextLabel with transparent = true ... changing text shows bleed through of old test

#1283 - Fixed - container transparency issues

#1285 - Fixed - Strange behavior with spinbox assuming a value

#1332 - Fixed - Z function (replacing zero with space) does not work in db8 or 9 but, does in 2.8

#1349 - Fixed - report image does not display correctly in 9.3 when alignment is set to 3


Code streaming / Designer / IDE issues ...

#359  - Fixed - Relax the Save Changes dialog in the form designer. Form designer no longer requires save changes dialog. Even if no changes were preformed.

#997  - Fixed reference to dBASE INc. found in an error dialog

#985  - Added Shortcut Key Ctrl+Q to Table Menu for the Abandon option

#984  - Fixed - No Tab is created for non-visual custom objects in Component Palette

#857  - Fixed form and component's helpFile property so dBASE does not automatically modify the path. Instead, it leaves it as entered

#1159 - Fixed - Failed login credentials when using SQL builder with ODBC/BDE connection to SQL Server

#1188 - Fixed - custom components not showing up in component palette using SET PROCEDURE TO ...

#851  - Component Palette: implement named custom tabs when adding custom objects to component palette

#1131 - Fixed - cursor is getting misplaced after adding new method to a datamodule or a form or report

#1155 - Fixed - In source editor, colorizing of function names within commands is wrong

#1157 - Fixed - in dBASE Plus 9 - added calculated field is producing invalid subscript error when putting form in design mode

#1158 - Fixed - newly added functions need to have a space above during streaming

#1160 - Fixed - modi comm <some new file> produces File does not exist error. It should instead start a new file in SE

#1162 - Fixed - Close tree view from context menu.In Form use right-click context menu item to close the treeview is back in and works.

#1164 - Fixed - custom form class definition is different in dBASE Plus 9. Class declaration with custom form now uses the custom form as the super class form name instead of a generic 'FORM'

#1265 - Fixed - SET FUNCTION does not work in command window.

#1166 - Fixed - datamodule object represented twice in the editor's tree view.

#1168 - Fixed - Some report events are not saving in the linker code

#1068 - Fixed - Dragging or moving a form over the Command Window Input Pane prevents part of the form from painting

#1172 - Fixed - Multiple user BDE Aliases

#1173 - Fixed - Code streamer is adding multiple code blocks - WITH ... ENDIWITH is duplicated after the form's rowset declaration

#1182 - Fixed - get Improper argument adding a menu item to an existing menu

#1185 - Fixed - some functions missing in treeview in source editor

#1189 - Fixed - Print Preview for the table viewer (containing grid) is overwriting columns when there are more columns than will fit on page

#1191 - Fixed - source alias parser is confused by a period in a path

#1197 - Fixed - Shift-Tab doesn't decrease indent. It changes the selected object in the Inspector instead.

#1199 - Fixed - Old version of code hints displaying for: IF, ELSE, ENDIF, CASE, etc...The single line version of the code hints for: IF, ELSE, ENDIF, CASE, WITH, etc being displayed

#1205 - Fixed - Cursor shows up on wrong line number in the Source Editor during a 'Fix' operation

#1206 - Fixed - Loss of Print Preview data and paging

#1209 - Fixed - Autocomplete listing of functions and Procedures should have parenthesis - ()

#1210 - Fixed - Treeview graphics

#1213 - Fixed - cannot 'insert from file'.

#1214 - Fixed - Cannot print from source editor

#1220 - Fixed - Re-executing previous command line in Command Window is not copying executed line to current line in Command Window

#1233 - Fixed - Recent Files list is not being saved to plus.ini when exiting dBASE IDE

#1235 - Fixed - cursor movements do not adhere to endOfLine behavior

#1236 - Fixed - On Report, rectangle with borderstyle = 5 (Double) causes border to overlap text

#1237 - Fixed - resource dialog is not painting correctly

#1270 - Fixed - when clicking on item in the treeview pane in source editor ... make code in right pane show more

#1271 - Fixed - Ctrl+F4 and File Close is bringing up the print dialog rather than closing the Source Editor

#1272 - Fixed - Resource images issues

#1276 - Fixed - Record and Playback keystrokes is broken

#1294 - Fixed - Adding image file to pushbutton does not stream filename

#1298 - Fixed - toolbar button image cannot use source alias in dBASE PLUS 8 or 9 . But, was able to in dBASE Plus 2.8

#1300 - Fixed - 'Escape' AKA - 'Cancel' does not work

#1315 - Fixed - .prg and .cc is not automatically re-compiled after making a change

#1324 - Fixed - get blank Source Editor after clicking 'fix' when running a form, report. .prg or datamodule with error 'unrecognized command verb'

#1325 - Fixed - get MAV issuing crea repo new.rep

#1327 - Fixed - Project Explorer's toolbar is opening to the right of where the system toolbar was before it was turned off

#1328 - Fixed - When in the SQL Builder click the F12 - the Save icon on the toolbar gets disabled.

#1337 - Fixed - Quit in Command window not writing to .ini files

#1340 - Fixed - Report Designer losing changes after opening Source Editor and making additional change then closing Source Editor

#1350 - Fixed - after making a change in the source editor the treeview reverts to the top instead of staying in the current method

#1353 - Fixed - set epoch doesn't work for for dates when no setting is available in the .ini file

#1355 - Fixed - setting database and query properties manually then turning them on does not populate the Field Palette

#1356 - Fixed - Print Table Structure not working

#1357 - Fixed - Database Engine not Initialized error this time

#1359 - Fixed - color dialog does not show the current color in use using BDE Alias with DATABASE NOT already open

#1360 - Fixed - Form Wizard Graphics not showing correctly

#1361 - Fixed - Both Print and Print Preview do not work for ADO Table Designer



MAV or Crash

#1021 - Fixed 'dBASE Plus has encountered an internal operating system error' - when closing app that is using a datamodule

#969  - Fixed more instances of pure virtual function call error or Memory Access violations

#963  - Fixed 'Invalid Key' error with ActiveX ListView object

#720  - Fixed MAV using form.close() method in menu

#1161 - Fixed - MAV after trying to open a form with ReadModal - app uses custom forms and more

#1163 - Fixed - 'Field name error' Try to either create a new table or edit a table. Add a new field ... get error.

#1194 - Fixed - Get Crash with Seek()

#1225 - Fixed - MAV on SQL Builder

#1228 - Fixed - SQL Builder Connection fails using OLEDB provider for ms-sql without password

#1231 - Fixed - menu option to 'close' print preview form ... produces crash

#1312 - Fixed - Get MAV adding data objects to a blank report (without any streamsource or pagetemplate)



#860  - dBASE generated app can now use Themes

#1296 - Fixed - exe built with 9.2 throws Error reading file: error when .ico is not in same dir as the form.


ActiveX / OLEAutoClient

#751  - Fixed 'bad command' using tiled option in oleAutoClient excel command

#1176 - Fixed - get OLE Bad Variable Type when trying to do a setting in Excel

#1077 - Fixed - get OLE Bad Variable Type when trying to do a document.write in a Microsoft Web Browser

#1274 - Fixed - slow forms issue (Forms without oleAutoClient should be opening faster)



#1153 - Fixed - this. inside event handler for an object defined in another file brings up entire form's members

#1207 - Implement previously defined variables for autocompletion.

#1208 - Implement list of user defined properties for objects defined in outside class (in the same file)

#1201 - Implement listing of User Defined Functions, Procedures and custom class names in autocomplete list in Source Editor (for items in the current file only - does not include items in an external file added with SET PROCEDURE or #INCLUDE).


Math/Money objects

#726  - Fixed ability to round() values that do not have sufficiently accurate binary representations by adding a SET HIGHPRECISION setting.

#834  - Fixed - bitXor with double MOD function with a variable returns incorrect value


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ADO - Not a dBASE Plus but, an with ADO database using Apache...

#1017 - get MAV instantiating an ado object in a web app

This will occur on any 64 bit version of windows beginning with Vista.

The problem is due to the fact that Windows uses the environment variable 'CommonProgramFiles(x86)' to find the ADO DLL's at runtime but Apache does not allow parenthesis in the names of any environment variables that it passes or creates for web apps that it executes.

It converts the parenthesis into underscores, for example: CommonProgramFiles_x86_.

The simplest solution for this is to have each web app that requires ADO access to create its own environment variable before it attempts to create any ADO objects.

Adding the following code near the beginning of these web apps will create the needed environment variable.

(be sure to adjust the specified path to the one matching the machine on which Apache is executing):

extern CLOGICAL SetEnvironmentVariable(CSTRING, CSTRING) kernel32 from "SetEnvironmentVariableA"

bResult = SetEnvironmentVariable("CommonProgramFiles(x86)", "C:/Program Files (x86)/Common Files")

- - - - - - -

Here is a function: initEnv(), that will only call SetEnvironmentVariable() when necessary - from within a web app.  This can be added to the web class (as a method) if desired and called before any ADO objects are created:

function initEnv()

local cEnvStr, cEnvVar, cEnvVarNoParens

if OSVersion() >= 6  // Windows Vista is version 6.0

   if IsWow64()   // test if running on 64 bit version of Windows

                if type("SetEnvironmentVariable") # "FP"

                      extern CLOGICAL SetEnvironmentVariable(CSTRING, CSTRING) kernel32 from "SetEnvironmentVariableA"


      cEnvVar = "CommonProgramFiles(x86)"

      cEnvVarNoParens = "CommonProgramFiles_x86_"

      // check if correct env.var already exists and has a value

                                cEnvStr = getenv(cEnvVar)

                                if empty(cEnvStr)

                                   // EnvVar with parens not found - so must create it

                                                // check if modified env.var (without parens) already exists and has a value

                                   cEnvStr = getenv(cEnvVarNoParens)

                                                if empty(cEnvStr)                            

                                                   // cEnvVarNoParens not found - use default value for it

                                                                cEnvStr = "C:/Program Files (x86)/Common Files"            


                                                // otherwise cEnvVarNoParens exists and has a value                   


                                   // Create and set value of env.var (with parens)                           

         bResult = SetEnvironmentVariable(cEnvVar, cEnvStr)







function OSVersion

local cVersion

cVersion = OS()

return val(ltrim(substr(cversion,rat(" ",cVersion))))


function IsWow64

local lIsWow64

lIsWow64 = false

if type("GetCurrentProcess") # "FP"

   extern CHANDLE GetCurrentProcess( CVOID ) kernel32


if type("IsWow64Process") # "FP"

   extern CLOGICAL IsWow64Process(CHANDLE, CPTR CLOGICAL) kernel32


if type("IsWow64Process") = "FP"

   // Make sure extern worked for retrieving this function pointer

                // Because older versions of windows do not contain this function

   // From MSDN, minimum supported operating systems are:

   //  Client OS's:  Win XP SP2, Vista

   //  Server OS's:  Windows Server 2003 with SP1, Windows Server 2008

   IsWow64Process(GetCurrentProcess(), lIsWow64)


return lIsWow64

- - - - - - - -

In order for the above initEnv() to function correctly the following setting should be in the httpd.conf file (in any place - I put mine in the beginning) for Apache:

PassEnv CommonProgramFiles(x86)

This instructs Apache to pass the existing environment variable (CommonProgramFiles(x86) to any web apps as part of their default environment.

Apache will pass this env.variable, but renamed to: CommonProgramfiles_x86_ but it will have the needed path assigned to it which initEnv() will use.

Also when connecting to an ADO database it is best to use the .connectionString property when connecting to an external database in a web app.

for example ...

  this.adoQuery1 = new ADOQUERY(this)

   with (this.adoQuery1)

                connectionString = "<connectionString>"

      sql = "SELECT * FROM <tablename>"

      active = true

      requestLive = false



- - - - - - - - - - - - - - - - - - - -

MySQL Non-Null Dates with Zeros

#391  - Found Fix - ADO with date field in MySQL Causing rowcount of -1

There is a setting in the MySQL ODBC 5.2a driver to return a SQL_NULL_DATA for a date that is all zeros...

This will allow the count() to process correctly as well as view data programmatically.