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


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


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

#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


Code streaming / Designer / IDE issues ...

#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'

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

#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


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



#860  - dBASE generated app can now use Themes


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



#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.