What's New in DataFlex 2023 - Alpha 1
DataFlex 2023 introduces FlexTron, which brings Web views and controls
into Windows applications, allowing a more modern look and feel or just
adding Web features to more mature Windows applications. DataFlex 2023
provides better tools for working with SQL with a New Embedded SQL API,
including new classes, named parameter support, @SQL string with syntax
highlighting and a SQL Query Tester in the Studio.
Watch the What’s New in DataFlex 2023 (pre-release)
Learning Center course.
Visit the DataFlex
2023 Testing forum to report testing feedback.
FlexTron
DataFlex 2023 introduces FlexTron, which
brings Web views and controls into Windows applications, allowing a more
modern look and feel or just adding Web features to more mature Windows
applications.
You can use a single Web control or build entire applications.
The following classes provide support for this:
Read more about FlexTron.
New Embedded SQL API
DataFlex 2023 comes with a new way to work directly with SQL statements.
A new engine for executing statements is built into the runtime that puts
result sets directly into native DataFlex types. This means that your
results can now go directly into structs, multidimensional arrays and
variants with the proper type conversions being done automatically. Parameterized
queries now support named parameters and only a single class / object
is needed for executing queries. Studio support for working with SQL statements
is improved by adding syntax highlighting, code sense and a query test
tool for SQL statements.
@SQL String with syntax highlighting

- One object for executing your SQL queries
- Connect using Managed
Connections
- Result sets into native DataFlex Types
- Named parameter support
Note: cSQLExecutor does not work with DB2 as of Alpha 1, but will work
in later releases of DataFlex 2023 - 23.0.
Query Tester
A Query Tester has been added to the Studio. It helps you create, test
and execute SQL queries and has a Struct Generator.
Read more about the Query Tester.
Include_Text
Include_Text
allows .SQL and other text files to be included as constants with a single
line of DataFlex code.
Read more about the New
Embedded SQL API.
Studio Improvements
Query Tester
A Query Tester has been added to the Studio. It helps you create, test
and execute SQL queries and has a Struct Generator.
Read more about the Query Tester.
Web Property Categories
Web properties
are now identified in the Properties Panel with a Unicode Earth character.
Due to this, Web Properties are no longer listed in a separate Web Properties
category, but in meaningful categories like Appearance and Behavior, along
with standard (non-Web) properties.
Properties Panel Filters

The Studio's Properties Panel
now allows for filtering of properties.
You can choose whether to show All properties, Standard (non-Web) properties
or Web properties.
In addition, you can choose to see only changed properties along with
the property type filter above.
Automatic Theme Change based on System Settings
The Studio can now change from Light to Dark Theme when Windows does,
rather than having to manually toggle the Studio theme.
Miscellaneous
You can now Import preferences from a prior Studio version (18.2 or
higher) from the Tools menu.
Added keyboard shortcut Ctrl+Shift+G for GoTo
Definition in the Code Editor.
Copy search results to clipboard now supports Unicode.
Connectivity
Drivers
Improvements
- Improve Find Logic for MySQL.
- Support psConnectionAppName in DB2 driver.
- TimeOut option for closing database cursors.
Find GT/LT cursors will be closed when the memory for the find cache
is released.
- New attribute DF_FIELD_SQL_COLUMN_NAME.
DF_FIELD_SQL_COLUMN_NAME returns the name of a column as it is defined
in the SQL database.
SQL column names can have special characters that are not allowed in
DataFlex column names. For example: spaces, accented characters or
special characters like æ.
To retrieve the exact name as defined in SQL, use the DF_FIELD_SQL_COLUMN_NAME
attribute. The returned value can be used to compose embedded SQL
statements and with SQL filters.
Changed DataDict.pkg so the SQL Filter functions (SQLStrFileFieldName,
SQLStrFieldName, SQLStrSchemaFileFieldName) now use DF_FIELD_SQL_COLUMN_NAME
instead of DF_FIELD_NAME.
- Created DF_DATABASE_ODBC_DRIVER_NAME and DF_DRIVER_SQLSERVER_CLIENT_DRIVER_NAME
attributes to return the name of the underlying driver.
Bug Fixes
- Fixed truncation of data when using Get_Field_Value – it would
truncate at 65535 in DF20.1 and on another case strip off last byte.
- Finds on indexes having NULL not working correct.
The generated WHERE clause was not correct when there were NULL values
in an index segment.
- Set_Attribute DF_FILE_USE_DUMMY_ZERO_DATE caused memory violation.
- SQL drivers crashed after long error from backend.
There was a memory overwrite in error handling when the backend returned
long error text (> 500) in all SQL drivers.
- Embedded SQL Setting SQLSTMTATTRIB_CURSOR_TYPE broken in DF20.x.
This was a 64-bit issue where the cursor would not change type when
using Send SQLSetStmtAttribute of hstmt SQLSTMTATTRIB_CURSOR_TYPE
SQL_CURSOR_STATIC.
- Mssqldrv restructure generates scalar variable error.
This was caused by the script to find full-text index on a table and
only happened when the server collation of the SQL Server instance
was set to a case sensitive collation
- MySQL datetime columns returned as date.
Restructuring MySQL table with DateTime column caused 'You have an
error in your SQL syntax' error due to a bug in MySQL ODBC driver
(tested version 8.0.19) that returned SQL_DATE (9) for a 'datetime'
column instead of SQL_TYPE_TIMESTAMP (93)
- Restructure fails when replacing all columns.
Copy records to temp table generates:
Insert into <newtable> (<columns>) select <columns>
from <oldtable
When either of the <columns> list was empty, restructure would
fail
- Df_File_Changed incorrect for unchanged DateTime column.
When moving a value in the field buffer that already contains that
same value, the DF_FILE_CHANGED attribute should not become true.
For DF_DateTime columns, DF_FILE_CHANGED was sometimes incorrectly
set to true.
- Studio table editor showed wrong size of DateTime columns.
DateTime columns should always have a size of 23.3 but in the Studio,
if a new DateTime column was added to a table, it would show as 23
and after saving the table definition, it would show as 26. Database
Builder correctly showed the size as 23.3.
- MySQL Mariadb Can't set identity on creating of table.
MySQL/MariaDB does not allow auto increment on decimal columns, only
on integer columns. When a column was defined as numeric(10.0), the
odbc_drv would create a decimal (10.0) and setting it as auto increment
generated an error.
Codejock Version Update
DataFlex 2023 uses the 22.0.0 release of Codejock (both COM and MFC)
and all the related components have been updated.
Note: Codejock renamed its Grid control classes from Reportxxx to Gridxxx,
which, once imported from the Codejock ActiveX control and "wrapped"
to be used with DataFlex, to some classes (including class members and
constants) having their names changed from cCJReportxxx to cCJGridxxx.
For example, the class cCJReportBehavior is now named cCJGridBehavior.
We have tried to make this transition as seamless and painless as possible,
to ensure that your DataFlex applications compile and work as before.
We changed all of the names in our internal classes (most importantly
cCJGridControl.pkg). DataFlex Codejock classes that are wrapped, and have
additional DataFlex code to improve how DataFlex uses that class mostly
already used the Gridxxx naming convention (e.g. cCJGrid,
cDbCJGrid, cDbCJGridColumn,
etc.). If your code only use these classes, you will be able to compile
your applications without any code adjustments.
If your code uses DataFlex Codejock classes that are wrapped, but referenced
code using the old Reportxxx naming convention, you may get compiler errors.
To resolve these, you can either:
- Change the names in your code to the new naming convention.
- Add 'Use OldcCJReportControl.pkg' to your application. This
package uses the old naming convention. We recommend this as a
temporary measure to give you time to perform the naming changes.
Web Framework Improvements
Faster WebApp Startup Times
Faster startup times due to improved web property logic.
New Classes
Added cWebMultiSelectList,
cWebColumnSelectionIndicator
classes for selecting multiple rows.
Added cWebColumnsTags
class.
Miscellaneous
- OnReleaseProcess is
sent after each HTTP request before the process is released. This
allows you to perform maintenance tasks without influencing response
time.
- Added IsInViewStack
to cWebView class so developers can check if a view is in the view
stack.
WebApp Server Improvements
Improved Crash Logging
WebApp crashes are now logged to the Windows Event viewer with a full
stack trace if possible.

- WebApp Administrator is now DPI aware.
- WebApp Administrator now shows Server version in Help > About
dialog.
- Allow SPLF web
servers to be added by their host name in addition to IP addresses.
Language Improvements
- Added support for multiline comments using
/* comment
goes
here */.
Include_Text
allows .SQL and other text files to be included as constants with
a single line of DataFlex code.
Optimized the Unicode logic of string functions.
This should improve their speed dramatically. This affects Left, Pos,
Right, Mid, Insert, RightPos, Replace and Replaces.
Windows Improvements
Compiler Improvements
You can now define/replace symbols from the Console
Compiler.
-R adds replaces to the compiler which can either
equal symbols or definition. If a symbol is not definined in code, the
symbol will be defined as| CI1:
-RPRODUCTION_BUILD
You may also specify the definition, such as:
-RVERSION=1.0
If you want to define a string, it needs to be encapsulated in single
or double quotes (‘'' or '“’).
Sample Improvements
- Added cWebMultiSelectList sample.
- Removed MAPI sample.
- Removed simple automation controller sample.
- Miscellaneous cleanups and updates.
Database Explorer Improvements
- When the 'Keep selected fields' option is checked, clicking on
a table in the tree will use the previously selected fields to rebuild
the data view.
- Index tab page no longer shows recnum as first column of index
1 when not a recnum table.
Various Improvements and Fixes
- Updated old code in seq_chnl.pkg (use by Seq_Channel_New and Seq_Release_Channel)
to use native arrays instead of obsolete Array objects.
- Load Def no longer defaults to table numbers in reserved areas.
- Safeguarded the DeleteKey
function in the cRegistry
class to return False if "" is passed.
- Creating new DataFlex tables allowed some invalid characters to
be used, which would create issues with those tables later on (SQL
conversion, creating DDs, etc.).
- Passing a negative number to pad() caused a GPF.
- If a struct member matches the type name then it uses the casing
of the type.
Documentation
Welcome
- Tutorials main page: Removed References
to VisualDataFlex.com, added link to Learning Center
- Tutorials: updated descriptions of some
features to include Dark Mode information.
Class Ref
- Web class structure changes for FlexTron
implemented
- Codejock renaming of classes in Codejock
22.0.0 implemented
- Added ‘WebMenuContext Support’ section
to cWebList, cWebTagsForm and cWebTreeView
- Reviewed and updated doc for cDbScrollingContainer,
cScrollingContainer
- Added doc for pbDragDropEnabled
- Made sure doc is added for all instances
of piHeight and piMinHeight
- Improved OnCloseUp and Combo_Item_Changed
help
- Updated psMask to state that the mask
is used for display, but not while a control is in edit mode (except
for peDataType = typeASCII)
- Added Registry location to pbPreserveEnvironment
doc
Language Reference
- Added doc for Include_Text command
- Round now returns BigInt instead of Integer
- CStringLength stated that it returns code-units,
but it actually returns code-points
- Added Destroy to See Also list of RefClass
- Direct_Output stated
that “{ChannelNumber}
may be 0 through 9, and if omitted, will be assumed to be 0 (default
for input)”, which was copied from Direct_Input. Corrected to “1 (default
for output)”.
- Clarified wording in ConvertFromClient
and ConvertToClient (one was an exact copy of the other).
- RandomHexUUID: added Use statement to
syntax (it requires a package)
- Relate: added note that existing data
in parent buffers is not replaced with child buffer data
- UCharArrayToWString: fixed WString links
that went to String instead
- Delete command: Added note that Recnum
and RowId are cleared after a record is deleted
- DF_Driver_Server_Name: Updates to syntax,
links and some corrections
- Misc. edits.
Miscellaneous
- Adjust copyright notices product-wide to new standard (Copyright
2005-2023 Data Access Corporation. All rights reserved.)
See Also
FlexTron
New Embedded SQL API
Query Tester
What's New