dBASE™ PLUS 11.1 is NOW AVAILABLE

dBASE™ PLUS 11 - Read Me First FAQ

Version Updates:

dBASE™ PLUS 11 - Version 11.1 FIXES
IDE

Issue #2157
dmAssist - Datamodule designer - Additional fixes to ensure images loaded for treeitems, load correctly

Issue #2021
Fixed - temp error while creating event handlers in a report while designing

DEBUGGER

Issue #2360
Fixed - watch dialog no longer working in dBASE 11

FORMS/REPORTS

Issue #2238
Fixed - Non-mdi form with custom menu does not show assigned bitmaps for menu options

Issue #2350
Fixed - Menu image/icon is not showing for regular mdi form

Issue #2351
Fixed - Using the tab key does not return to the pushbutton as you tab through the Z order

Issue #2362
Fixed - bitmap issues on pushbuttons - if systemTheme is false - dbase crashes

Issue #2294
Fixed - Title bar in form not updating when it's changed while running

Issue #2349
Fixed - with SET CUAENTER OFF and form.MDI = false, ENTER key does not move from field to field in a form

dBASE™ PLUS 11 - Version 11 FIXES
NEW PROPERTIES, EVENTS or METHODS

IDE...

Issue #2095
Enable Redo in the Source Editor

FORMS, REPORTS and COMPONENTS...

Issue #58
Added OnDisplayChange() event to class FrameWindow, Form, and SubForm.
        OnDisplayChange() will fire when a change is made to Windows Display Settings - such as changing resolution or color depth or when the screen is rotated

Issue #2032
Added new property, themeBackground to PushButton class.
          When True (the default) pushButton's background uses the current theme's background.
        When themeBackground is False, the background color from the colorNormal property is used.

Issue #None
new session property .. _app.session.isAlias(). A test to see if an alias exists.

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

FIXES

IDE...

Issue #1986
Added: .sql, .txt, ,prj, and All (.) to list for save file dialog.

Issue #2007
Fixed ability to display and hide Inspector for class Designer so it works with the current version of the Inspector

Issue #1933
Fixed ability for dBASE to detect a tap gesture as well as other default gestures on Windows 10

Issue #773
Surfaced the following gesture events in class Form, Subform, and all form components that have their own hWnd:
           OnGestureZoom()
           OnGesturePan()
           OnGestureRotate()
           OnGestureTwoFingerTap()
           OnGesturePressAndTap()

Issue #2040
Fixed popping up inappropriate autocomplete options after typing a close parenthesis at end of line of code that started with a ?
Additional fix when typing on right side of assignment operator

Issue #1931
Fixed typo: "roperty" to "Property" in context menu for Inspector for Field within Table Designer when designing a level 7 dbf file.

Issue #1940
Fixed - Preprocessor setting in Project Explorer doesn't get compiled.

Issue #1939
Fixed - report streaming code is removing an added object to a report based on a crp - Fixed Report Designer reloading report's superclass instead of its class after editing event handler in source editor

Issue #1877
Fixed MAV (on Win 10) when reloading Report Designer after editing event handler for Report Component

Issue #1942
Fixed problem causing linkage for new event handler to be lost when closing source editor and switching back to report designer_mediator

Issue #None
Corrected Translation of text string in Spanish version of Source Editor Settings dialog

Issue #1945
Fixed - Add IDE element to Project Explorer to allow user to add preprocessor directives.

Issue #1901
Fixed - Pasting component on scrolled form no longer sets top to a negative value.

Issue #1954
Fixed - components in form in designer change position when moving components below the bottom of the form upwards

Issue #1960
Fixed streaming of report's superclass into CLASS statement when report is based on a custom report class and user runs report and then switches to design mode

Issue #2008
Fixed - Implemented option to not search subfolders within dBASE Find In Files... dialog

Issue #2154
Fixed - In Navigator drop down list of paths/databases .. hovering over a path/database shows as blank

Issue #2078
Fixed - Command window not deleting history

Issue #2100
Fixed - modi comm in command window adds a space in the file it opens in SE

FORMS, REPORTS and VISUAL COMPONENTS...

Issue #398
Upgraded pushbutton class so the background color from the colorNormal property works to set background color of button when systemtheme is True.

Issue #2006
Fixed "Invalid Bookmark" error that occurred when changing a grid's datalink from a query.rowset to an adoquery.adorowset

Issue #None
class subform, added properties:
          scaleFontName
          scaleFontSize
          scaleFontBold

Issue #1923
Fixed - listview in .exe with built in runtime (RTEXE) does not show groups as long as the app.exe.manifest file is included with the app.exe and is making sure to include version 6 common controls. the ListView object on a form will show the groups.

Issue #1935
Fixed Entryfield Function and Picture properties so that when they are modified they invalidate control's window instead of recreating the window (which was incorrectly changing position of control window when form has been scrolled vertically)

Issue #1930
Fixed setting superclass for report in report designer when reloading designer after editing event handler in source editor

Issue #1921
Fixed disappearing numerals when using a picture setting of '99' on an entryfield

Issue #1734
Fixed inserting of template characters when formatting entryfield value when function code "I" - Center is used

Issue #1459
Fixed checking/unchecking menu item when menu is attached to _app.framewin

Issue #2237
Fixed - Edit menu options do not work correctly for a form with a custom menu (mdi or non-mdi)

Issue #2264
Fixed - Fixed crash on themed notebook in dBASE application and follow on crash as well

Issue #None
On SDI form (non-mdi), made menu able to dock to bottom,right, or left side of form - not just top

ADO...

Issue #1916
Fixed - ADO params using the same parameter reference twice does not work.

Issue #1932
Fixed ? command so it correctly retrieves and formats data from a MySQL LongText field

Issue #1957
using numbered parameters causes invalid subscript reference.

Issue #1993
Fixed - get MAV setting adostoredProc variable to null, or releasing adostoredProc variable. Also after database is closed and app is finished

Issue #2033
Fixed - adoStoredProc causing crash when trying to reference the adoStoredProc Rowset

DEBUGGER...

Issue #1990
Fixed - After deleting a watch variable it remains in the watch dialog

Issue #1922
Debugger - Fixed ability to edit and use breakpoint expressions

Issue #1922
Fixed Save and Load of Breakpoint settings to and from plusdebug.ini to correctly handle file paths with embedded commas, conditions with embedded commas, and global breakpoints.
Fixed code that updates BreakPoint Dialog's ListView control after adding, deleting or modifying breakpoints via dialog.
Fixed code that tests (evaluates) breakpoint conditions as they were not getting evaluated

DBASE DBF TABLES...

Issue #1956
Fixed streaming of datetime query parameter value to stream with curly braces instead of double quotes

MISCELLANEOUS...

Issue #1983
Fixed - Runtime buffer overflow error starting in 10.0.0.0. doubled size of icode buffer used when compiling macro expression.

Issue #1875
Added code to ensure all timers are stopped and released early in dBASE shutdown sequence fixing windows error on program exit.

Issue #1981
New fix for _app.session.deleteAlias() that fixes both the lockup and prevents deletion of persistent BDE aliases.
NOTE: this does not affect using API calls that create permanent BDE aliases. That still requires an elevated access level either by running dBASE with Admin rights or setting registry key for Borland\Database Engine to allow Users to have full control

Issue #2025
Fixed - format toolbar large buttons are misaligned up in .exe
create and .exe and in it's ini set ...
[Tools]
LargeButtons=1
The format tool buttons are missing some options (like Bold, Underline, Italics and paragraph options) other buttons that come after take on the roll of those buttons...

Issue #2027
Fixed - get MAV closing a form via f.close() function if it has a stored procedure

dBASE™ PLUS 11 - ALL FIXES
Issue #0058
Added OnDisplayChange() event to class FrameWindow, Form, and SubForm.
        OnDisplayChange() will fire when a change is made to Windows Display Settings - such as changing resolution or color depth or when the screen is rotated

Issue #0398
Upgraded pushbutton class so the background color from the colorNormal property works to set background color of button when systemtheme is True.

Issue #0773
Surfaced the following gesture events in class Form, Subform, and all form components that have their own hWnd:
           OnGestureZoom()
           OnGesturePan()
           OnGestureRotate()
           OnGestureTwoFingerTap()
           OnGesturePressAndTap()

Issue #1459
Fixed checking/unchecking menu item when menu is attached to _app.framewin

Issue #1734
Fixed inserting of template characters when formatting entryfield value when function code "I" - Center is used

Issue #1875
Added code to ensure all timers are stopped and released early in dBASE shutdown sequence fixing windows error on program exit.

Issue #1877
Fixed MAV (on Win 10) when reloading Report Designer after editing event handler for Report Component

Issue #1901
Fixed - Pasting component on scrolled form no longer sets top to a negative value.

Issue #1916
Fixed - ADO params using the same parameter reference twice does not work.

Issue #1921
Fixed disappearing numerals when using a picture setting of '99' on an entryfield

Issue #1922
Debugger - Fixed ability to edit and use breakpoint expressions

Issue #1922
Fixed Save and Load of Breakpoint settings to and from plusdebug.ini to correctly handle file paths with embedded commas, conditions with embedded commas, and global breakpoints.
Fixed code that updates BreakPoint Dialog's ListView control after adding, deleting or modifying breakpoints via dialog.
Fixed code that tests (evaluates) breakpoint conditions as they were not getting evaluated

Issue #1923
Fixed - listview in .exe with built in runtime (RTEXE) does not show groups as long as the app.exe.manifest file is included with the app.exe and is making sure to include version 6 common controls. the ListView object on a form will show the groups.

Issue #1930
Fixed setting superclass for report in report designer when reloading designer after editing event handler in source editor

Issue #1931
Fixed typo: "roperty" to "Property" in context menu for Inspector for Field within Table Designer when designing a level 7 dbf file.

Issue #1932
Fixed ? command so it correctly retrieves and formats data from a MySQL LongText field

Issue #1933
Fixed ability for dBASE to detect a tap gesture as well as other default gestures on Windows 10

Issue #1935
Fixed Entryfield Function and Picture properties so that when they are modified they invalidate control's window instead of recreating the window (which was incorrectly changing position of control window when form has been scrolled vertically)

Issue #1939
Fixed - report streaming code is removing an added object to a report based on a crp - Fixed Report Designer reloading report's superclass instead of its class after editing event handler in source editor

Issue #1940
Fixed - Preprocessor setting in Project Explorer doesn't get compiled.

Issue #1942
Fixed problem causing linkage for new event handler to be lost when closing source editor and switching back to report designer_mediator

Issue #1945
Fixed - Add IDE element to Project Explorer to allow user to add preprocessor directives.

Issue #1954
Fixed - components in form in designer change position when moving components below the bottom of the form upwards

Issue #1956
Fixed streaming of datetime query parameter value to stream with curly braces instead of double quotes

Issue #1957
using numbered parameters causes invalid subscript reference.

Issue #1960
Fixed streaming of report's superclass into CLASS statement when report is based on a custom report class and user runs report and then switches to design mode

Issue #1981
New fix for _app.session.deleteAlias() that fixes both the lockup and prevents deletion of persistent BDE aliases.
NOTE: this does not affect using API calls that create permanent BDE aliases. That still requires an elevated access level either by running dBASE with Admin rights or setting registry key for Borland\Database Engine to allow Users to have full control

Issue #1983
Fixed - Runtime buffer overflow error starting in 10.0.0.0. doubled size of icode buffer used when compiling macro expression.

Issue #1986
Added: .sql, .txt, ,prj, and All (.) to list for save file dialog.

Issue #1990
Fixed - After deleting a watch variable it remains in the watch dialog

Issue #1993
Fixed - get MAV setting adostoredProc variable to null, or releasing adostoredProc variable. Also after database is closed and app is finished

Issue #2006
Fixed "Invalid Bookmark" error that occurred when changing a grid's datalink from a query.rowset to an adoquery.adorowset

Issue #2007
Fixed ability to display and hide Inspector for class Designer so it works with the current version of the Inspector

Issue #2008
Fixed - Implemented option to not search subfolders within dBASE Find In Files... dialog

Issue #2021
Fixed - temp error while creating event handlers in a report while designing

Issue #2025
Fixed - format toolbar large buttons are misaligned up in .exe
create and .exe and in it's ini set ...
[Tools]
LargeButtons=1
The format tool buttons are missing some options (like Bold, Underline, Italics and paragraph options) other buttons that come after take on the roll of those buttons...

Issue #2027
Fixed - get MAV closing a form via f.close() function if it has a stored procedure

Issue #2032
Added new property, themeBackground to PushButton class.
          When True (the default) pushButton's background uses the current theme's background.
        When themeBackground is False, the background color from the colorNormal property is used.

Issue #2033
Fixed - adoStoredProc causing crash when trying to reference the adoStoredProc Rowset

Issue #2040
Fixed popping up inappropriate autocomplete options after typing a close parenthesis at end of line of code that started with a ?
Additional fix when typing on right side of assignment operator

Issue #2078
Fixed - Command window not deleting history

Issue #2095
Enable Redo in the Source Editor

Issue #2100
Fixed - modi comm in command window adds a space in the file it opens in SE

Issue #2154
Fixed - In Navigator drop down list of paths/databases .. hovering over a path/database shows as blank

Issue #2157
dmAssist - Datamodule designer - Additional fixes to ensure images loaded for treeitems, load correctly

Issue #2237
Fixed - Edit menu options do not work correctly for a form with a custom menu (mdi or non-mdi)

Issue #2238
Fixed - Non-mdi form with custom menu does not show assigned bitmaps for menu options

Issue #2264
Fixed - Fixed crash on themed notebook in dBASE application and follow on crash as well

Issue #2294
Fixed - Title bar in form not updating when it's changed while running

Issue #2349
Fixed - with SET CUAENTER OFF and form.MDI = false, ENTER key does not move from field to field in a form

Issue #2350
Fixed - Menu image/icon is not showing for regular mdi form

Issue #2351
Fixed - Using the tab key does not return to the pushbutton as you tab through the Z order

Issue #2360
Fixed - watch dialog no longer working in dBASE 11

Issue #2362
Fixed - bitmap issues on pushbuttons - if systemTheme is false - dbase crashes

Issue #None
Corrected Translation of text string in Spanish version of Source Editor Settings dialog

Issue #None
On SDI form (non-mdi), made menu able to dock to bottom,right, or left side of form - not just top

Issue #None
class subform, added properties:
          scaleFontName
          scaleFontSize
          scaleFontBold

Issue #None
new session property .. _app.session.isAlias(). A test to see if an alias exists.

Some Initial notes on dBASE™ PLUS 11:

Is Windows XP supported in dBASE™ PLUS 11?

NO, dBASE™ PLUS 11 is not designed to work on XP. Since Microsoft dropped support for the OS back in April 2016 we have followed suit. While there are still many users of XP, we are seeing a dramatic drop in the number of people using it.

It is never easy to drop support for a OS, especially one as popular as XP. However the resources needed to retrofit, recompile, retrofit, etc. makes it unfeasible to continue support more so when you know that if you hit a snag with the older compiler for instance, you can't go to Microsoft for a fix.

So that puts us in an untenable position for a platform that is being rapidly phased out by organizations and individuals every day. That is why we made the difficult decision to drop support for Windows XP and Windows Server 2003 (server version of XP).

Are dBASE™ PLUS 10.X projects forwardly compatible with dBASE™ PLUS 11?

YES, projects developed in dBASE™ PLUS FULL 10.X should compile with little to no changes.

Upgrading from dBASE™ PLUS 2.6x and lower to dBASE™ PLUS 11

dBASE™ PLUS 11 does not support full backward compatibility.
This is due to many underlying technical issues, including but not limited to:
- High Precision Math implementation
- A new look & feel manager
- Full upgrade to the new MFC (Microsoft Foundation Class) for look and feel and underlying component structures
- Updated and latest compiler support

All code from previous versions should be re-compiled.

If the idapi.cfg was in c:\program files\ ….common files\borland\bde
Which would be the case with 2.6x…

You should still have the idapi.cfg in c:\program files\ ….common files\borland\bde after installing dBASE™ PLUS 11.

The installer will create a new idapi.cfg in c:\programdata\common files\borland\bde but you should still have the one in c:\Program files\common files\borland\bde And should be able to copy that over to c:\programdata\common files\borland\bde and use it.

Also, the data objects on a form have been modified to require that the parent be explicitly set in a form or a report or other CLASS.

This means that if you attempt to put a form (for example) in design mode that has data objects that are defined like this…

this.DBASESAMPLES1 = new DATABASE()
with (this.DBASESAMPLES1)
left = 19.0
top = 14.0
databaseName = "DBASESAMPLES"
active = true
endwith

this.FISH1 = new QUERY()
with (this.FISH1)
left = 20.0
top = 14.0
database = form.dbasesamples1
sql = "select * from FISH.DBF"
active = true
endwith

When you attempt to put the form in design mode you will receive info about the modification needed to make it run in dBASE™ PLUS 11…

 

Upgrading from dBASE™ PLUS 2.7x and dBASE™ PLUS 2.8x to dBASE™ PLUS 11

dBASE™ PLUS 11 does not support full backward compatibility.
This is due to many underlying technical issues, including but not limited to:
- High Precision Math implementation
- A new look & feel manager
- Full upgrade to the new MFC (Microsoft Foundation Class) for look and feel and underlying component structures
- Updated and latest compiler support

All code from previous versions should be re-compiled.

Also, the data objects on a form have been modified to require that the parent be explicitly set in a form or a report or other CLASS.

This means that if you attempt to put a form (for example) in design mode that has data objects that are defined like this…

this.DBASESAMPLES1 = new DATABASE()
with (this.DBASESAMPLES1)
left = 19.0
top = 14.0
databaseName = "DBASESAMPLES"
active = true
endwith

this.FISH1 = new QUERY()
with (this.FISH1)
left = 20.0
top = 14.0
database = form.dbasesamples1
sql = "select * from FISH.DBF"
active = true
endwith

When you attempt to put the form in design mode you will receive info about the modification needed to make it run in dBASE™ PLUS 11…

 

FAQ:

What are the BDE specifications for dBASE™ Data (specs) (Table limits)

General limits and specification

General BDE™ Limits

48 Clients in system
32 Sessions per client (3.5 and earlier 16 Bit, 32 Bit)
256 Session per client (4.0 32 Bit)
32 Open databases per session (3.5 and earlier 16 Bit, 32 Bit)
2048 Open databases per session (4.0 32 Bit)
32 Loaded drivers
64 Sessions in system (3.5 and earlier 16 Bit, 32 Bit)
12288 Sessions in system (4.0 32 Bit)
4000 Cursors per session
16 Entries in error stack
8 Table types per driver
16 Field types per driver
8 Index types per driver
48K Size of configuration (IDAPI.CFG) file
64K Size of SQL statement (RequestLive=False)
4K Size of SQL statement (RequestLive=True)
6K Size of SQL statement (RequestLive=True) (4.01, 32 Bit)
16K Record buffer size (SQL or ODBC)
31 Table and field name size in characters
64 Stored procedure name size in characters
16 Fields in a key
3 File extension size in characters
260 Table name length in characters
260 Path and file name length in characters
15 Significant Digits

Paradox® Limits

127 Tables open per system (4.0 and earlier 16 Bit32 Bit)
254 Tables open per system (4.01 32 Bit)
64 Record locks on one table (16Bit) per session
255 Record locks on one table (32Bit) per session
255 Records in transactions on a table (32 Bit)
512 Open physical files (4.0 and earlier 16 Bit32 Bit) (DB, PX,MB, X??, Y??, VAL,TV)
1024 Open physical files (4.01 32 Bit) (DB, PX,MB, X??, Y??, VAL,TV)
300 Users in one PDOXUSRS.NET file
255 Number of fields per table
255 Size of character fields
2 Billion records in a table
2 Billion bytes in .DB (Table) file
10800 Bytes per record for indexed tables
32750 Bytes per record for non-indexed tables
127 Number of secondary indexes per table
16 Number of fields in an index
255 Concurrent users per table
256 Megabytes of data per BLOB field
100 Passwords per session
15 Password length
63 Passwords per table
159 Fields with validity checks (32 Bit)
63 Fields with validity checks (16 Bit)
53 Fields with Validity checks added at onetime
63 Number of Sessions with Tables open on1 System

dBASE® Limits

256 Open dBASE® tables per system (16 Bit)
350 Open dBASE® tables per system (BDE™ 3.0 - 4.0,32 Bit)
512 Open dBASE® tables per system (BDE™ 4.01, 32 Bit)
100 Record locks on one dBASE® table (16 and 32 Bit)
100 Records in transactions on a dBASE® table (32 Bit)
1 Billion records in a table
2 Billion bytes in .DBF (Table) file
4000 Size in bytes per record (dBASE® 4)
32767 Size in bytes per record (dBASE® for Windows®)
255 Number of fields per table (dBASE® 4)
1024 Number of fields per table (dBASE® for Windows®)
47 Number of index tags per .MDX file
254 Size of character fields
10 Open master indexes (.MDX) per table
220 Key expression length in characters

What is a User BDE Alias?

You can create individual User Database Aliases in dBASE™ PLUS 11 when using the user’s UAC Paths in Vista or Windows 7.
In the User’s PLUS.ini (or the applications .ini) file.
(For example c:\users\[username]\dBASEPLUS\Bin\PLUS.ini)

Here is information from the dBASE™ PLUS 11 help file. Topic: ‘INI’
USERBDEALIASES Is a setting which allows a standard user to create a User Alias that gets saved to the user's ini file.
A standard user will NOT be able to add a regular BDE Alias that gets stored in the BDE config file (idapi.cfg), unless the user is given administrator privileges OR is put in a custom user group that has full access to the BDE's registry keys and the folder containing IDAPI.cfg.
The alternative is to deploy your app with one of the following:
- an .ini file containing User BDE Alias settings that the runtime will auto load when starting your application.
- a custom routine that your program runs to create on-the-fly any User BDE Aliases needed while your program is running.
To use the .ini file option, add lines similar to the following:
[UserBDEAliases]
0=SomeAlias
1=SomeODBCAlias
[SomeAlias]
Driver=DBASE
Options=PATH:C:SomeAliasFolder
[SomeODBCAlias]
Driver=
Options=

Does dBASE™ PLUS 11 support Unicode?

The dBASE™ IDE is able to use Unicode characters (like Chinese, Arabic etc...)

However, the .dbf and .db tables currently do not support these sets of characters. We are working on changing this for a future release. Please keep an eye on our website as we will be making many changes in the near future.

With ADO connections however, you can connect to external databases that use Unicode and other data types. Since ADO connections are outside of the BDE, it is not restricted by the limitations of the BDE.

You can find more detailed information from the help for ‘ADO’ under the ADO book in our online Help system.

http://www.dbase.com/online-help/

INNO Setup error : Sorry can't install this setup cancelled by user – When using Runtime/BDE

Check for required dBASE™ Runtime files..." i get "Sorry can't install this setup cancelled by user

Because of security issues people have found that you must use the [Run] section of inni to run the bde/runtime installer.

Try the following …

First leave the setting...
UninsHS= from the [dBASERuntime] section.
delete everything else under [dBASERuntime].

Instead you should use the [Run] section of inno (see the inno help under the RUN section).
This is where extra .exe’s are run at the end of the app install.

After removing the [dBASERuntime] section there will be additional code that is no longer necessary so remove ..
under [code] the section starting with 'procedure CurPageChanged(CurPageID: Integer);' and ending with 'end;'


Then add the following …
(For an example... this is using PLUS 8.1.3.0 Runtime installers)

under ...

[Files]

; -----------------------------------------------------
; dBASE™ Runtime Installer – put it in {tmp} dir
Source: "PLUS813Runtime-b2345_EN.exe"; DestDir: "{tmp}"; Flags: ignoreversion deleteafterinstall

; -----------------------------------------------------
; Manifest file for runtime:
Source: "PLUSrun.exe.manifest"; DestDir: "{pf}dBASEPLUSRuntime"
; Manifest file for BDE:
Source: "bdeadmin.exe.manifest"; DestDir: "{cf}BorlandBDE"

Under…

[Run]
; This is a Silent install of runtime suppresses the runtime install display, ...
; PLUSNNNNRuntime-bNNNN_en.exe -s -a Runtime= BDE= Silent -sr
; In order to get this to work properly, the double-quotes are doubled up in a few places
; if you look at the statement ... that embeds a single double-quote (as it were) in the
; parameters needed for the runtime and bde installs.

Filename: {tmp}PLUS813Runtime-b2345_EN.exe; Parameters: "-s -a Runtime=""{pf}dBASEPLUSRuntime"" BDE=""{cf}BorlandBDE"" Silent -sr"; StatusMsg: "Installing dBASE™ Runtime and BDE..."; Flags: runascurrentuser; WorkingDir: {tmp};


= = = = = = = = = = = = FULL EXAMPLE OF .ISS THAT INSTALLS A SIMPLE HI.EXE AND THE RUNTIME = = = = = = = = = = = = =

[_TopOfScript]
; This is a Innoscript generated by dBASE™ PLUS Project Explorer

[_Project]
ProjectNr=1.0.0.0
ProjectName=RuntimeBDETest
ProjectExeFileName=C:\Users\Kathy Kolosky\AppData\Local\dBASEPLUS8\Samples\Runtime\BDETest.exe
ProjectMainFileName=C:\Users\Kathy Kolosky\AppData\Local\dBASEPLUS8\Samples\Runtime\Test.iss
ProjectAuthor=Copyright © 2014 Unknown Author
ProjectCreateDate=05/21/2014 07:38:29
ProjectAccessDate=05/21/2014 07:38:56
ProjectdBaseVersion=dBASE™ PLUS 8.130 b2345
ProjectLastdBaseRuntimeVersion=8130
ProjectLastdBaseRuntimeLanguage=EN
ProjectdBasePRJFilename=C:\Users\Kathy Kolosky\AppData\Local\dBASEPLUS8\Samples\Runtime\Test

[ISPP]
#pragma option -v+
#pragma verboselevel 9 ;Macro and functions successfull call acknowledgements
#define Debug
#define AppName "RuntimeBDETest"
#define AppVersion "1.0.0.0"
#define AppId "RuntimeBDETest_ID"
#define AppCopyright "Copyright © 2014 Unknown Author"
#define AppUninstallDir "{app}Uninstall Information"

[LangOptions]
LanguageCodePage=0

[Setup]
SourceDir=C:\Users\Kathy Kolosky\AppData\Local\dBASEPLUS8\Samples
SetupIconFile=
AppId={#AppId}
AppName={#AppName}
AppVersion={#AppVersion}
AppVerName={#AppName} Version {#AppVersion}
AppCopyright={#AppCopyright}
DefaultDirName={pf}{#AppName}
DefaultGroupName={#AppName}
PrivilegesRequired=admin
ShowLanguageDialog=false
VersionInfoVersion={#AppVersion}
VersionInfoDescription={#AppName} Setup
VersionInfoCompany={#AppCopyright}
VersionInfoTextVersion=Version {#AppVersion}
UninstallFilesDir={#AppUninstallDir}

[Languages]
Name: en; MessagesFile: compiler:Default.isl

[Messages]
BeveledLabel=Copyright © 2014 Unknown Author


[Files]
; -----------------------------------------------------
; dBASE™ Runtime Installer – put it in {tmp} dir
Source: "C:\Runtime\Installer\PLUS813\Runtime-b2345_ALL.exe"; DestDir: "{tmp}"; Flags: ignoreversion deleteafterinstall
Source: RuntimeBDETest.exe; DestDir: {app}; Flags: IgnoreVersion

[INI]
Filename: {app}RuntimeBDETest.ini; Section: Toolbars; Flags: UninsDeleteSection
Filename: {app}RuntimeBDETest.ini; Section: Toolbars; Key: Standard; String: 0
Filename: {app}RuntimeBDETest.ini; Section: Toolbars; Key: StandardFloat; String: 0
Filename: {app}RuntimeBDETest.ini; Section: Toolbars; Key: StandardStyle; String: 0
Filename: {app}RuntimeBDETest.ini; Section: Desktop; Flags: UninsDeleteSection
Filename: {app}RuntimeBDETest.ini; Section: Desktop; Key: Maximized; String: 0
Filename: {app}RuntimeBDETest.ini; Section: Desktop; Key: StatusBar; String: 0
Filename: {app}RuntimeBDETest.ini; Section: CommandWindow; Flags: UninsDeleteSection
Filename: {app}RuntimeBDETest.ini; Section: CommandWindow; Key: Open; String: 0

[Run]
; Silent install of runtime suppresses the runtime install display, and the installshield stuff ...
; PLUSRuntime-bNNNN_en.exe -s -a Runtime=d:dBASEPLUSRuntime BDE=d:dBASEPLUSbde Silent -sr
; In order to get this to work properly, the double-quotes are doubled up in a few places
; if you look at the statement ... that embeds a single double-quote (as it were) in the
; parameters needed for the runtime and bde installs.
Filename: {tmp}PLUS813Runtime-b2345_ALL.exe; Parameters: "-s -a Runtime=""{pf}dBASEPLUSRuntime"" BDE=""{cf}BorlandBDE"" Silent -sr"; StatusMsg: "Installing dBASE™ Runtime and BDE..."; Flags: runascurrentuser; WorkingDir: {tmp};


[UninstallDelete]
Type: files; Name: Filename: {app}RuntimeBDETest.ini

[_EndOfScript]
; © dBASE™ Portions by Jonny Kwekkeboom © 2002-2014
; Visual dBase, dB2K, dBASE™ SE and dBASE™ PLUS © dataBased Intelligence.Inc Homepage: http://www.databi.com/
; dQuery for Delphi,C++,dBASE™ PLUS © dataBased Intelligence.Inc see also Homepage: http://www.dQuery.com/

[Code]
var FinishedInstall: Boolean;

procedure InitializeWizard();
begin
FinishedInstall:= false
end;

procedure DeInitializeSetup( );
var ErrorCode: Integer;
begin
if FinishedInstall then
#if VER >= 0x05000100
ShellExec('open',ExpandConstant('{group}'),'',ExpandConstant('{group}'), SW_SHOWNORMAL, ewNoWait, ERRORCODE);
#else
InstShellExec(ExpandConstant('{group}'), '', '', SW_SHOWNORMAL, ERRORCODE);
#endIf
end;

function InitializeSetup(): Boolean;
var S: String;
begin
(** Create a Mutex so we can not double call this Setup.exe file **)
S:='{#AppName}';
Result:= true;
if CheckForMutexes(S+'_SetupMutex')=false
then Createmutex(S+'_SetupMutex')
else Result:=False;
end;

ADO Sample Code:

How do you use ADOQuery with Parameters

There are a couple of ways to use Parameters with ADOQuery in 8.0.0.3.
Most DBMS connections will be able to use positional parameter markers indicated by a question mark (?).
Here are some examples of some connections to SQL Server using positional parmeters...

Example 1 - in Form.onOpen event.

this.COMPANIES1 = new ADOQUERY(this)
with (this.COMPANIES1)
left = 14.7778
top = 5.72
databaseName = "SQLTEST"
sql = "SELECT * FROM KathyTest.dbo.Companies where NAME = ? "
endwith

this.GRID1 = new GRID(this)
with (this.GRID1)
height = 12.32
left = 3.8889
top = 2.2
width = 31.1111
endwith

this.rowset = this.companies1.rowset

function form_onOpen
with (this.COMPANIES1.parameters['NAME'])
value = 'dBase, LLC.'
endwith
this.COMPANIES1.active = true
this.grid1.dataLink = this.COMPANIES1.rowset
return

Example 2 - in constructor code.

this.COMPANIES1 = new ADOQUERY(this)
with (this.COMPANIES1)
left = 14.7778
top = 5.72
databaseName = "SQLTEST"
sql = "SELECT * FROM Test.dbo.Companies where NAME = ? "
with (params["NAME"])
value = "dBase, LLC."
endwith
active = true
endwith

Example 3 - using ADOQuery.beforeConnect event.

this.COMPANIES1 = new ADOQUERY(this)
with (this.COMPANIES1)
beforeConnect = {;this.parameters['NAME'].value = 'dBase, LLC.'}
left = 17.1111
top = 10.56
databaseName = "SQLTEST"
sql = "SELECT * FROM Test.dbo.Companies where NAME = ? "
cursorLocation = 1 // Server
active = true
endwith

You can use the named parameters in most circumstances as well.
This Example also sets up a Parent/Child relationship on SQL Server data using ADOQueries and named parameters and the masterSource property.

this.ORDERS1 = new ADOQUERY(this)
with (this.ORDERS1)
left = 89
top = 178
databaseName = "MYSQLTEST_CA"
sql = "SELECT * FROM orders"
active = true
endwith

this.ORDERDETAILS1 = new ADOQUERY(this)
with (this.ORDERDETAILS1)
left = 367
top = 195
databaseName = "MYSQLTEST_CA"
sql = "SELECT * FROM orderdetails where orderNumber=:orderNumber"
masterSource = form.orders1.rowset
active = true
endwith

Making data in an ADOQuery object editable

If your DBMS ADO/ODBC driver has the ability to set the cursorLocation to 'Server' you may be able to make your ADOQuery.rowset editable and not just readable.
For example the following connects to SQL Server and will make the Companies table editable in an ADOQuery object.

this.COMPANIES1 = new ADOQUERY(this)
with (this.COMPANIES1)
left = 17.1111
top = 10.56
databaseName = "SQLTEST"
sql = "SELECT * FROM Test.dbo.Companies"
cursorLocation = 1 // Server
active = true
endwith

If you are unable to use cursorLocation = 1 //Server -- then you can use ADOTable objects (which connect directly to table - NOT using sql) to edit your data on a form.
You will know if the cursorLocation is settable or not by simply trying it. If it does not hold after setting the object active=true, then it is not available.

Creating a Parent/Child relationship on data using masterSource

This Example sets up a Parent/Child relationship on SQL Server data using ADOQueries and named parameters and the masterSource property.

this.ORDERS1 = new ADOQUERY(this)
with (this.ORDERS1)
left = 89
top = 178
databaseName = "MYSQLTEST_CA"
sql = "SELECT * FROM orders"
active = true
endwith

this.ORDERDETAILS1 = new ADOQUERY(this)
with (this.ORDERDETAILS1)
left = 367
top = 195
databaseName = "MYSQLTEST_CA"
sql = "SELECT * FROM orderdetails where orderNumber=:orderNumber"
masterSource = form.orders1.rowset
active = true
endwith

How to Execute SQL commands

How do I execute sql commands in ADODatabase object.
You would use the syntax for the particular DBMS and Driver you are connecting to.
You can usually find the proper syntax by doing a Google search or looking up the driver info.

Here is an example of using the executeSQL command on an ADODatabase object with a MySQL connection using the 5.x MySQL driver.

this.ADODATABASE1 = new ADODATABASE(this)
with (this.ADODATABASE1)
onOpen = class::ADODATABASE1_ONOPEN
onExecute = class::ADODATABASE1_ONEXECUTE
left = 6.1111
top = 4.08
databaseName = "MYSQLTEST_CA"
active = true
endwith

function ADODATABASE1_onExecute(cmd)
?"Completed "+cmd
return true

function ADODATABASE1_onOpen
?"about to : CREATE TABLE aLongVarChar (ALongText LongText);"
this.executeSQL("CREATE TABLE aLongVarChar (ALongText LongText);")
return

Known Issues with workarounds:

ADO Apps using Apache Web Server

ADO use with Apache: Issue #1017 - get MAV instantiating an ado object in a web app.

Workaround: This issue 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"
endif

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"
else
// otherwise cEnvVarNoParens exists and has a value
endif

// Create and set value of env.var (with parens)
bResult = SetEnvironmentVariable(cEnvVar, cEnvStr)
endif
endif
endif

return


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
endif

if type("IsWow64Process") # "FP"
extern CLOGICAL IsWow64Process(CHANDLE, CPTR CLOGICAL) kernel32
endif

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)
endif

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 = ""
sql = "SELECT * FROM "
active = true
requestLive = false
endwith

Language Support

Language Support: Japanese Language Runtime Files are not available.

Workaround: None, we will be releasing it soon.

Data Module Designer - dmAssist

Issue #2328 renaming the databaseName after a Data Mdule is open will not update the Databases and Tables view.

Workaround: You must close and restart the Data Module designer to see changes

 

Issue #2255 inspector pops itself back up after selecting a window outside of dBASE then back.

Workaround: you can edit plus.ini and remove the section labeled: [ToolBoxInspector].
Remove the 'DockSite' setting and set Float=1
Next time a designer (such as the Form Designer) is run, the Inspector will open in a floating position.
When you close the Form Designer the Inspector will close, as well.

dmCRUD - Windows app wizard

Issue #2241 'Reports' Menu options are disabled.
Upon first open .. without changing tab (on 'Data' tab)
'Reports' menu option shows as disabled (which is proper)
now go to Reports tab ...
go to Reports menu option and they are still disabled.

Workaround: toggling the menu option.. for example..
click on another tab or menu option.
Then go back to the menu on the Reports tab and Reports menu and the output options will be enabled.

Form or Report Designer issues

Issue #1446 report with rectangle causes issues with adding new fields.

Workaround: is to remove the rectangle while designing until you are ready to put it back.

Issue #1860 custom text is not showing the borderStyle setting in the a form using the custom text

Workaround: Pick either:
Comment out: transparent = true in the .cc file
OR
Add: doubleBuffered = true to the .wfm resolves this issue.

ADO

Issue #2178 you get an error when trying to run a form with adoStoredProcudure if you are using a connectionString instead of databaseName property Error is: "Invalid subscript reference"
connectionString = ""
procedureName = ""
with (parameters[""]) // Errors here
type = "Char" //for example
value = ""
endwith

Workaround: After setting connectionString property add:
connected = true
This opens the connection to the database server specified in connectionString.
Once the connection is open, setting the procedureName will be able to retrieve the parameter definitions from the server.

Issue #1988 ADOQuery - invalid argument for value with parameter having a negative value

Workaround: use quotes around the negative value. for example in the sample below change

parameters["VL"].value = -1
///where you get the invalid argument for value error

to

parameters["VL"].value = "-1"

Then it will work.

OTHER

Issue #1966 Manifest is not being used when building EXE with runtime. ... speed tip does not work in app.exe when building with RTEXE (even when using manifest)

Workaround: In dBASE compile the form code add the manifest to the BUILD command (example):
build issue1966.wfo,issue1966.exe.manifest to issue1966.exe rtexe
This links the manifest file into the .exe
Then make sure that the manifest file is also deployed with the .exe

Known Issues without workarounds:

Data Module Designer - dmAssist

Issue #2330 Select table dialog crashes if many tables exist in an external database. When connecting through the BDE (ODBC) a 'Select Table' dialog will come up.
In some cases adding a table through the 'Select Table' dialog will cause dBASE to stop working.

Issue #2329 After adding an ADOQuery object to the design surface, and set it so that the SQL property doesn't exist, and the active property is false, the dmDesigner object ignores it, and when saving and exiting, it removes the ADOQuery object completely

Issue #2324 Get 'Rowset is Read Only' - trying to change 'View by Query' in Multi-Table View.
This happens specifically when using lookupRowset on a field in a table that is used also in the 'Multi-Table' View.

Previous Versions:

dBASE™ PLUS 10

dBASE™ PLUS 9

dBASE™ PLUS 8

2012-2017 © dBase, LLC
dBase LLC Websites Status