NativeDB - Features and Fixes
=============================

Release 1.95
------------
- Added Delphi 2005 (Win32) support.
- Prepared to be used with Adaptive Server Anywhere version 10.
- If AbortBackup from TAsaSession.OnBackup returned True or an error occurred
  while processing TAsaSession.Backup an exception was raised even if
  WantExceptions was False - fixed (Thanks Luis).
- Using ASA9 an internal warning was the result when executing a non-deterministic
  query. This was seen as an exception "The Cursor is not prepared" when
  using TAsaDataset. Adding a proper ORDER BY clause would workaround the
  problem - fixed (thanks Bernd).
- An EVariantBadVarTypeError was sometimes seen at W2K machines when internally
  accessing an Int64 parameter value as a variant - fixed (Thanks Sanjay).
- Always got an "Error -131: Syntax error near (end of line)" when using ASA9
  for Linux - fixed.
- The dbExpress driver included the terminating zero character when describing
  the length of a character column - fixed (Thanks Wayne).

Release 1.94
------------
- Added new public method TNativeSQL.GetFieldPrecision to retrieve the precision
  of a numeric field.
- Only the datatypes MONEY/NUMERIC(19,4), SMALLMONEY/NUMERIC(10,4) and
  NUMERIC(20,4) now maps to ntCurrency. With earlier versions all
  NUMERIC(x,4) fields mapped to ntCurrency regardless of the field's precision.
- An SQL statement terminated with a semicolon (";") assigned to TAsaDataset.SQL
  was not always able to detect a DESC keyword within an ORDER BY clause to
  build the searching indices - fixed (Thanks Paul).
- TAsaSQL.IsFieldDirty would fail comparing ntString fields if the field buffers
  contained different data after the terminating zero - fixed (Thanks Sigitas).
- Added public property TAsaDataset.CacheBlobs to improve our BDE/TQuery
  compatibility. This feature is especially important to some grids that
  display the contents of memos and BLOBs directly in the grid. CacheBlobs
  will also improve performance when scrolling through records that display
  BLOB images.
- Properly tested and approved to be used with Adaptive Server Anywhere
  version 9 (codename Banff).
- Using TAsaStoredProc.Open to execute a stored procedure not returning 
  a result-set did not return the correct ASA errorcode - fixed (Thanks Michal).
- All implicit calls to NativeDB Alerts made by TAsaAlert didn't qualify
  the stored procedure names with the creator-name - fixed (Thanks Andrey).

Release 1.93b - service release
-------------------------------
- Added bonus dbExpress driver for NativeDB.
- The resulting user defined error message caused by a call to RAISEERROR when
  used within a storedproc or a trigger wasn't always correctly returned
  to LastError and LastErrorCode - fixed (Thanks Michal).
- TAsaStoredProc was not properly handling a result-set returned from a
  WatcomSQL stored procedure declared with a RESULT clause - fixed (Thanks Peter).
- A call to TAsaAlert.Stop when compiled with Delphi 7 could cause a thread 
  deadlock situation and the application would hang - fixed (Thanks Pekka).
- Master-detail datasets did not work properly when the relationship was 
  based on the new ASA 8.02 "uniqueidentifier" datatype - fixed (Thanks Andreas).
- In a few cases posting a TBytesField (ftBinary) using TAsaDataset could
  possibly corrupt the underlying record buffer - fixed.
- TAsaDataset.Params[].SetData was not handling ntBinary datatypes - fixed.
- A field of type ntBinary did not work properly when used as the keyfield
  of a TDBLookupComboBox - fixed (Thanks Andreas).
- TAsaDataset.FindNearest was not able to find a nearest match in situations
  when only a subset of the keyfields given by the ORDER BY clause was
  specified in the KeyValues parameter - fixed (Thanks Richard).

Release 1.93a - service release
-------------------------------
- Improved the TAsaSession.Backup method by adding four new backup types 
  including btFullRenameLocalLog, btRenameLocalLog, btFullRestartLog and 
  btRestartLog.
- Added a new parameter AbortBackup to the TAsaSession.OnBackup event.
  Existing OnBackup events must be recreated/upgraded to meet the new 
  declaration. Assigning True to AbortBackup will immediately stop the backup.
- Verified to be used to produce CGI apps to run on Linux/Apache. IOW All 
  references to Qt libraries have been removed in the NativeDB basic units 
  (This includes NdbBase, NdbAsa, NdbBasDS, NdbAsaDS, NdbUtil and NdbAlert).
- A lost connection caused by a network cable drop produced an EStackOverflow
  exception and the TAsaSession.OnConnectionTerminated event was not 
  fired - fixed (Thanks Matthias).

Release 1.93
------------
- Added Delphi 7 support.
- Added Kylix 3 support.
- If an UNSIGNED INT contained a value outside the signed 32-bit range a "Value
  out of range for destination" error was the result - fixed (Thanks Mark).
- New public property TAsaSession.LastStatement to retrieve the last requested
  query or statement. Useful to log successful or failed statements for
  later debugging purposes. Any statement requested to be prepared or executed
  by TAsaDataset, TAsaSQL or TAsaStoredProc will report its statement to the
  linked TAsaSession instance.
- If a foreign key was defined with RESTRICT operations in combination with the
  CHECK ON COMMIT integrity checking, neither TAsaDataset nor TAsaSQL was properly
  handling a foreign key violation in autocommit mode - fixed (Thanks Bernd).
- Added thread synchronization between concurrent connection attempts when
  TAsaSession.ServerType = stWorkgroup (Thanks Don).
- TAsaDataset.Locate or Lookup didn't work on a field defined as BIGINT or
  UNSIGNED BIGINT. This also affected a TDBLookupComboBox - fixed (Thanks Ivan).
- Added new event TAsaDataset.OnUpdateRecord to support cached updates through
  TClientDataset and TDataSetProvider.
- The TAsaDataset.Params property editor was initially assigning a "0" value
  to any parameter of datatype ntString instead of an empty string - fixed.
- When TAsaDataset was attached to a TDataSetProvider and the provider's
  ResolveToDataSet property was set to FALSE, any host variables (parameters)
  defined by the provider was not properly recognized by TAsaDataset - fixed.
- A connection attempt would fail if TAsaSession.LoginDatabase contained any
  drive or path delimiter characters (e.g. \.:) in the middle of an alias
  databasename - fixed (Thanks Dmitry).
- It was not possible to name the database different than the default file
  prefix of the physical database file when TAsaSession.ServerType was
  set to stServer - fixed.

Release 1.92
------------
- Released a new product "NativeDB Alerts" to allow intersession/interclient 
  communication in your application and database.
- New component TAsaAlert to automate the usage of "NativeDB Alerts".
- A BLOB assigned to a parameter through TAsaStoredProc wasn't always properly
  bound to the underlying host variable - fixed (Thanks Alex).
- Added support for the TDataSet ancestor features Filtered, OnFilterRecord,
  FindFirst, FindLast, FindNext, FindPrior and Found, to further improve our 
  BDE/TQuery compatibility.
- If a call to TAsaDataset.Open was cancelled by a call to TAsaSession.Stop
  (e.g. through TAsaSession.OnServerWait), the dataset was left in dsBrowse 
  mode (i.e. Active=True) - fixed.
- Added new published property TAsaSession.ConnectOnLoading to avoid design-
  time connections from being used at run-time.
- Added the ability to connect to different ASA versions (through different
  ASA client-interface DLLs) from within the same executable process.
- Added support for C++Builder 6.
- Added Delphi 6.02 support.
- Added internal handling of the "ansi_update_constraints" option to control
  the rather strict ANSI/92 standard behavior and to avoid the "-192: Update 
  operation attempted on non-updateable query" error.
- The loCaseInsensitive option on TAsaDataset.Locate wasn't handling OEM
  characters properly - fixed.
- Table- and columnnames with OEM chars wasn't always converted correctly - fixed.
- A "-171: Error opening cursor (07003)" could be the result when re-opening
  a detail-dataset (in a master-detail relationship) when the result-set included
  locked rows applied to it after the detail-dataset was first prepared - fixed.

Release 1.91a - service release
-------------------------------
- Loading a TDBRichEdit control could sometimes give a "Failed to Load Stream"
  error if the current size of the BLOB was near the boundaries of the RTF
  header-size - fixed (Thanks Thomas).

Release 1.91
------------
- Added new method TAsaSession.TimeChange to utilize the new ASA8 function
  db_time_change.
- Added new method TAsaSession.GetProperty to utilize the new ASA8 function
  db_get_property.
- Released a new NativeDB library (NDBAX) to support Microsoft ActiveX (Refer
  to our web-site for further information.)
- TAsaSession.Backup failed when backing up from a Windows client on a UNIX
  server - fixed  (Thanks Adrian).
- Replaced TAsaSQL.UniDirectional property with a new TAsaCursorType constant
  actNoScroll. Remember to select the "Ignore All" option on any "Property does
  not exist"-errors when reloading forms referring to the old UniDirectional
  property. Any code, referring to the old UniDirectional property, must be 
  considered against the new cursortype.
- Added a new cursortype constant actDynamicScroll (TAsaCursorType). actDefault
  still represents actDynamicScroll, but the new cursortype constant will allow
  actDefault to change with future ASA versions.
- Added new function NdbGetFieldNames to the NdbApp unit.
- NdbFindDatabase failed when the DatabaseName parameter included the full path
  and file extension of the database - fixed (Thanks Martin).
- An unsuccessful SQL Anywhere 5.5 (or earlier) client-connection would leave
  the SA Client-software (dbclient.exe) running if the connection failed by an
  error "-103: invalid userid or password" - fixed (Thanks Tolik).
- New component TAsaLogin. This component provides a similar login solution as
  supported by the BDE TDatabase.LoginPrompt property, but has built-in support
  for many SQL Anywhere specific connection-features.
- Added Kylix 2 support.
- Accessing a memo-field (BLOB) in a TAsaDataset.CalcFields event could cause the
  underlying cursor to become unstable, thus causing the rows to be incorrectly
  ordered - fixed (thanks Peter).
- New public property TAsaSession.DataSetCount to retrieve the number of active
  datasets associated with the TAsaSession component.
- New public property TAsaSession.DataSets[Index: Integer] is an indexed array
  of all active datasets associated with the TAsaSession component.
- A call to TAsaSession.Close, while one ore more datasets (TAsaDataset) was
  active, didn't always unprepare prepared datasets - fixed (thanks Thomas).
- Added TAsaSQL.AfterPrepare and TAsaSQL.AfterUnprepare events.

Release 1.90b - service release
-------------------------------
- It was not possible to assign a zero (0) value to a timestamp field. As a
  result, the timestamp field was set to the current date - fixed (thanks Javier).

Release 1.90a - service release
-------------------------------
- The size of a VCL TMemoryStream was not properly initialized in method
  TAsaSQL.BlobToStream - fixed (thanks Yossi).
- Added support for the VCL TLargeIntField (Int64) available from Delphi4/BCB4
  and later.
- Added new fieldtype ntInt64 which maps to the ASA bigint datatype.
- FindKey and FindNearest wasn't always able to extract an index from the ORDER
  BY clause, if the field-list included quotes - fixed.
- Fixed some minor Delphi 6 related issues with Variant types.
- Equally named SPs with different creators defined an incorrect number of host
  variables in TAsaStoredProc.Params - fixed (thanks Vladislav).
- New parameter to NdbGetTableNames to include the creator as part of the table name.
- New parameter to NdbGetStoredProcNames to include the creator as part of the SP name.
- TAsaStoredProc didn't handle "OUT date" parameters properly - fixed (thanks Tolik).
- Databases created with the "Ignore trailing blanks" (e.g. dbinit -b) switch
  caused host variables, declared by TAsaStoredProc, to be right-padded with
  spaces - fixed (thanks Makhin).
- New public property TAsaDataset.IndexedLocate to control if you want Locate
  and LocateNext to attempt to use a compatible index when searching. The
  default value is True. In situations when your current database collation
  is incompatible with the default system locale, it would sometimes be necessary
  to disable the indexed search.
- New public method TAsaDataset.LocateNext to be used to search the dataset
  for a matching record after the current cursor position.
- Added global variable NdbBase.NdbEmptyParam to be used instead of
  System.Null, because of its changed behaviour in Delphi 6 and Kylix.
- A single SQL statement terminated with a semicolon (";") was treated
  as a batch - fixed.
- TAsaStoredProc.StoredProcName was not prefixed with creator-name - fixed.
- Repeated SQL host variables (using same param names) wasn't always properly
  bound to the TAsaDataset.SQL statement - fixed.

Release 1.90
------------
- Added Delphi 6 support.
- Added Kylix1/CLX support.
- Improved performance with master-detail datasets.
- Added TAsaSession.OnDebugMessage event. This event will get called once
  for each client-side debug message which normally only goes to a debug log file.
  This event is only supported by ASA8 or later (ESQL DB_CALLBACK_DEBUG_MESSAGE).
- Added new function NdbGetTableNames to NdbApp.
- Added new function NdbGetStoredProcNames to NdbApp.

Release 1.88c - service release
-------------------------------
- Added support to allow C++Builder runtime-packages to link with 
  NativeDB components (thanks Andree).
- An explicit "caFree" return value in a Form.OnClose event could
  sometimes result in an AV in BCB5 - fixed (thanks Steven).

Release 1.88b - service release
-------------------------------
- Added support for Adaptive Server Anywhere version 8 (codename Vail).
- An "Invalid pointer operation" was sometimes seen, in design mode, when
  re-opening a query after it first failed - fixed (thanks Irineu).
- TAsaDataset.Locate was sometimes unable to find the last row in the
  resultset when connecting to ASA7 databases - fixed (thanks Richard).
- Minor TAsaDataset bug fixes.

Release 1.88a - service release
-------------------------------
- Added a Reset button to the TAsaDataset.Params property editor to force
  a re-scan of the current SQL, which will rebuild the entire parameter-list.
- Added example DLL-based project to show how a main application executable
  could share it's connection handle with one or more DLLs.
- New TAsaSQL.Lock method, to utilize the ESQL FETCH ... FOR UPDATE command.
- Added new method TAsaSession.IsWorking to utilize the DBLIB function
  db_is_working.
- Locate and FindKey didn't work properly on Windows98 - fixed (thanks Piotr).
- Added support for TField.OldValue.
- Added support for D5's Midas TClientDataset interface.
- A "-80: Unable to start database engine" error was seen when an attempt
  was made to start two our more personal database engines - fixed (thanks Yossi).

Release 1.88
------------
- Added support for the ESQL DESCRIBE LONG NAMES statement to allow column
  names to be longer than 29 characters.
- Added new published property TAsaSQL.TransIsolation to control isolation
  levels on a per cursor basis (e.g. ESQL OPEN ISOLATION LEVEL n).
- New public methods TAsaDataset.FindNearest and TAsaDataset.FindKey to
  improve our BDE (TTable) compatibility. These functions use the current
  ORDER BY clause to build the search index.
- Semicolon terminated queries was treated as a compound statement,
  and did always return a readonly cursor - fixed (thanks Richard).
- New property TAsaDataset.SyncInserts to control cursor repositioning after
  row inserts.
  This property is used to avoid the "lost inserts" affect in TAsaDataset.
  A row inserted into a cursor has no position in the result set, and will
  cause the row to disappear from view when using data-aware controls. When
  this property is set to True, it uses the primary key (if any) of the
  table to reposition the cursor to the inserted row (if it still matches
  the WHERE clause criteria in the refreshed result set) and it will also
  make any auto-incremental value or other column defaults immediately
  visible. The default value is False.
- TAsaSQL.Find is obsolete and its functionality is now built into TAsaDataset.

Release 1.87b - service release
-------------------------------
- When TAsaSession.OEMConvert was enabled, an "Invalid pointer operation" was
  occationally seen - fixed (thanks Irineu).
- ASA's "microssecond" data-member of a TIME or TIMESTAMP column wasn't properly
  calculated - fixed.
- TAsaDataset.Locate and TAsaDataset.GotoBookMark was sometimes unable to properly
  rebalance the cursor after a wide-fetch operation - fixed (thanks Irineu).
- INOUT Stored Procedure parameters was sometimes assigned a NULL indicator state
  upon INPUT - fixed (thanks Tolik).
- A "Record not found" exception was raised when using TAsaDataset.Locate on an
  empty result-set - fixed (thanks Robin).
- Reading the value of TAsaDataset.Session with the Delphi "Break on exception"
  turned on, raised a "not linked to a session" error - fixed.
- C++Builder's CodeGuard complained about TAsaSQL's constructor - fixed (thanks Ryan).

Release 1.87a - service release
-------------------------------
- An EVariantError was sometimes raised if the empty brackets [] (not Null) variant as
  host variables was passed to OpenRead - fixed (thanks Karsten).
- A "The statement is not prepared" exception was seen if TAsaStoredProc was
  calling a stored function or an SP containing a "select into" statement - fixed.
- A "-188: Not enough values for host variables (07001)" was seen in some rare
  cases when calling stored procedures with both IN and INOUT parmeters - fixed.
- TAsaDataset.Close was sometimes raising a "not linked to a session" error - fixed.

Release 1.87
------------
- Using Boolean parameters through TAsaDataset.Params could result in an AV - fixed.
- New property TAsaSession.Handle to allow mulitple DLLs to share the same
  connection session (SQLCA) to the database.
- New public method TAsaSession.Close (same as Connected := False).
- New public method TAsaSession.Open (same as Connected := True).
- New property TAsaSession.TrimBlanks to support databases created with
  the "Ignore trailing blanks" (eg. dbinit -b) switch.
- Added support for the ESQL UNIQUE cursor type.
- Improved TAsaDataset and TAsaStoredProc's Params property to allow parameters
  to be assigned the NULL state value at design-time.
- New property TAsaSession.KeepConnection.
- New public methods TAsaDataset.Resume and TAsaStoredProc.Resume, to allow
  a stored procedure to continue execution after processing a result set (cursor).
- New public properties TAsaDataset.StillInProc and TAsaStoredProc.StillInProc,
  to check if the current stored procedure is resumable.
- Added new component TAsaStoredProc to increase our BDE (TStoredProc)
  compatibility. This component comes in addition to the current support of
  stored procedures through either TAsaDataset or TAsaSQL.
- New public method TAsaSQL.ClearField.
- TAsaSession.ServerType now has a default property value of stClient.
- TAsaSession.LibraryFile now defaults to "dblib7.dll".
- New method TAsaSQL.Open to combine OpenRead and OpenWrite into one call.
- New method TAsaSQL.OpenPrepared to combine OpenReadPrepared and OpenWritePrepared 
  into one call.
- New method TAsaSQL.MoveToFirst
- New method TAsaSQL.MoveToLast.
- New method TAsaSQL.Curr to allow the current row to be re-read.
- Added new method TAsaSession.NeedQuotes to utilize the DBLIB function
  sql_needs_quotes.

Release 1.86b - service release
-------------------------------
- If a database file with a page size > 2048 was loaded with the ASA7 personal
  engine, a "Database page size too big" error was seen - fixed (thanks Karsten).
- TAsaDataset.Edit didn't properly handle the situation when another user
  changed the current record - fixed.
- A "The cursor is not opened" exception was raised with certain aggregate
  functions, if the query included a field with NULL values - fixed.
- A "Invalid field size" exception was raised with TAsaDataset if a CHAR
  field exceeded 8192 bytes in length - fixed.
- If a TIME field was bound to a host variable the resulting cursor did not
  include the correct rows - fixed (thanks Vladislav).
- It was not possible to clear (assign 00:00:00) to a TIME field - fixed (thanks Vladislav).
- C++Builder users experienced an identifier conflict between the <stdio.h>
  macro EOF and TAsaSQL.EOF - fixed.
- An AV was the result when TAsaSession.LibraryPath was empty and in combination
  with TAsaSession.LibraryFile not found (thanks Derek).

Release 1.86a - service release
-------------------------------
- ntCurrency could loose accuracy with large numbers, using TAsaSQL - fixed.
- Read-locks (shared) wasn't properly released in AutoCommit mode, upon
  cursor closing (thanks Derek).
- When inserting rows to cursor with an empty result set, using TAsaSQL,
  the NULL indicators wasn't properly updated - fixed (thanks Fernando).

Release 1.86
------------
- If WantRowCounts = False TAsaDataset.Refresh didn't allways reposition correctly - fixed.
- In some cases bi-directional cursors did not fetch the first row after open - fixed.
- Added support for incremental backups with TAsaSession.Backup. This feature
  includes the ability to rename the transaction log and start a new one.
- Added TAsaSession.OnLocateServers event called each time TAsaSession.LocateServers
  finds a new ASA 7.01 engine.
- Added new method TAsaSession.LocateServers (supported by ASA 7.01 or later).
- Added TAsaSession.OnConnectionDropped event to notify the client whenever
  dblib is ABOUT to drop a connection caused by liveness timeouts.
  This event is only supported by ASA 7.01 or later (ESQL DB_CALLBACK_CONN_DROPPED).
  Although related, this event is not directly comparable with the existing
  TAsaSession.OnConnectionTerminated event.
- Added new method TAsaSession.GetConnectionInfo.
- Error messages with OEM characters was not translated correctly - fixed.
- Added new public property TAsaSQL.StillInProc.
- Further speed improvements by proper usage of the ESQL DECLARE ... BLOCK clause.
- Fetch and cursor operations improved by using ESQL DECLARE DYNAMIC SCROLL cursors.
- Added new published property TAsaDataset.CursorType.
- Added new published property TAsaSQL.CursorType.

Release 1.85
------------
- Sometimes TQRGroup (reports with group headers and footers) lost data when
  TAsaDataset.ReadOnly was TRUE - Fixed.
- Added support for prepared SQL statements with TAsaDataset.
- In some situations NativeDB ran out out statement handles - fixed.
- In some situations backwards navigation with TAsaDataset was slow - fixed.
  The fix replaced TAsaSQL.Seek with the new TAsaSQL.MoveTo method.
- Row fetching errors was hided by TAsaDataset - fixed.
- TDBRichEdit controls didn't initialize properly with TAsaDataset.Insert and Append - fixed.
- Added new unit NdbApp to offer general application oriented utility functions.
- Added new function NdbFindDatabase to NdbApp.
- Added new function NdbGetDatabaseNames to NdbApp.
- Added online help.

Release 1.84
------------
- Added TAsaSession.OnServerMessage event to enable the application to handle
  messages received from the server during the processing of a request.
  This event is only supported by ASA 6.01 or later (ESQL DB_CALLBACK_MESSAGE)
  (e.g. MESSAGE 'Hello World' TYPE INFO TO CLIENT).
- Added TAsaSession.OnServerStart event that is called just before a database
  request is sent to the server (ESQL DB_CALLBACK_START).
- Added TAsaSession.OnServerFinish event that is called after the response to
  a database request is returned to the client (ESQL DB_CALLBACK_FINISH).
- Added new parameter 'AbortRequest' to the OnServerWait event, to allow the user
  to stop or break the current server request (ESQL DB_CALLBACK_WAIT).
- Added support for Borland C++Builder 4 and 5.
- Added exception class ENativeDatasetError to TAsaDataset's exception hierarchy.
- BLOBs wasn't properly marked modified when attached to a TDBMemo - fixed.
- Impossible to assign values to BLOB fields when first in NULL state - fixed.
- Currency fields wasn't properly stored by a TAsaSQL.Append call - fixed.

Release 1.83
------------
- Minor TQuery compatibility improvements in TAsaDataset.
- NDB documentation distributed as Acrobat PDF file.
- The loCaseInsensitive option, used by Locate, didn't work with OEM characters - fixed.
- TAsaSession.OEMConvert didn't translate fixed string constants in SQL statements - fixed.
- New event TAsaSession.OnConnectionTerminated to handle lost connections.
- Improved variant conversion ability by TAsaDataset.Locate.
- In some situations storing BLOBs, SQL Anywhere 5.x re-used an already open cursor - fixed.
- After TAsaDataset.Refresh, opened cursors wasn't re-positioned correctly - fixed.

Release 1.82
------------
- Minor TAsaSQL bug fixes.
- Added bonus class TwwAsaDataSet for Woll2Woll Infopower components support.

Release 1.81
------------
- Added support for the the final ASA7 release.
- SP's containing multiple- or conditional result sets, wasn't described properly - fixed.
- New TAsaSQL.MaxFetchCount property, to control the maximum size of fetch-buffer.
- TAsaDataset.Refresh didn't work properly for SA 5.x or earlier - fixed.
- DBGrid's multiselect option didn't work - fixed.
- Redesigned the Delphi design-time packages to allow other database interfaces to
  be added to the NativeDB familiy in the future (see readme.txt).
- TAsaSession.Ping didn't support SQL Anywhere 5.x and earlier releases - fixed.
- New TAsaSQL.BlobSize property, to control the size of the BLOB inline fetch-buffer.

Release 1.80
------------
- TAsaSession.Backup didn't work properly with SQL Anywhere 5.x and earlier releases - fixed.
- NO NEED to specify host variable names in it's own parameter.
- TAsaSQL.ClearVariables is obselete and removed.
- TAsaSQL.SetVariables is obsolete and removed.
- TAsaSQL.OpenReadPrepared modified to include host variable values.
- TAsaSQL.OpenWritePrepared modified to include host variable values.
- TAsaSQL.OpenRead modified to include host variable values.
- TAsaSQL.OpenWrite modified to include host variable values.
- TAsaSQL.ExecutePrepared modified to no longer include host variable NAMES.
- TAsaSQL.Execute modified to no longer include host variable NAMES.
- TAsaSQL.GetExecuteVariable allows positional variable identification.
- New TAsaSQL.Resume method, to support the ESQL RESUME command.
- Renamed GetExecuteVariable to GetOutVar - to much to type. 

Release 1.75
------------
- New TAsaSession.StartDatabase method, typically used to control remote engines.
- New TAsaSession.StopDatabase method, typically used to control remote engines.
- TAsaDataset could sometimes cause the connection to drop - fixed.
- TAsaDataset did not connect implicitly through TAsaSession when Active:=True - fixed.
- On disconnect, the SA engine was shut down, when it was already running - fixed.
- New fieldtype ntCurrency, maps to the SA NUMERIC(nn,4) datatype.
- Added generic ESQL example, translated as is, from cur.sqc shipped with SA.
- BufToVarByte renamed to TAsaSQL.StrToVarByte with minor implementation changes.
- Allowed to use field-to-field assignments with BLOBs. Its not required anymore
  to use the BLOB functions. We still recommend to use our BLOB functions as
  convenient helper methods.
- Allowed to pass BLOB-data as parameter values.
- Removed obselete method TAsaSQL.BlobToBlob. Use field-to-field assignments instead.
- Allowed to pass Null variants as parameter values.
- Added helper method TAsaSQL.StreamToVarByte to convert a TMemoryStream to a
  variant array of byte.
- Added helper method TAsaSQL.StreamToStr to convert a TMemoryStream to a string.
- TAsaSQL.IsDirty didn't check BLOBs - fixed.
- Added TAsaSQL.ExecuteImmediate to utilize the ESQL EXECUTE IMMEDIATE command.
- The TAsaDataset.Locate options loCaseInsensitive and loPartialKey didn't work - fixed.
- TAsaSession.GetLibraryVersion didn't allways return correct info - fixed.
- TAsaDataset.DataSource didn't work with Delphi4 and Delphi5 - fixed.
- New TAsaSQL.PrepareOpen method, to work with prepared cursors.
- New TAsaSQL.IsPreparedOpen property, to work with prepared cursors.
- New TAsaSQL.OpenReadPrepared method, to work with prepared cursors.
- New TAsaSQL.OpenWritePrepared method, to work with prepared cursors.
- New TAsaSQL.UnprepareOpen method, to work with prepared cursors.
- New TAsaSQL.PrepareExecute method, to work with prepared DML statements.
- New TAsaSQL.IsPreparedExecute property, to work with prepared DML statements.
- New TAsaSQL.ExecutePrepared method, to work with prepared DML statements.
- New TAsaSQL.UnprepareExecute method, to work with prepared DML statements.
- TAsaSQL.CallProcedure is obselete, use TAsaSQL.Execute or ExecutePrepared instead.
- TAsaSQL.CallFunction is obselete, use TAsaSQL.Execute or ExecutePrepared instead.
- New TAsaSQL.GetExecuteVariable method to retrieve OUT or INOUT host variables.
  Useful to retrive values returned from all kinds of execute-into statements.

Release 1.74
------------
- Added published property CommitOnDisconnect to TAsaSession.
- Added public method StartTransaction to TNativeSession.
- Added public property InTransaction to TNativeSession.
- Added public methods AsCurrency, AsSmallInt, AsMemo, AsWord to TAsaParam.
- Memory leak problem with dynamic named SA cursors - fixed (thanks Bernd Scheufens)
- TAsaSQL.RowsProcessed didn't work in AutoCommit-mode - fixed.
- Added "Aboutbox" through TAsaSession component editor to show version information
  (Right-click or dbl-click the TAsaSession component at design time).
- TAsaSession.Backup resulted in AV if the target disk was full - fixed.
- Added example console application to the set of demoes.
- Verified support for Adaptive Server Anywhere 7 (Aspen) - OK.

Release 1.73
------------
- Added support for Watcom SQL 3.2.
- New TAsaSession.Ping method to assist in diagnosing connection problems.
- Utilizes ARRAY FETCH also with TAsaDataset (not only TAsaSQL) to improve speed.
- Added public method ParamByName to TAsaDataset (for TQuery compatibility).
- Added public property ParamCount to TAsaDataset (for TQuery compatibility).
- Added public method ExecSQL to TAsaDataset (for TQuery compatibility).
- Added public property RowsAffected to TAsaDataset (for TQuery compatibility).
- Added public method BufToVarByte to TNativeSQL to convert a buffer to a variant array of byte.
- Column defaults, including auto-incremental columns, are automatically visible
  to the client after a row insert. No need to refresh or refetch the row after appending.
  (This feature utilizes the Embedded SQL function PUT with an INTO clause).
- Values assigned by auto-incremental columns are automatically visible to the client.
  No need to refresh the query or use the SA @@identity system variable, after appending rows.
- Added property DataSource to TAsaDataset (for TQuery compatibility),
  to support master/detail relationships.
- Added support for TDataset.Lookup (for TQuery compatibility).

Release 1.72
------------
- SA DBClient 5.x corrupted fetch buffers caused TAsaSQL.Close to hang - fixed (thanks Al Kirk)
- Easier to retrive BLOBS < 32K using TAsaSQL default property (ie. MyMemo := AsaSQL1['a_memo']).
- Ability to bind BLOBS < 32K to stored procedure parameters.
- OpenRead/OpenWrite against BLOB fields caused "Error: Value truncated" - fixed (again thanks Al)
- Auto-increment fields did not work properly with TAsaDataset - fixed
- Other minor TAsaDataset bug fixes.


Release 1.71
------------
- New TAsaSession property OEMConvert to support correct OEM character translation.
- Exceptions are raised only for ERRORS and not for WARNINGS.
- Minor bugfixes.
- Added TAsaDataset support for virtual BookmarkValid, CompareBookmarks and GetCurrentRecord.
- Field type ntBlob is split into two types: ntMemo and ntBlob.

Release 1.7
-----------
- Fixed TAsaDataset calculated fields.
- Minor bugfixes.
- Delphi5 fix; removed the DsgnIntf.dcu standard unit from NativeDB runtime DCU's

Release 1.6
-----------
- New fieldtype ntBoolean, maps to the SA BIT datatype.
- New TAsaDataset property Params.
- New TAsaDataset property ParamCheck.
- New property editors for LibraryFile, LibraryPath and LoginDatabase.
- Oracle components in the ASA version of NativeDB is removed from the "NdbPack" package. 
- Full BLOB support in TAsaDataset. DBImage and DBMemo can now be used.

Release 1.5
-----------
- Added After.. and Before.. connection events to TAsaSession and TOciSession.
- Added After.. and Before.. cursor opening events to TAsaSQL and TOciSQL.
- Many minor TAsaDataset bugfixes.
- New TNativeSQL.ClearNotNull, same as Clear, but do not set the NULL indicator
for empty fields.
- New event TAsaSession.OnServerWait to support ASA interface callbacks.
- Added complete documentation for our Oracle interface. Still this interface
requires its own registered license.
- New TAsaSession.WantRowCounts property.
- New TNativeSQL.RowCount public property. 
- New TNativeSQL.RowPos public propery.
- TAsaDataset bookmarks.
- Fixed problems with TDBLookupComboBox.
- TAsaDataset.Locate overridden from TDataset.Locate.
- New method TNativeSQL.Seek to position cursor at absolute position in the result set.
- New method TNativeSQL.Find to search for a row in the current result set.

Release 1.4
-----------
- C++Builder and OCX support is removed from the Delphi version of NativeDB.
- Added support for SQL Anywhere 5.x and Watcom SQL 4.x.
- New TAsaSession.ServerParams property needed to support SA5 and WSQL 4
- New TAsaSession.ClientParams property needed to support SA5 and WSQL 4
- ServerEngine - moved to ServerParams needed to support SA5 and WSQL 4
- CacheSize - moved to ServerParams needed to support SA5 and WSQL 4
- QuietMode - moved to ServerParams needed to support SA5 and WSQL 4
- NetProtocol - moved to both ServerParams and ClientParams needed to support SA5 and WSQL 4
- ConnectTimout - moved to both ServerParams and ClientParams needed to support SA5 and WSQL 4
- HostName - moved to ClientParams to needed support SA5 and WSQL 4
- Proper NULL handling in both TAsaSQL.Append and TAsaSQL.Modify.
- New TNativeSQL.IsFieldNull method to check if current value of a field is NULL.
- The ability to set a field value to NULL by just assigning a Null variant to the field.
- NULL support also added to the Oracle interface (TOciSQL).
- New PUBLIC function function TNativeSQL.CanModify.
- Support for Delphi 5

Release 1.3
-----------
- Trial version/demo allows to run without Delphi, but shows annoing messagebox.
- TNativeSession.ConnectionType is removed. No need for it anymore.
- New TAsaSession.Stop method.
- New TAsaSQL.Explain method.
- Improved error messages.
- TAsaSession.IPHostName renamed to TAsaSession.HostName, because it works
for IPX as well as TCP/IP.
- New TAsaSession.GetOption method.
- New TAsaSession.SetOption method.
- Default ASA engine engine cache sized changed to 4096K.
- New TNativeSession property LibraryFile.
- New TAsaSession property ServerEngine, defaults to ASA6 personal engine "dbeng6.exe"
- Added support for ASA runtime license version.
- Changed TAsaSession ServerType. New values are (stClient, stServer, stWorkgroup);
- stServer in comination with the new ServerEngine property , replaces the old stPersonal.
- Old stNetClient is the same as stClient. 
- Old stNetServer is the same as stServer with ServerEngine = "dbsrv6.exe". 
- Old stPersonal is the same as stServer with ServerEngine = "dbeng6.exe". 
- TAsaTool class removed. Sybase recommends to use the utility executables instead.
Use Win32 CreateProcess or ShellExecute to executes the ASA db-tools from your app.
- Minor changes to TAsaSession.TransIsolation enumerated types.
- WantExceptions works with OpenRead/OpenWrite too.
- Property WantExceptions added to TAsaSession.
- New TAsaSession.Backup method, supports ASA online backups.
- New TAsaSession.OnBackup event. Useful for displaying progress bar while backup runs.
- New TNativeSQL.GetFieldSize method.
- New TNativeSQL.GetFieldNulls method, returns true if field allow NULL values.
- New TNativeSQL.ActiveBuffer method.
- New TNativeSQL.ActiveBufferSize method.
- Documentation updates, reflecting all the new stuff.
- Added new component TAsaDataSet to support Delphi's dataaware controls, including QuickReport.
(see NdbAsaDB unit)

Release 1.2
-----------
- Documentation updates, reflecting all the new stuff.
- New TAsaSession property CacheSize, it controls ASA's -c switch.
- New TAsaSession property ConnectTimout, it controls ASA's "TO" switch.
- RowsProcessed was reset when called the second time.
- Handled Threadsafety option not supported by Oracle 7.2

Release 1.1
-----------
- TAsaSession didn't commit transactions when disconnecting in non-Autocommit mode.
- property RowsProcessed added to TNativeSQL.
- TNativeSQL.Session property was not published
- Changed default property value of TNativeSQL.WantExceptions to false.
- Added housekeeping features between TNativeSession and TNativeSQL, 
  to make sure open cursors are properly closed before disconnecting.
  We got a "(S1109) Invalid cursor position" in OpenRead or OpenWrite after
  a disconnect/connect.

Release 1.0
-----------
- First release

