New Features and Bug Fixes in Version 4.0 of ODBCExpress
=========================================================


New Features
------------

New features introduced since ODBCExpress 3.0:

1.  Introduction of the TOEDataSet, which allows you to make use of the Delphi 3
    and other compliant 3rd-party data-aware controls (such as Orpheus) with
    ODBCExpress.
2.  Blob Deferral functionality, which allows you to fetch blobs from the
    database only when (and if) they are referenced.  The CellMemory property is
    also implemented to allow you to retrieve the blob columns of a multi-row
    fetch by way of blob deferral.
3.  New TimeStamp routines allows you to convert between the TTimeStamp, TDate
    and TTime ODBC records.
4.  The Tracing property allows you to do ODBC call tracing from within
    ODBCExpress, for ODBC Driver debugging purposes.
5.  The BindBookmarks property is added, which gives you the choice of binding
    bookmarks as part of the result set to speed up bookmark retrieval, or to
    retrieve them as needed using less resources.
6.  The BlobCol method is added to allow you to explicitly bind a column to a
    specific data type, if ODBCExpress can't detect the correct column type from
    the ODBC Driver to perform automatic binding.
7.  The NumRows method returns an estimate of the number of rows in a result
    set, the NumRowsAffected method returns the number of rows affected by an
    insert, update or delete SQL operation, and the new ColCount and RowCount
    properties returns the values from the NumCols and NumRows methods
    respectively.
8.  The ColNull/CellNull properties can be used to determine if a column is null
    and set a column to null for positional updating.  The ColIgnore and
    CellIgnore properties can be used to set the columns to be ignored during
    positional insert and update operations.  All four these properties replace
    the need to make use of the ColSize and CellSize properties in previous
    versions of ODBCExpress to achieve the same results.
9.  The WinHandle THdbc property returns the window handle used by the ODBC
    dialog boxes and the WinParent property allows you to override the default
    window handle used by these dialog boxes.
10. All the Henv properties are removed and replaced by the global THenv
    variable, GlobalHenv.
11. The Connected property allows you to establish a connection at design time.
12. In the evaluation versions the ODBCExpress registration screen doesn't
    appear anymore when you load Delphi.
13. The TOEGrid user navigation is improved.
14. The TOEGrid design time population is removed since it had no effect at
    run-time and just caused unneccesary confusion about its purpose.
15. The MoreResults method is iplemented to allow you to make use of multiple
    result sets returned with a single execute.  For this reason the SQL
    Property Editor is also modified to allow you to build multiple SQL
    statements using the SQL Builder.
16. The ODBCExpress units are re-structured to optimize the executable size.  A
    registration unit is also added which contains most of the property editor
    code to further optimize your application code.
17. The BindNull/BindNulls methods allows you to bind in a null value for a
    parameter in a SQL statement.
18. The BulkParamSize method is added to allow you to modify the size of
    specific rows in a bulk parameter.
19. The PrimaryCols and IgnoreCols methods are added to the THstmt, which allow
    you to specify all the primary colums and all the columns to be ignored
    using one call each.
20. The Blob Placement property allows you to force a blob to be inserted in
    parts or at one go at the database, if ODBCExpress doesn't detect this
    setting from the ODBC Driver automatically.
21. The OnStatement event allows you to view/modify SQL statements build by
    Level 3 SQL Generation.
22. The Core property is now settable to force whether Core parameter binding
    must be done or not internally, if incorrectly detected from the ODBC Driver
    by ODBCExpress.


New features which didn't exist in the Beta versions of ODBCExpress 4.0:

1.  The Target Property and Property Editor is added which now contains the
    TargetTable, PrimaryCols and IgnoreCols properties.
2.  The OnStatement, OnInsert, OnUpdate, OnDelete and OnRefresh events are added
    to the TOEDataSet.
3.  The TOEDateTime data-aware control is modifed to include a checkbox to
    distinguish between null and non-null date/time columns.
4.  The TSQLDataSet descendant is included which provides a TStrings SQL
    property instead of the default String SQL property.
5.  The TOEDataSet prepare/bind once and assign/execute multiple times
    functionality are implemented, instead of re-preparing and re-binding during
    each execution.


New features in ODBCExpress 4.01 (Service Release 1):

1.  A StoredProc property is added, which allows you to select a stored
    procedure to be executed.  The Params property will also automatically be
    populated with the stored procedure parameters.
2.  The "@" character can now be specified as part of a parameter name in a SQL
    statement.  This is useful when using stored procedures.
3.  The ability to execute a SQL statement without preparing it is added to the
    THstmt component.  When a SQL statement is not prepared and the
    THstmt.Execute method is called, the SQL statement will directly be executed
    at the database without preparing it.
4.  The Prepared and Executed properties are added to the THstmt component to
    allow you to keep track of these two states of a SQL statement on the THstmt
    component.
5.  The TwwOEDataSet descendant is included which adds the necessary properties
    to the TOEDataSet to allow you to use the InfoPower data-aware controls with
    ODBCExpress.
6.  The OnFilter event for the TOEDataSet is implemented, which allows you to
    provide record filtering to the TOEDataSet, if the filtering can't be done
    as part of the SQL statement.
7.  The TOESchema columns editor now allows you to only select from a list of
    DataSource-specific column data types, if connected to a DataSource.  This
    prevents you from selecting column types not supported by the ODBC Driver.
8.  A Close method was added to the THstmt component to allow you to close the
    result set of a THstmt at any time and release any locks kept by the result
    set.


Bug Fixes
---------

The following bugs, which existed in ODBCExpress 3.0, is now fixed in
ODBCExpress 4.0:

1.  A BindMemory (BindBinary, BindText) problem which made it impossible to bind
    an empty stream.  The column will now automatically be set to null when the
    stream is empty.
2.  A ParamSize bug which didn't allow you to set the value of a blob column to
    be null.
3.  A DoUpdate bug which only updated the first blob in a result set.
4.  A problem where the TargetTable property was reset each time DoUpdate was
    called.
5.  A problem in which the Connect method raised an exception with some ODBC
    Drivers when a certain soft error occurred, even though the connection was
    established.
6.  The setting of the global ShortDateFormat variable in the initialization
    section of the Extgrid unit was removed.
7.  A bug in the Execute method in which the statement handle wasn't being reset
    when the cursor library is used.
8.  A TOEGrid problem in which a jump-back effect was caused when you have
    goRowSelect in Options, since the grid cursor didn't move with the visible
    grid window.
9.  The SQL Builder generated the "AS" SQL clause incorrectly.
10. A ColString/CellString problem which, when retrieving an empty blob as a
    string, caused an access violation.
11. The Float formating style couldn't be used for integer columns.
12. The BindString method now works for long strings and blob fields, provided
    that the ODBC Driver used returns False for the THdbc.Core property.
13. A DoUpdate problem in which the null/ignore flags of columns were not
    incorporated.
14. Some TOEGrid combo box behaviour problems when pressing the up/down key in
    the combo box or when using an editable combo box in the grid.
15. A TOEGrid bug in which you got a "list index out of bounds" error when there
    wasn't exactly one fixed column in the grid.


The following bugs, which existed in the Beta versions of ODBCExpress 4.0, is
now fixed in ODBCExpress 4.0:

1.  A form stream bug which prevented access to the SQL Builder.
2.  The error suppression of the TOEDataSet when browsing a result set was
    fixed.
3.  A Locate/Lookup problem in which it expected a variant array instead of just
    a variant as a value.
4.  The disappearing updates/deletes problem in which rows just updated or
    deleted in the data-aware controls connected to a TOEDataSet weren't
    reflected by the data-aware controls.  Disappearing inserts is still a
    problem, caused by the implementation of the virtual Delphi TDataSet.
5.  The Table property should now be automatically populated when used with
    virtually any ODBC Driver.
6.  A problem which didn't allow you to insert blob parameters using the
    TOEDataSet.
7.  The RowCount property didn't work with stored procedures.


The following bugs, which existed in ODBCExpress 4.0, is now fixed in
ODBCExpress 4.01 (Service Release 1):

1.  Design time problems which caused "function sequence" or "operation invalid
    at this time" errors changing some of the TOEDataSet properties when the
    TOEDataSet was or is Active.
2.  A Locate/Lookup problem which caused the application to hang if no match was
    found, as well as a problem which caused the result set cursor to scroll as
    the search was performed.
3.  The RowCount property didn't work with SELECT statements which contained
    "ORDER BY", "GROUP BY" or "UNION" clauses.
4.  TOEDataSet.BookmarkValid now returns True if a bookmark is non-null, and
    TOEDataSet.CompareBookmarks not return -1, 0 or 1 depending on whether the
    first bookmark value is physically smaller, equal or greater than the second
    bookmark value.
5.  A jump-back problem with the TOEDataSet.GotoBookmark method which cancelled
    out the functionality of the method is fixed.
6.  A MoreResults problem in which the columns for the following result sets
    weren't re-bound.
7.  Calling StartTransact or setting the Core property didn't establish the
    connection automatically.
8.  Incorrect generation of Level 3 SQL Generation statements when using a
    multi-part primary key is fixed.