SQLDirect组件库
For
Delphi 4, 5, 6, 7, 8, 9 (2005), 10 (2006), 2007
和C++ Builder 4, 5, 6, 2006, 2007
ver. 5.2
用户指南
Introduction
Thank You for using SQLDirect Component Library. I hope that it will facilitate to You development and distribution of Your applications.
About SQLDirect
SQLDirect Component Library was written in Delphi by Yuri Sheino. It is 100% native Delphi components.
SQLDirect Component Library - set of non-visual Delphi components. These components expand possibilities Delphi Visual Component Library, give you access to data on SQL-servers around BDE or ODBC (if you wish) and support all data-aware components. Now library supports the following SQL-servers: Centura SQLBase (version 6 and 7), Oracle Server (7.2+), IBM DB2 Database, Informix, Interbase, MySQL, PostgreSQL, Microsoft SQL Server, Sybase Adaptive Server Enterprise, Adaptive Server Anywhere (through Open-Client Library), ODBC and OLEDB. Hereafter this list will extend. For access to databases the native programming interface (API) of servers is used only. It means, that access to SQLBase-databases needs SQLBase Client for Windows, to the databases on Oracle - Oracle SQL*Net, to the DB2 databases - Client Application Enabler, to the databases on SQL Server - SQL Server Client and to the Sybase databases - Sybase Open Client libraries.
The previous history SQLDirect Library began in times Delphi 1, as the object interface to the SQLBase server of the company Gupta (at that time). I wanted to develop my application on Delphi, but I did not want to use ODBC-drivers and distribute BDE+ODBC with my applications. I did not have choice therefore library should appear. Later necessity of carry of applications written using of the library has appeared to transfer on the more high-power and reliable Oracle server. Owing to what there was a processing of realization of classes for support of several kinds of database access interfaces. The appearance of the
Delphi 3 has enabled to make data-aware components and easier in use library. Therefore SQLDirect Component Library has appeared…
Basic features
Using of SQLDirect Component Library gives you following advantages:
ü use 32-bit native API of the supported SQL servers: Centura SQLBase Server 6(+),Oracle Server 7.2(+) with SQL*Net 2.2(+), IBM DB2 Database, Firebird, Interbase, Microsoft SQL Server 6.5, MySQL 3.23(+), PostgreSQL 7.1, Sybase ASE and ASA, Informix, ODBC and OLEDB datasources;
ü no distributing, installing and configuring the BDE and ODBC;
ü give to you simultaneous access to any supported servers;
ü you can use Delphi 4, 5, 6, 7, 8, 9 (2005) or C++ Builder 4, 5, 6 version (Pro and above) to develop Client/Server applications;
ü query with an updatable result set
ü table component
ü script component
ü thread safe;
ü BLOB-fields;
ü stored procedure support (with multiple result set for some servers);
ü bi- and uni-directional result sets;
ü cached updates;
ü filtering records;
ü support all data-aware components (including InfoPower);
ü using images stored by Centura SqlWindows(or Team Developer);
ü interfaces (public methods and properties) of SQLDirect components is compatible with standard BDE data access components (TSession, TDatabase, TQuery ..).
Note for Oracle, the SQLDirect Library uses deferred mode of statement execution for minimizing network traffic and piecewise insert, update and fetch of long BLOB-fields, it is supported only by Oracle Server 7.2(+) and Oracle SQL*Net 2.2(+).
Thread safety is supported (and is documented) by the following software: Oracle SQL*Net 2.3 or later, SQLBase Ver. 7, Microsoft SQL Server, IBM DB2, Interbase 6, MySQL, Sybase OpenClient ver. 11.1 or above and ODBC. SQLBase Ver.6 does not support thread safety!

Licensing issues
For every developer you need to purchase a SQLDirect Standard or SQLDirect Professional license. The registered users are ensured with a free support by e-mail and all updates within 2 years from the purchase.
You can develop and distribute applications using the registered SQLDirect Component Library without any royalties. You can not distribute registered (original or modified) SQLDirect Component Library.
Ordering
If you like SQLDirect Library and you want to receive the registered version you should purchase SQLDirect Std or SQLDirect Pro license.
Version of library
Price, $US
Online Registration
SQLDirect Std (w/o source)
149
http://www.sqldirect-soft.com/ordering.html
SQLDirect Pro (with source)
399
SQLDirect Pro Upgrade (Std -> Pro)
279
2-year support prolongation
50
All prices do not include VAT(value added tax), which is applied to customers from EU.

Getting Started
ATTENTION! For work with the SQLDirect Component Library you need to install appropriate 32-bit client software of the corresponding database server. See below for more information.
Installation
Component install
You need to know the password for an installation of the registered version. After copying files you have to install the SQLDirect components in Delphi component palette. Select the following menu item Component->Install Packages (Installed .NET Components), then press Add button, find and select the corresponding library DclSql40.bpl, DclSql45.bpl, DclSql50.bpl, DclSql60.bpl, DclSql70.bpl, DclSql80N.dll, DclSql90N.dll or DclSql90.bpl, DclSql100N.dll or DclSql100.bpl from the SQLDirect directory.
Attention! DclSql50.bpl and DclSql60.bpl is a design-time packages for Delphi/C++Builder 5 and Delphi/C++Builder 6. These packages are located in SqlDir/Delphi5 and SqlDir/Delphi6 directories for accordingly C++Builder 5 and C++Builder 6.
Be sure to include the SQLDirect library path in Library Path to avoid "File not found" errors at compile time.
This is found in the Environment Options for the project on the Library tab.
In Delphi 8, 9 and 10 you need to add the following path <%SYSTEMROOT%/System32> in Assembly Search Paths of Installed .NET Components dialog.
Since v.5.1 installation script can apply these changes automatically, when you select these options.
The SQLDirect runtime packages (SqlDir40.bpl, SqlDir45.bpl, SqlDir50.bpl, SqlDir60.bpl, SqlDir70.bpl, SqlDir80N.dll, SqlDir90N.dll and SqlDir90.bpl, SqlDir100N.dll and SqlDir100.bpl) and helper SqlDirHN.dll are installed into the Windows system directory (for instance, WIN95/SYSTEM or WINNT/SYSTEM32). They can be distributed with your application, which compiled with the package using option.
BDE application conversion
If you want to convert existing applications using BDE-components without rewriting them, you need to modify pas-files and dfm-files in your project. First, you need to open dfm-file (as text) or pas-file and replace a type of BDE-components with a type of appropriate SQLDirect-components. For example, it is necessary to replace TDatabase on TSDDatabase, TQuery on TSDQuery etc. In the uses clause of pas-files you need to replace SDEngine unit on DBTables unit.
InfoPower support
If you want to use Woll2Woll InfoPower (ver. 3.01 or above) components with SQLDirect then you need to install TSDwwQuery component into any packages (for instance, SQLDirect or User Components - dclusr?0.dpk). For install this component select menu item Component->Install Component in Delphi IDE, then find and select the following file SDwwData.pas in SQLDirect directory.
NOTE: If you include TSDwwQuery component into the SQLDirect package, it'll be depend from InfoPower package. And all your application dependent from SQLDirect package will depend from InfoPower package, which is more 2-3 times than SQLDirect package. I think better include this component into run-time package, which don't distribute with your applications. Therefore this component will compile and link with your application, when you need it.
Database Client Software
In the following table you can view what software is need to install for connecting to the specified database server.
Database Server
Client software
Oracle
Oracle SQL*Net 2.2 or later
Centura SQLBase
SQLBase Client for Windows
MS SQL Server
Microsoft SQL Client
Sybase ASE or ASA
Sybase Open Client libraries
IBM DB2
IBM Client Application Enabler 5.2 or later
Informix Server
Informix Connect 2.8 or later
Interbase Server
Interbase Client
ODBC
ODBC Manager + ODBC drivers (+ Client software)
OLEDB
MDAC 2.6 or later (Microsoft Data Access Components)
MySQL Server
MySQL 3.23 client (libmySQL.dll)
PostgreSQL
PostgreSQL 7.1 client (libpq.dll)
SQLAnywhere connect (OpenClient)
Adaptive Server Anywhere requires the setting up as an Open Server for connect through Open Client library (see Adaptive Server Anywhere User's Guide, Part 5 Adaptive Server Family, Chapter 26 Adaptive Server Anywhere as an Open Server).
SQLAnywhere 5 provided support for Open Client application through separate Open Server Gateway. However in difference from the previous version Adaptive Server Anywhere 6 and above is part of the Sybase Adaptive Server Family. It means that ASA v.6+ can appear to client applications as Open Server and have native support for Sybase Open Client programming interface.
Set up Adaptive Server Anywhere v.6+ for connect through Open Client:
1. Install Adaptive Server Anywhere software on a server computer
2. Start up network (dbsrv6.exe) or personal (dbeng6.exe) server as Open Server (only through TCP/IP, default port - 2638).
For example:
dbsrv6.exe -x tcpip asademo.db
dbsrv6.exe -x tcpip{ServerPort=2639} asademo.db
dbsrv6.exe -x tcpip{ServerPort=2639} -n asasrv1 asademo.db
3. Install Open Client components on a client computer
4. Add and configure Open Server entry using DSEdit utility
For example, for Open Server with name ASASRV1:
Attributes
Value
Server Entry Version
1
Server Name
ASASRV1
Server Service
SQL Server
Server Status
4 Unknown
Server Address
NLWNSCK - host1,2639
where
ASASRV1 - server name for Open Client application
host - computer name:
2639 - port number for Open Server
SQLAnywhere connect (ODBC driver)
You can distribute your application, which works with Anywhere server, with one Dbodbc?.dll only (where ‘?’ is the used version, for example, 7 or 8).
In this case you necessary to use the following database parameter and the similar value of RemoteDatabase property:
SDDatabase1.Params.Values[‘ODBC API Library’] := ‘dbodbc7.dll’
SDDatabase1.RemoteDatabase := ‘UID=dba;PWD=sql;ENG=asasrv;DBF=c:// asa//asademo.db’;
Look the complete description of parameters in RemoteDatabase property in Anywhere Reference.

File description
File name
Description
DCLSQL30.DPL / DCLSQL35.BPL
DCLSQL40.BPL / DCLSQL45.BPL
DCLSQL50.BPL
DCLSQL60.BPL
DCLSQL70.BPL
DCLSQL80N.DLL
DCLSQL90N.DLL
DCLSQL90.BPL
DCLSQL100N.DLL
DCLSQL100.BPL
SQLDirect design-time packages for
Delphi 3 & C++Builder 3
Delphi 4 & C++Builder 4
Delphi 5 & C++Builder 5
Delphi 6 & C++Builder 6
Delphi 7
Delphi 8 for Microsoft .NET
Delphi 9 (2005) for Microsoft .NET
Delphi 9 (2005) for Win32
Delphi 10 (2006) for Microsoft .NET
Delphi 2006/2007 & C++Builder 2006 for Win32
SQLDIR30.DPL / SQLDIR35.BPL
SQLDIR40.BPL / SQLDIR45.BPL
SQLDIR50.BPL
SQLDIR60.BPL
SQLDIR70.BPL
SQLDIR80N.DLL
SQLDIR90N.DLL
SQLDIR90.BPL
SQLDIR100N.DLL
SQLDIR100.BPL
SQLDirect runtime packages for
Delphi 3 & C++Builder 3
Delphi 4 & C++Builder 4
Delphi 5 & C++Builder 5
Delphi 6 & C++Builder 6
Delphi 7
Delphi 8 for Microsoft .NET
Delphi 9 (2005) for Microsoft .NET
Delphi 9 (2005) for Win32
Delphi 10 (2006) for Microsoft .NET
Delphi 2006/2007 & C++Builder 2006 for Win32
SQLDIRHN.DLL
Helper library for SQLDirect for Delphi 8, 9, 10 for .NET. It is required to distribute this file with Delphi 8, 9 and 10 for .NET application, which work with MS SQLServer and Oracle
SQLDIR*.DCP/ SQLDIR??N.DCPIL
Package header for SQLDirect runtime package library
SDCONSTS
Constant unit
SDCOMMON
Common procedures and objects, which are not depend from SDEngine code
SDENGINE
SQLDirect core: public components
SDCSB
SQLBase support unit
SDCSBSRV
SQLBase server component
SDCTBLOB
Centura SqlWindows/Team Developer image support unit
SDDB2
IBM DB2 support unit
SDFIB
Firebird support unit
SDINF
Informix support unit
SDINT
Interbase support unit
SDMSS
MS SQL Server support unit
SDMYSQL
MySQL support unit
SDODBC
ODBC support unit
SDOLEDB
OLEDB support unit
SDORA
Oracle support unit
SDPGSQL
PostgreSQL support unit
SDSYB
Sybase Server support unit
SDSRVLOG
server login dialog
SdwwData
InfoPower support unit
Demos
By default the demo-programs will be installed in the directory "../SQLDIR/DEMOS". It is intended for demonstrating functionality and methods of use of SQLDirect-components. In the DEMOS directory you find the following directories: QueryUpd, Threads.
QueryUpd
The sample queries and updates data in the database.
In the project directory you can view the following project files: QueryUpd.dpr - for Delphi, QueryUp3.bpr - for C++Builder3, QueryUp4.bpr - for C++Builder 4, QueryUp5.bpr - for C++Builder 5 and QueryUp6.bpr - for C++Builder 6.
After start of the program you can be connected to any database on the appropriate server. Then from the main form of application you can open the dialog for executing of any query from your database and see results of the query. In the other dialog you can see an example of using cached updates with SQLDirect-components. The table (TEST_PERSON) is necessary for the given demonstrating, which you can create and if necessary to delete from the main form of the program. The following components TSDDatabase, TSDQuery, TSDUpdateSQL are used here. In the source you can look use of appropriate properties and events of components for realization of cached updates.
Threads
This is a sample of multithreaded application.
In the project directory you can view the following project files: Threads.dpr - for Delphi, Threads3.bpr - for C++Builder3 and Threads4.bpr - for C++Builder 4.
You need to create the tables by pressing the button "Create Table" before testing. It's create the following tables: TEST_THRD1 and TEST_THRD2. By pressing the button "Insert Data" you can insert rows in the every tables at the same time. Quantity of inserted rows is defined by default 1000 in the edit box. You can see the process of row insertion by pressing the button "Select Data", which starts 2 thread for query execution.
ATTENTION! For creating and deleting of the test tables in the database it is necessary to you to have the appropriate rights!

SQLDirect Reference
The SQLDirect Component Library consists of a set of non-visual components which are encapsulates access to a databases on SQL-servers.
TSDSession
The component controls connections to databases that are provided by TSDDatabase component. The default session component is automatically created in any database application using SQLDirect Library. The default session component is accessible through the global variable Session in the SDEngine unit.
It is recommended to use an additional session component per each thread in the multi-threaded applications have to create and maintain.
Methods
Close
Declaration
procedure Close
Purpose
Closes all active database connections, i.e. this method calls the Close method for persistent database components and frees temporary database components. It’s possible to set Active property to False to close session.
CloseDatabase
Declaration
procedure CloseDatabase(Database: TSDDatabase)
Purpose
Closes a database connection or closes and frees temporary database connection. If the KeepConnections property of a database component is equal True that connection is not closed.
Create
Declaration
constructor Create(AOwner: TComponent)
Purpose
Create an instance of a TSDSession component. Default session component is created automatically for application using SQLDirect Library. Now you do not have necessity to create instances of the session component.
Destroy
Declaration
destructor Destroy
Purpose
Destroys of TSDSession component. Default session component is destroyed automatically when application is closed. The destructor closes all active database connections and frees all database components associated with the session.
FindDatabase
Declaration
function FindDatabase(const DatabaseName: string): TSDDatabase
Purpose
Searches and returns a database component with the specific name in the list of the session component. If in the list exists database component with a property DatabaseName equal DatabaseName, the pointer to it returns, else function returns nil.
GetDatabaseNames
Declaration
procedure GetDatabaseNames(List: TStrings)
Purpose
The procedure populates List with the names of database components, which are known to session.
GetStoredProcNames
Declaration
procedure GetStoredProcNames(const DatabaseName: string; List: TStrings)
Purpose
The procedure populates List with the names of stored procedures, which are accessible through specific database connection. The procedure searches database connection with the specific DatabaseName and uses it for retrieve names of stored procedure. List is a string object, created and maintenance by application, which has requested the stored procedure names.
GetFieldNames
Declaration
procedure GetFieldNames(const DatabaseName, TableName: string; List: TStrings)
Purpose
The procedure populates List with the field names of the table, which are accessible through specific database connection. The procedure searches database connection with the specific DatabaseName and uses it for retrieve field names of the table, which is specified by TableName parameter. List is a string object, created and maintenance by application, which has requested the list of the fields.
GetTableNames
Declaration
procedure GetTableNames (const DatabaseName, Pattern: string; SystemTables: Boolean; List: TStrings)
Purpose
The procedure populates List with the names of tables, which are accessible through specific database connection. The procedure searches database connection with the specific DatabaseName and uses it for retrieve names of the tables. List is a string object, created and maintenance by application, which has requested the table names.
Set SystemTables parameter to True to return user and system tables, else the method will return only user tables.
OpenDatabase
Declaration
function OpenDatabase(const DatabaseName: string): TSDDatabase
Purpose
Opens database connection if it is exists or creates temporary database component and opens it. The temporary database component has properties DatabaseName and RemoteDatabase equal to parameter DatabaseName.
Properties
Active
Declaration
property Active: Boolean
Purpose
Displays a status of a session component. If Active is equal False, it is meaning there are no open database connections and datasets associated with the session. Also setting Active to False closes all open datasets and disconnects database components associated with the session.
AutoSessionName
Declaration
property AutoSessionName: Boolean
Purpose
Indicates whether or not a unique session name is automatically generated for session instance. If AutoSessionName is False then the application must set the SessionName property for the session component. In case of the property is True then SessionName will be automatically generated.
DatabaseCount
Declaration
property DatabaseCount: Integer
Purpose
Returns number of database components currently associated with the session.
Databases
Declaration
property Databases[Index: Integer]: TSDDatabase
Purpose
Provides the indexed access to database components currently associated with the session.
KeepConnections
Declaration
property KeepConnections: Boolean
Purpose
Determines value of the KeepConnections property of the temporary database components created in the session context.
SessionName
Declaration
property SessionName: string
Purpose
Each session must have a unique session name, which is used by database components for linking with the session. The name can be generated by the TSDSession component automatically (see AutoSessionName property)
SQLHourGlass
Declaration
property SQLHourGlass: Boolean
Purpose
Determines will whether or not be mouse cursor changed to hourglass during the database operations.
SQLWaitCursor
Declaration
property SQLWaitCursor: TCursor
Purpose
This property of a default session component provides a cursor type, which is used during database operations, when SQLHourGlass is equal True.
TSDSessionList
The component contains a list of all TSDSession components. The default session list component is automatically created in any database application using SQLDirect Library. The default session list component is accessible through the global variable Sessions in the SDEngine unit.
Methods
FindDatabase
Declaration
function FindDatabase(const DatabaseName: string): TSDDatabase
Purpose
Finds and returns a database instance by it’s DatabaseName property. If the database component with the associated DatabaseName property is not exist, then the function returns an empty pointer.
FindSession
Declaration
function FindSession(const SessionName: string): TSDSession
Purpose
Finds and returns a session instance by it’s SessionName property. If the session component with the associated SessionName property is not exist, then the function returns an empty pointer.
GetSessionNames
Declaration
procedure GetSessionNames(List: TStrings)
Purpose
Populates a sting list with the names of all created and accessible session components. The List parameter is maintained by the application. Names are returned the methods correspond to the SessionName properties of all available sessions.
OpenSession
Declaration
function OpenSession(const SessionName: string): TSDSession
Purpose
Makes the specified session with associated SessionName property active. If the session is not exist, then the method creates one with the name specified by SessionName parameter and makes it active.
In either case, OpenSession returns an instance of TSDSession component.
Properties
Count
Declaration
property Count: Integer
Purpose
Indicates the number of sessions in an application.
List
Declaration
property List[const SessionName: string]: TSDSession
Purpose
Returns a specified by SessionName session component.
SessionName
Declaration
property Sessions[Index: Integer]: TSDSession
Purpose
Lists all created by an application session components in the session list.
TSDDatabase
Each component instance manages a database connection to a specific server, and any queries, stored procedure, etc., needs to identify which TSDDatabase instance they are operating on. This design allows the user e.g. to change the login process in one central location, and having it apply to (for example) several queries. The component also plays an important role in transaction control.
Multi-threaded applications have to create and maintain one additional database component for each simultaneous connection to a database.
Methods
ApplyUpdates
Declaration
procedure ApplyUpdates(const DataSets: array of TSDDataSet)
Purpose
Transfers updated data from the local cache of the specified dataset components DataSets to the remote database. Applying updates is two-phase process. The first phase is the writing of modified data to the database. The second phase is clearing the local update caches of the dataset components. The procedure executes the following operations:
1. Starts transaction
2. Writes the changed data
3. Commits the changes, if the database write was successful, else rollbacks the modifications.
4. In case of success the cached update buffers are cleared.
Close
Declaration
procedure Close
Purpose
Closes all open datasets associated with the database component and disconnects from the remote database.
CloseDataSets
Declaration
procedure CloseDataSets
Purpose
Closes all datasets associated with the database components without disconnecting from the remote database.
Commit
Declaration
procedure Commit
Purpose
Executes commit operation on the remote database. All changed of data made in the current transaction are fixed.
Create
Declaration
constructor Create(AOwner: TComponent)
Purpose
Creates an instance of a TSDDatabase component. The constructor adds this database component to the list of the default session component, creates an empty list of dataset components, creates an empty list of parameters and sets default values for the properties.
Destroy
Declaration
destructor Destroy
Purpose
Before clearing of an instance the database connection is closed, deletes the list of dataset components and the list of parameters and removes itself from the list of the default session components.
ForceClose
Declaration
procedure ForceClose
Purpose
Forces to disconnect from the remote database even if the call fails, for example, in case of network problems.
GetFieldNames
Declaration
procedure GetFieldNames(const TableName: string; List: TStrings)
Purpose
The procedure populates List with the field names of the table, which is specified by TableName parameter. List is a string object, created and maintenance by application, which has requested the list of the fields.
GetTableNames
Declaration
procedure GetTableNames(const Pattern: string; SystemTables: Boolean; List: TStrings)
Purpose
The procedure populates List with the names of tables using Pattern parameter. If SystemTables is True only the system tables are returned in the List, else all tables that match Pattern. If Pattern is empty, then all tables are returned. List is a string object, created and maintenance by application, which has requested the table names.
GetSchemaInfo
Declaration
TSDSchemaType = (stTables, stSysTables, stProcedures, stColumns,
stProcedureParams, stIndexes, stPackages,
stPrimaryKeys, stForeignKeys);
function GetSchemaInfo(ASchemaType: TSDSchemaType; AObjectName: string): TDataSet
Purpose
Creates and returns an instance of opened TDataSet component, which contain metadata as a result set. After using the returned dataset, application has to destroy it. Note, AObjectName value has to have a valid case for case-sensitive database.
Open
Declaration
procedure Open
Purpose
Connects to the remote database. If the OnLogin event of the database component exists, it is executed. Setting the Connected property to True will also call this procedure.
Rollback
Declaration
procedure Rollback
Purpose
Cancels all deletion, insertion and updates for the current transaction. The current transaction is the last transaction started by calling StartTransaction. If InTransaction property is False that exception is raised.
StartTransaction
Declaration
procedure StartTransaction
Purpose
Begins a new transaction in the remote database. Before calling StartTransaction, application must check the InTransaction property. If the InTransaction property is True the transaction is already active, and calling StartTransaction would raise an exception.
StopWaitReconnect
Declaration
procedure StopWaitReconnect
Purpose
Stops the timer, which was started after connection was lost.
TestConnected
Declaration
function TestConnected: Boolean
Purpose
Checks a connection status and returns True, if the current connection is active. The method returns False, if the connection is disactivated or lost. In the last case, all active datasets are closed without errors, which are possible, when a server connection is lost.
ValidateName
Declaration
procedure ValidateName(const Name: string)
Purpose
Validates uniqueness of a database name in the default session. If the name is not unique an exception is raised. You do not normally need to call this method.
WaitReconnect
Declaration
procedure WaitReconnect;
Purpose
Startup timer, which is used to reconnect through ReconnectTimeout, when connection was lost by some reason.
Properties
ClientMajor, ClientMinor
Declaration
property ClientMajor: Word
property ClientMinor: Word
Purpose
Indicates major and minor versions of the client software used for the active connection. For example, with Microsoft SQL Server 6.5, the properties will equal the following values: ClientMajor = 6 and ClientMinor =5.
Connected
Declaration
property Connected: Boolean
Purpose
Indicated whether or not a database connection is active. Setting the Connected property to True involves opening a database connection. To close a database connection set this property to False. The default value of the property is False.
DatabaseName
Declaration
property DatabaseName: string
Purpose
Specifies a name associated with this database component in the application.
DataSetCount
Declaration
property DataSetCount: Integer
Purpose
Number of dataset components associated with this database component.
DataSets
Declaration
property DataSets[Index: Integer]: TSDDataSet
Purpose
Provides an indexed access to all datasets associated with the database component.
DesignOptions
Declaration
TSDDesignDBOption=(ddoIsDefaultDatabase, ddoStoreConnected);
TSDDesignDBOptions = set of TSDDesignDBOption;
property DesignOptions: TSDDesignDBOptions
Purpose
If ddoIsDefaultDatabase value is checked then DatabaseName of the created datasets will be set automatically in design time.
If ddoStoreConnected value is not checked, then Connected property of the database component is not stored.
IdleTimeOut
Declaration
property IdleTimeOut: Integer
Purpose
Determines the amount of time, in milliseconds, that passes before the connection will be dropped automatically, if it was not used in this period. The feature is turn off, if the property is equal zero.
Note: When IdleTimeOut property is not equal zero, the database component uses an additional thread to check its activity. If IdleTimeOut property is equal zero, then the thread is not created.
InTransaction
Declaration
property InTransaction: Boolean
Purpose
Indicates whether a database transaction is active or not. Calling StartTransaction sets InTransaction property to True. Calling Commit or Rollback sets InTransaction to False.
IsSQLBased
Declaration
property IsSQLBased: Boolean
Purpose
Indicates connection to an SQL-server. The property is declared for compatibility with TBDEDataSet component.
Handle
Declaration
TSDHandleRec = record
SrvType: Integer;
SrvInfo: PSDCursor;
end;
PSDHandleRec = ^TSDHandleRec;
property Handle: PSDHandleRec
Purpose
The pointer to a connection record, which contains a reference to database handle dependent from a type of the database server. Use Handle property only to make direct calls of server API or assign the database connection to other database component, that is useful in case of use one server cursor by some database component, for example, in an application and dynamic library.
The TSDHandleRec record specifies a connection information: the used server type and the required handles.
The possible record value depending on server type:
ServerType
SrvType value = Ord(TISqlServerType)
SrvInfo type
stDB2, Informix, ODBC
4, 5, 6
POdbcSrvInfo
stFirebird
8
PIntSrvInfo
stInterbase
7
PIntSrvInfo
stMySQL
9
PMySrvInfo
stOLEDB
11
Not implemented
stOracle
1
POraSrvInfo or POra8SrvInfo
stPostgreSQL
10
PPgSrvInfo
stSQLBase
0
PCsbSrvInfo
stSQLServer
2
PMssSrvInfo
stSybase
3
PSybConnection
KeepConnections
Declaration
property KeepConnections: Boolean
Purpose
Determines whether connections remain active when there are no open associated dataset components. Default value of the property is True.
LoginPrompt
Declaration
property LoginPrompt: Boolean
Purpose
Indicates whether or not to display a standard login dialog when opening database connection. By default, LoginPrompt is True. If the property is True the standard login dialog opens, or the OnLogin event is called if one is provided for the application. If the property is False then the parameters ('USER NAME' and 'PASSWORD') from the Params property are used.
Params
Declaration
property Params: TStrings
Purpose
Contains database connection parameters. Use Params to examine and specify a database connection parameters such as user name ('USER NAME'), password ('PASSWORD') or other.
The parameters could be assigned different ways:
Db.Params.Values[szUSERNAME] := ‘user’;
Db.Params.Add(‘USER NAME=user’);
In the 2-nd case should be no spaces present before the equal sign.
Below you can see descriptions of the other accessible parameters. If a column ‘Note’ is empty, then the parameter is applied to all supported database server.
Value
Constants (SDConsts unit)
Description
Note
USER NAME
szUSERNAME
Default user name for login
PASSWORD
szPASSWORD
Default password for login
AUTOCOMMIT
szAUTOCOMMIT
Whether to use auto-commit, else default behaviour will be used, which differs for the each server
APPLICATION NAME
szAPPNAME
Application name, which will be sent to server
Only for MSSQL and Sybase
HOST NAME
szHOSTNAME
Workstation name, which will be sent to server
Only for MSSQL and Sybase
ANSI NULLS
szANSINULLS
Where to set ANSI(SQL92) compliant behaviour of comparison operators with null values
Only for MSSQL
ANSI TO OEM
szANSITOOEM
Set or clear DBANSItoOEM, DBOEMtoANSI options to make conversion between client and server.
Only for MSSQL
BYTE16 AS GUID
szBYTE16ASGUID
binary(16) and GUID columns will be considered as TGuidField. It’s required, because DB-Library returns both datatypes as binary.
Only for MSSQL
BLOB PIECE SIZE
szBLOBPIECESIZE
Size of read/write blob piece, default value is $7FF0 bytes
Only for SQLBase, ODBC, OLEDB, Oracle, Sybase
CACHED UPDATES
szCACHEDUPDATES
It has default value of CachedUpdates properties, which are created at run-time or loaded from form file. It can be equal False for compatibility with BDE components. Default value is True.
COMMAND TIMEOUT
szCMDTIMEOUT
Number of seconds to wait for any request on the connection to complete
Only for MSSQL, ODBC, OLEDB, SQLBase, Sybase
COMPRESSED PROTOCOL
szCOMPRESSEDPROT
Whether to use the compressed client/server protocol for, by default it's True
Only for MySQL
DATABASE NAME
szDATABASENAME
The parameter’s value is used, when RemoteDatabase does not specify a database value
Only for MSSQL, OLEDB, MySQL, PostgreSQL, Sybase
DETACH ON FETCHALL
szDETACHONFETCHALL
Detach the used cursor, when all records are fetched
FETCH ALL ON OPEN
szFETCHALLONOPEN
When it is True, then FetchAll will be called automatically right after Open call
EMPTY STRING AS NULL
szEMPTYSTRASNULL
Empty string ('') is treated as NULL for parameter's values. By default it is False
Only for Sybase
ENABLE BCD
szENABLEBCD
Converts NUMERIC database type into BCD field in an application
Only for Oracle, Interbase, Sybase
ENABLE INTEGERS
szENABLEINTS
Converts NUMERIC database type into integer field in an application
Only for Oracle, Interbase
ENABLE MONEY
szENABLEMONEY
Converts NUMERIC database field with scale (1-4) into TCurrencyField in an application
Only for MySQL
ENABLE TIMESTAMP
szENABLETIMESTAMP
Whethere to use TSQLTimeStampField (ftTimestamp). Default value is False.
Only for DB2, ODBC. DB2 TIMESTAMP type has microseconds value(6 digits)
ENCRYPTION
szENCRYPTION
Whether to use an encrypted password security handshaking, by default it is equal false
Only for Sybase
FIELD REQUIRED
szFIELDREQUIRED
Value of Required property of all TField
FORCE OCI7
szFORCEOCI7
force to use OCI7 (SQL*Net 2.x - Oracle7 interface) to access Oracle server
Only for Oracle
LOCAL CHARSET
szLOCALCHARSET
Sets character set for a client attachment
Only for Interbase, Firebird, MySQL, PosgreSQL
IB/FB-database has to be created with a <DEFAULT CHARACTER SET> clause
LOGIN TIMEOUT
szLOGINTIMEOUT
Number of seconds to wait for a login request
Only for DB2, Informix, ODBC, OLEDB, MSSQL, MySQL, Sybase
MAX BLOB SIZE
szMAXBLOBSIZE
Size of blob parameter is restricted. Default value is 2GB
Only ODBC with DB2 host
MAX CURSORS
szMAXCURSORS
Maximum number of simultaneously open cursors
Only for MSSQL and Sybase
MAXCHARPARAMLEN
szMAXCHARPARAMLEN
defines maximum size of a buffer for output string parameters, by default, it's equal 255
MAXFIELDNAMELEN
szMAXFIELDNAMELEN
Maximum length of field names. Default value is 50.
It’s added for compatibility with BDE, which returns only 30 characters of the field name
Only for Oracle
MAX STRING SIZE
szMAXSTRINGSIZE
This is a limit of a string field (TStringField) size, larger fields will be considered as blob (TMemoField), when VARCHAR(>255) column is read
Only for Firebird, Interbase, ODBC, OLEDB, Oracle, Sybase
NEW PASSWORD
szNEWPASSWORD
This value is used, when a server returns 'Password expired' error
Only for Oracle8
QUOTE IDENTIFIER
szQUOTE_IDENT
Force to use quoted (delimited) identifiers for automatically generated statements of a live querys and a table component (default, False)
QUOTED IDENTIFIER
szQUOTEDIDENT
Whether to use of quoted identifiers
Only for MSSQL and Sybase
PREFETCH ROWS
szPREFETCHROWS
Number of rows to be prefetched to minimize network trips (Oracle8 info: prefetching is not in effect if SELECT contains LONG columns)
Only for DB2, Informix, ODBC, OLEDB, Oracle8, MySQL
ROLE NAME
szROLENAME
The string defines the role, which an user will accept at connect time
Only for Interbase and Oracle (SYSDBA/SYSOPER roles)
SERVER CURSOR
szSERVERCURSOR
Whether use server cursors, default is False
Only DB2, Informix, OLEDB, ODBC
SERVER PORT
szSERVERPORT
Specifies port number of the server for TCP/IP connection
Only for MySQL, PostgreSQL
SINGLE CONNECTION
szSINGLECONN
Whether to use a single database process/connection (default, False)
Only for ODBC, OLEDB, MSSQL and Sybase
SKIP PREPARE
szSKIPPREPARE
When it is True, then a command preparation will be excluded, even if Prepare method is called. Default value is False
Only for MS SQLServer OLEDB provider
SQL DIALECT
szSQLDIALECT
Sets SQL Dialect(1,2,3) for a client
Only for Interbase
SQLWAIT TIMEOUT
szSQLWaitTimeout
Allow to change value of SQLWaitTimeout public variable. It can have numeric (in milliseconds) or boolean values. Default value is False.
STRICT LIVE QUERY
szSTRICTLIVEQUERY
Allows more than 1 table in select-list of a live query, when it is equal False. In this case it will try to update the 1-st table. This option is not recommended. Default value is True.
STRICT UPDATE
szSTRICTUPDATE
Whether to check number of affected rows in process of ApplyUpdates (default value is True)
STRICT UPDATE MODE
szSTRICTUPDATEMODE
when False, live query will be opened in upWhereAll mode, when the required table does not have a primary keys or unique indexes, even actually UpdateMode <> upWhereAll (default is True)
TDS PACKET SIZE
szTDSPACKETSIZE
Set size for TDS packet. If a server does not support a defined size “Login failed” is raised at connect-time
Only for OLEDB (MSSQL), Sybase
TRANSACTION LOGGING
szTRANSLOGGING
When it is equal FALSE, then a transaction logging is not performed, i.e. rollback is impossible
Only for SQLBase
TRANSACTION NOWAIT
szTRANSNOWAIT
Whether to use nowait transaction. Default value is False.
Only for Interbase, Firebird
RTRIM CHAR OUTPUT
szRTRIMCHAROUTPUT
Whether to trim trailing spaces in the output of fixed CHAR field type (default, True)
Only for DB2, Informix, Interbase, MySQL, Oracle, ODBC, PostgreSQL and Sybase
UNICODE STRING
szUNICODESTRING
Whether to support unicode string through TWideStringField. Default value is True.
XA CONNECTION
szXACONN
Whether to connect to TM service, which is equal RemoteDatabase value (default, False)
Only for Oracle8i
XXX API LIBRARY
szAPILIBRARY_FMT
Provides an interface library for the different servers, where XXX server type, for example, Oracle, SQLServer, Interbase or other. It is possible to use GetSqlLibParamName function to create this parameter name depending on the server type
MS SQL Server:
If you want login using NT Authentication security of MS SQL Server, then user name and password parameters must be empty or do not set theirs at all. It is true also, when OLEDB connection is used.
RemoteDatabase
Declaration
property RemoteDatabase: string
Purpose
Determines a name of the database on the server and other parameters, if it is possible.
  • DB2, Informix and ODBC:
The RemoteDatabase property can contain DSN, which is set up in ODBC Administrator, or a full datasource string with supported parameters for the required server.
Below you can see an example of datasource string for Informix server:
'SERVICE=ids_srv1;HOST=yourhost;PROTOCOL=OLSOCTCP;SERVER=ids_srv1;DATABASE=sysmaster;UID=informix;PWD=informix '.
  • OLEDB:
The RemoteDatabase property contains OLEDB connection string or server and database names for MS SQLServer provider (for example, "srv1:pubs"). Format of OLEDB connection string is based on the ODBC connection string. Some connection string for some providers include in a table below. If no PROVIDER keyword is in the string, the OLEDB Provider for ODBC (MSDASQL) is default value. This provides backward compatibility with ODBC connection strings.
Provider
RemoteDatabase value
MS SQL Server
PROVIDER=SQLOLEDB; DATA SOURCE=localhost;INITIAL CATALOG= pubs; USER ID=tester;PASSWORD=tester
MS OLEDB Provider for Oracle
PROVIDER=MSDAORA; DATA SOURCE=TEST;USER ID=tester; PASSWORD=tester
Sybase OLEDB Provider for SQLAnywhere
PROVIDER=ASAProv; DATA SOURCE=asademo;USER ID=tester; PASSWORD=tester;Persist Security Info=False
· Interbase:
The RemoteDatabase property defines a remote server, path to the required database and network protocol. It is important to use <server name> in a multi-threaded application, else the application could hang in the non-main thread. See examples below.
RemoteDatabase value
Used network protocol
<server_name>:<filename>
TCP
//<server_name>/<filename>
NetBEUI
<server_name>@<filename>
SPX
 
  • Oracle:
The property specifies a host string/service name.
  • MySQL, MS SQL Server or Sybase SQL Server:
If you connect to a remote server then RemoteDatabase property has to include server and database names divided by colon. For example, "srv1:pubs" defines database name PUBS on the server SRV1.
ReconnectTimeout
Declaration
property ReconnectTimeout: Integer
Purpose
Specifies the amount of time (in milliseconds) to wait between reconnect attempts. If the property is 0, then the database component will not try to reconnect.
ServerMajor, ServerMinor
Declaration
property ServerMajor: Word
property ServerMinor: Word
Purpose
Indicate major and minor versions of the server software, to which is connected the application. For example, in case of the use Oracle Server 7.3, the properties will equal the following values: ServerMajor = 7 and ServerMinor =3.
ServerType
Declaration
property ServerType: TSDServerType
Purpose
Indicates a type of the database server to which database component will be connected. Default value of the property is stSQLBase.
ServerType value
Database Server
stDB2
IBM DB2 Database
stFirebird
Firebird Server
stInformix
Informix Server
stInterbase
Interbase Server
stMySQL
MySQL Server
stODBC
ODBC database
stOLEDB
OLEDB datasource
stOracle
Oracle
stPostgreSQL
PostgreSQL Server
stSQLBase
Centura SQLBase
stSQLServer
MS SQL Server
stSybase
Sybase ASE and ASA
Session
Declaration
property Session: TSDSession
Purpose
Identifies the instance of the session, which is associated with this database component. By default, the Session property points to default session (Session global variable). To change a session for the database component, set SessionName property to the SessionName value of the other persistent session component.
SessionName
Declaration
property SessionName: string
Purpose
Identifies the name of the session used by this database component.
Temporary
Declaration
property Temporary: Boolean
Purpose
Indicates whether a database component is a temporary one, created when it was necessary, or a persistent one explicitly created and maintained within the application.
TransIsolation
Declaration
property TransIsolation: TSDTransIsolation
TSDTransIsolation = (tiDirtyRead, tiReadCommitted, tiRepeatableRead)
Purpose
Specifies the isolation level for the transactions managed by the database component. A transaction isolation level determines how the current transaction interacts with other simultaneous transactions when they work with the same tables. Different database server supports different levels of transaction isolation. Below you can see the correspondence between TransIsolation values and the used options, which are applied per native API-level.
Database Server
Specified Level
Actual API Level
SQLBase
tiDirtyRead
Release Locks (RL)
tiReadCommitted
Cursor Stability (CS)
tiRepeatableRead
Read Repeatability (RR)
OLEDB
tiDirtyRead
ISOLATIONLEVEL_READUNCOMMITTED
tiReadCommitted
ISOLATIONLEVEL_READCOMMITTED
tiRepeatableRead
ISOLATIONLEVEL_REPEATABLEREAD
Oracle
tiDirtyRead
READ WRITE
tiReadCommitted
READ WRITE
tiRepeatableRead
READ ONLY
MS SQL Server
tiDirtyRead
READ UNCOMMITTED
tiReadCommitted
READ COMMITTED
tiRepeatableRead
REPEATABLE READ
Sybase
tiDirtyRead
Isolation Level 0
tiReadCommitted
Isolation Level 1
tiRepeatableRead
Isolation Level 3
DB2 Database,
tiDirtyRead
SQL_TXN_READ_UNCOMMITTED (UR)
Informix and ODBC
tiReadCommitted
SQL_TXN_READ_COMMITTED (CS)
tiRepeatableRead
SQL_TXN_REPEATABLE_READ (RS)
Interbase, Firebird
tiDirtyRead
isc_tpb_read_committed, isc_tpb_rec_version
tiReadCommitted
isc_tpb_read_committed, isc_tpb_rec_version
tiRepeatableRead
isc_tpb_concurrency
Version
Declaration
property Version: string
Purpose
Contains server-dependent information with a full server version.
Events
AfterReconnect
Declaration
property AfterReconnect: TNotifyEvent
Purpose
The event occurs when connection is restored after it was lost.
OnLogin
Declaration
property OnLogin: TSDLoginEvent
TSDLoginEvent = procedure(Database: TSDDatabase; LoginParams: TStrings) of object;
Purpose
OnLogin event occurs when an application connects to a database and LoginPrompt property is False. If you provide alternative OnLogin event handler that you must set the "USER NAME" and "PASSWORD" values in LoginParams.
OnLostConnectError
Declaration
property OnLostConnectError: TSDLostConnectEvent
TSDLostConnectEvent = procedure(Database: TSDDatabase; E: ESDEngineError; var Action: TSDLostConnectAction) of object
TSDLostConnectAction = (lcCloseConnect, lcIgnore, lcWaitReconnect, lcTerminateApp)
Purpose
The event occurs when the database component detects that the connection is lost because of network problems, server shutdown or other reasons.
E is the current exception object.
Action indicates the action to take when the OnLostConnectError handler exits. On entry into the handler, Action is set to lcCloseConnect, i.e. all handles and result sets will be closed. When the handle returns lcIgnore, the database component does not close the lost connection. In case lcWaitReconnect the database component will try to reconnect through ReconnectTimeout milliseconds.
OnReconnectError
Declaration
property OnReconnectError: TSDLostConnectEvent
Purpose
The event occurs when reconnect attempt is unsuccessful. On entry into this handler, Action is set to lcIgnore, i.e. component will try to reconnect further.

TSDDataSet
Encapsulates database connectivity for SQLDirect dataset components. Applications never use TSDDataSet objects directly. Instead they use the descendants of TSDDataSet, such as TSDQuery and TSDStoredProc, which inherit its database-related properties and methods.
Methods
ApplyUpdates
Declaration
procedure ApplyUpdates
Purpose
Writes cached updates to the remote database. The method transfers the cached data to the database by using the OnUpdateRecord event, but the changes are not committed to the database. Your application must explicitly call the database component's Commit method to commit the changes to the database if the write is successful.
Assign
Declaration
procedure Assign(Source: TPersistent)
Purpose
Copies rows from the Source dataset to the current one, which will be activated in offline mode. If the Source dataset does not have rows, only field definitions will be copied.
CancelExec
Declaration
procedure CancelExec
Purpose
Aborts asynchronously of long-running call, which is processed on the server. It could be used to stop a query in a foregroung thread.
Note:This feature is supported by Oracle7, Oracle8, ODBC, DB2, Informix, OLEDB.
Oracle aborts all calls that associated with the current connection (TSDDatabase) and processed on the server (in different threads). Other supported servers stops only the specified query.
CancelUpdates
Declaration
procedure CancelUpdates
Purpose
Clears all pending cached updates from the local data cache and restore the dataset to its initial state.
CommitUpdates
Declaration
procedure CommitUpdates
Purpose
Clears data in the local data cache. You must call CommitUpdates after successfully calling ApplyUpdates and database component's Commit method.
RollbackUpdates
Declaration
procedure RollbackUpdates
Purpose
Marks all changes as not saved (applied). It means when some or all records was applied before the transaction was rolled back. In this case the updates was not stored in the database and that has to be marked in local cache.
ApplyUpdates method of TSDDatabase component uses the similar logic, which you can see below. I.e. you can use only one database’s ApplyUpdates method instead below code.
Example of using ApplyUpdates, CommitUpdates and RollbackUpdates methods:
SDDatabase1.StartTransaction;
Try
SDQuery1.ApplyUpdates;
SDDatabase1.Commit;
SDQuery1.CommitUpdates;
Except
SDDatabase1.Rollback;
SDQuery1.RollbackUpdates;
Raise;
End;
Create
Declaration
constructor Create(AOwner: TComponent)
Purpose
Creates an instance of the TSDDataSet component. Note that TSDDataSet components are not normally instantiated directly by the client application. Instead, it is usually the case that a TSDDataSet descendant such as TSDQuery or TSDStoredProc is used.
Detach
Declaration
procedure Detach
Purpose
Drops a server connection and keeps the result set active, i.e. turns the result set to offline mode. It helps to minimize consumption of server resources.
Disconnect
Declaration
procedure Disconnect
Purpose
Closes the result set and disconnects the dataset component's cursor from the database. After calling the method the Handle property will equal nil.
Destroy
Declaration
destructor Destroy
Purpose
Frees resources allocated by the component and destroys the instance.
FetchAll
Declaration
procedure FetchAll
Purpose
Retrieves all records from the current cursor position to the end of the result set and store them in the local cache.
IsSequenced
Declaration
function IsSequenced: Boolean
Purpose
The function always returns False.
LoadFromFile / LoadFromStream
Declaration
TSDStreamFormat= (sfCSV);
TSDStreamOption = (soAppend, soCheckFmtVersion, soFieldDefs, soFieldNames, soFieldValues, soFieldBlobs, soFieldCalculated, soFieldLookup, soFieldNonVisible, soFieldFixedLength, soQuoteOnlyStrings);
TSDStreamOptions= set of TSDStreamOption;
procedure LoadFromFile(const FileName: string; StreamFormat: TSDStreamFormat; SaveOptions: TSDStreamOptions)
procedure LoadFromStream(Stream: TStream; StreamFormat: TSDStreamFormat; SaveOptions: TSDStreamOptions)
Purpose
Opens the dataset using data from the specified file or stream. The following option can be used:
Value
Meaning
soAppend
The data will be appended in the file/stream, when it exists
soCheckFmtVersion
Version of file/stream format will be checked, when version is not valid, an exception will be raised
soFieldDefs
FieldDefs property will be loaded/saved from/to file or stream
soFieldNames
Header line with field names will be loaded/saved from/to file or stream
soFieldValues
Field values will be loaded/saved from/to file or stream
soFieldBlobs
Blob values will be loaded/saved from/to file or stream
soFieldCalculated
Calculated fields will be loaded/saved from/to file or stream
soFieldLookup
Lookup fields will be loaded/saved from/to file or stream
soFieldNonVisible
Invisible fields(which has Field.Visible=False) will be loaded/saved from/to file or stream
soFieldFixedLength
Not supported now
soQuoteOnlyStrings
Only string values will be quoted
When CSV-format is used the following default values are used:
DefCSVQuoteChar
'"'
DefCSVFieldDelimiterChar
','
DefCSVRecordDelimiterChar
','
DefCSVDateFormat
'yyyy-mm-dd'
DefCSVTimeFormat
'hh:nn:ss'
DefCSVTimeMSecFormat
'hh:nn:ss.zzz'
Locate
Declaration
function Locate(const KeyFields: string; const KeyValues: Variant;
Options: TLocateOptions): Boolean
Purpose
Searches for a specific record in the result set from the begin and set the current cursor position to it. KeyFields is a string containing a semicolon-delimited list of field names on which to search. KeyValues is a variant array containing the values to match in the key fields. The method returns True if it finds a matching record, and makes that record the current one. Otherwise Locate returns False.
When Option contains loPartialKey setting, then key and field values will be converted to string values (if it is necessary) to partial-string comparing on strings in KeyValues.
LocateNext, LocatePrior
Declaration
function LocateNext(const KeyFields: string; const KeyValues: Variant;
Options: TLocateOptions): Boolean
function LocatePrior(const KeyFields: string; const KeyValues: Variant;
Options: TLocateOptions): Boolean
Purpose
Searches forward/backward for a specific record in the result set from the current position and set the current cursor position to it. KeyFields is a string containing a semicolon-delimited list of field names on which to search. KeyValues is a variant array containing the values to match in the key fields. The method returns True if the matching record is found, and makes that record the current one. Otherwise Locate returns False.
When Option contains loPartialKey setting, then key and field values will be converted to string values (if it is necessary) to partial-string comparing on strings in KeyValues.
Lookup
Declaration
function Lookup(const KeyFields: string; const KeyValues: Variant;
const ResultFields: string): Variant
Purpose
Retrieves field values from a record matching specific search criteria. KeyFields is a string containing a semicolon-delimited list of field names on which to search. KeyValues is a variant array containing the values to match in the key fields. ResultFields is a string containing a semicolon-delimited list of the field names whose values should be returned from the matching record. Lookup returns a variant array containing the values from the fields specified in ResultFields.
OpenEmpty
Declaration
procedure OpenEmpty
Purpose
The method opens an empty result set in offline mode without fetching rows from the database. That’s similar to memory dataset. The structure of the result set will be getting from persistent fields or will be requested from the database using it’s current SQL statement. This method is supported for Delphi 5 or above.
OpenEx
Declaration
function OpenEx: Boolean
Purpose
Executes SQL commnd and returns True, when the result set is available, else it is like ExecSQL
RefreshRecord
Declaration
procedure RefreshRecord
Purpose
Read values of the current record from a database using TSDUpdateSQL.RefreshSQL property, when UpdateObject is assigned, or automatically generated statement, which depends from UpdateMode value.
RefreshRecordEx
Declaration
procedure RefreshRecordEx (const ARefreshSQL: string)
Purpose
Read values of the current record from a database using ARefreshSQL statement, if the parameter value is empty, method is equal to RefreshRecord.
RevertRecord
Declaration
procedure RevertRecord
Purpose
Restores current record to its original, unmodified state, provided the transaction has not been committed.
SaveToFile / SaveToStream
Declaration
procedure SaveToFile(const FileName: string; StreamFormat: TSDStreamFormat; SaveOptions: TSDStreamOptions)
procedure SaveToStream(Stream: TStream; StreamFormat: TSDStreamFormat; SaveOptions: TSDStreamOptions)
Purpose
Stores the dataset using data to the specified file or stream. Look LoadFromStream description for parameter’s info.
SortRecords
Declaration
procedure SortRecords(AFields: array of const; AscOrder, ACaseSensitive: array of Boolean); procedure SortRecords(const AFields, AscOrder, ACaseSensitive: string);
Purpose
Orders a record set using the specified fields and parameters. This method will call FetchAll, if it is necessary. AFields parameter contains a name of the column (i.e. TField.FieldName) or an index number of the fields (i.e. TField.Index) into the Fields property, which will be used in ordering of records.
String parameters AscOrder, ACaseSensitive can have the following values: ‘True’ or ‘False’, ‘1’ or ‘0’ and ‘Asc’ or ‘Desc’ for AscOrder parameter only. If values of AscOrder and ACaseSensitive are equal empty strings, then SortRecords will use True as default values.
When SortRecords with string parameters is used, then values of a string parameter have to be delimited using semicolon.
Example
SDQuery1.SortRecords([‘COL_1’, ‘COL_3’], [True, False], [False, False]);
SDQuery1.SortRecords([‘COL_1’, ‘COL_3’], [False], []);
SDQuery1.SortRecords([0, 2], [False], []);
SDQuery1.SortRecords(‘COL_1; COL_3’, ‘Asc; Desc’, ‘0; 1’);
SDQuery1.SortRecords(‘0; 2’, ‘Asc; Desc’, ‘0; 1’);
UpdateStatus
Declaration
function UpdateStatus: TUpdateStatus
Purpose
Indicates update status for the current record of the dataset.
Properties
AutoRefresh
Declaration
property AutoRefresh: Boolean
Purpose
Specifies whether autoincrement fields will be refetched automatically (without explicit call Refresh or RefreshRecord methods), when insert is executed in both modes: RequestLive or Cached Updates. The property is False by default.
If database driver can’t determine autoincrement fields, it is necessary to use AutoGenerateValue property of field component to specify, what fields that should be refreshed.
CacheBlobs
Declaration
property CacheBlobs: Boolean
Purpose
Determines whether BLOB objects are cached locally. The property is True by default.
Database
Declaration
property Database: TSDDatabase
Purpose
The underlying database component associated with the dataset. The read-only property is automatically set when dataset is opened. Use this property for access to the database component's methods, properties and event.
CachedUpdates
Declaration
property CachedUpdates: Boolean
Purpose
Specifies whether cached updates mode is enabled for a dataset. When CachedUpdates is True, then cached updates mode is enabled and posted records are stored in an internal cache until ApplyUpdates of TSDDataSet or TSDDatabase method will be not called.
In cached updates mode records are applied into the database using statements of UpdateObject, OnUpdateRecord or automatically generated statements according to UpdateMode property, when RequestLive is True.
Declaration
property DatabaseName: string
Purpose
Name of the database component associated with the dataset. This property should match DatabaseName property of the associated database component.
DBSession
Declaration
property DBSession: TSDSession
Purpose
Determines the instance of the session component with which this dataset is associated.
.
EnableUpdateKinds
Declaration
TUpdateKinds       = set of TUpdateKind
property EnableUpdateKinds: TUpdateKinds
Purpose
Defines what kind updates will be applied. The property is empty when the dataset is closed. Default value, when dataset is opened, is equal [ukModify, ukInsert, ukDelete], i.e. all updates will be applied, when ApplyUpdates method will be called. It is possible to select only some update kind, what is useful for master-detail relationship.
Filter
Declaration
property Filter: string
Purpose
Specifies the text of the current filter for a dataset.
Filtered
Declaration
property Filtered: Boolean
Purpose
Specifies whether record filtering is active for a dataset. If Filtered is True, then filtering is active. You need to define Filter property or OnFilterRecord event handler, which define how to filter the records. The following methods allow navigation in the filtered dataset: FindFirst, FindNext, FindPrior, FindLast.
Handle
Declaration
property Handle: PSDCursor
Purpose
Returns a pointer to a cursor on the remote database, which depends on type of the used database server. The Handle property is used to make direct calls to the database server API, which is not normally necessary for client applications.
Database Server
Type of cursor
stSQLBase
SqlTCur
stOracle
TCdaDef
stSQLServer
DBPROCESS
stSybase
TSybConnection
stDB2, stInformix, stODBC
HSTMT
stInterbase, stFirebird
TISC_STMT_HANDLE
stMySQL
TMYSQL_RES
stPostgreSQL
PPGresult
Options
Declaration
TSDDataSetOption = (doKeepSorting, doDetachOnFetchAll, doFetchAllOnOpen);
TSDDataSetOptions= set of TSDDataSetOption;
property Options: TSDDataSetOptions
Purpose
Contains dataset options, which affect dataset’s behaviour.
When szFETCHALLONOPEN or szDETACHONFETCHALL database parameters are equal True, it is like that all data sets have  doDetachOnFetchAll or doFetchAllOnOpen options, even if they are not set.
Value
Meaning
doKeepSorting
To save a sort order after Refresh and insert/modify of the record, when SortRecords was called or the current SQL command has ORDER BY clause
doDetachOnFetchAll
If option is set on, then the dataset releases a server cursor automatically, when all record are fetched: FetchAll method is called or EOF is reached
doFetchAllOnOpen
When the option is turn, then FetchAll is called automatically right after Open
RecNo
Declaration
property RecNo: LongInt
Purpose
Indicates ordinal position of the current record in the dataset. When a dataset component is activated, RecNo will be a number between one (1) and the total number of rows (RecordCount) in the result set. Property is writable, i.e. position in the result set will be changed if a new value is assigned to RecNo property.
SessionName
Declaration
property SessionName: string
Purpose
Specifies the name of the session with which this dataset is associated. If SessionName property is blank, then a dataset component is associated with the default session (see public variable Session).
A dataset component can be associated with any database component within one session, i.e. SessionName properties of the dataset and the database must be equal.
Sorted
Declaration
property Sorted: Boolean
Purpose
Read-only property specifies, whether the result set is sorted using SortRecords method or ORDER BY clause is used in SQL command (doKeepSorting has to be set in the last case).
UniDirectional
Declaration
property UniDirectional: Boolean
Purpose
Determines whether or not bidirectional cursors are enabled for a result set. By default, UniDirectional is False, enabling forward and backward navigation. When the property is set on, the result set requires less memory.
UpdateObject
Declaration
property UpdateObject: TSDDataSetUpdateObject
Purpose
Specifies which update object component will write modified data to the database. Without this component dataset is read-only.
UpdateRecordTypes
Declaration
property UpdateRecordTypes: TUpdateRecordTypes
TUpdateRecordTypes = set of (rtModified, rtInserted, rtDeleted, rtUnmodified)
Purpose
Specifies the type of records visible in a dataset. By default, a dataset is created with an UpdateRecordTypes set of [rtModified, rtInserted, rtUnmodified], meaning that all existing, edited, or inserted records are visible to the user.
UpdateRecordTypes Value
Meaning
rtModified
Modified records are visible
rtInserted
Inserted records are visible
rtDeleted
Deleted records are visible
rtUnmodified
Unmodified records are visible
UpdatesPending
Declaration
property UpdatesPending: Boolean
Purpose
Indicates whether the cached updates buffer contains data, which have not been transferred to the remote database and committed. If UpdatesPending is False, the cached updates buffer is empty.
Events
OnFilterRecord
Declaration
property OnFilterRecord: TFilterRecordEvent
Purpose
The event used to determine the visibility of each record in a result set when record filtering is active. The filter handler will be called one time for each record in the set. The handler uses the Accept parameter to determine if the record will be passed to the application. Accept is set to True to indicate that the record is visible, and False for not visible (the record will not be passed to the application). While the client application is processing a filter, the State property of the DataSet is dsFilter.
OnUpdateError
Declaration
property OnUpdateError: TupdateErrorEvent
TUpdateAction = (uaFail, uaAbort, uaSkip, uaRetry, uaApplied);
TUpdateErrorEvent = procedure(DataSet: TDataSet; E: EDatabaseError;
UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction) of object;
Purpose
The event occurs if an exception is generated while cached updates are being applied to a remote database. DataSet is the component whose cached updates are being applied to a database. E is an exception generated during this process. UpdateKind indicates the type of update operation (insert, update or delete). UpdateAction determines the action after exit from the handler. In the entry point of the handler UpdateAction is uaFail. The error handler can use the TField.OldValue and TField.NewValue properties.
UpdateAction value
Meaning
uaFail
Abort update operation and displays an error message
uaAbort
Abort update operation and without displaying an error message
uaSkip
Skips updating the record, which raised an exception
uaRetry
Repeats update operation which raised exception
uaApplied
Not used
OnUpdateRecord
Declaration
property OnUpdateRecord: TUpdateRecordEvent
TUpdateAction = (uaFail, uaAbort, uaSkip, uaRetry, uaApplied);
TUpdateErrorEvent = procedure(DataSet: TDataSet; E: EDatabaseError;
UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction) of object;
Purpose
The event occurs when cached updates are applied to a record. Write an OnUpdateRecord event handler to process updates that cannot be handled by a single update component, such as implementation of cascading updates, insertions, or deletions. This handler is also useful for applications that require additional control over parameter substitution in update components. DataSet is the dataset to which updates are applied.
UpdateKind indicates the current action: whether the record is inserted, updated or deleted. This parameter is usable for define, for example, which statement of TSDUpdateSQL need to perform.
UpdateAction defines a success or failure of the update operation.
UpdateAction value
Meaning
uaFail
Abort update operation and displays an error message
uaAbort
Abort update operation and without displaying an error message
uaSkip
Skips updating the record, which raised an exception
uaRetry
Repeats update operation which raised exception
uaApplied
The event handler applied the update

TSDMonitor
The component controls trace messages, which are sent, when some events happens.
Note:An application can have only one monitor component.
Properties
Active
Declaration
property Active: Boolean
Purpose
Activates monitoring. At design-time this property has no sense, because trace messages are generated only at run-time.
FileName
Declaration
property FileName: string
Purpose
Specifies file, where trace messages will be stored. If FileName is empty, trace messages will be sent to SQLDirect monitor application.
TraceOptions
Declaration
TSDTraceOption= (toConnect, toTransact, toQPrepare, toQExecute, toDataIn, toDataOut);
TSDTraceOptions= set of TSDTraceOption;
property TraceOptions: TSDTraceOptions
Purpose
Defines what trace messages will be generated.

TSDQuery
The component encapsulates a dataset with result set returned by an SQL-statement. You can use this component to return a result set from a remote database and for executing SQL statements on the server in order to modify data or database itself.
SQL Server: As result of the SQL Server feature, which does not allow to have some active result sets per one connection (DBPROCESS handle, which is a separate transaction), you may encounter the following problem. TSDQuery with SELECT statement uses separate DBPROCESS handle, but all data manipulation statements (for example, INSERT, UPDATE) are executed through TSDDatabase.Handle. So TSDQuery with SELECT statement will wait a release the locks, which was acquired by data modifications in your application.
Sybase: Blob fields must be last in the select list.
Methods
Create
Declaration
constructor Create(AOwner: TComponent)
Purpose
Creates an instance of TSDQuery component. The constructor also creates an empty SQL-statement list, an empty parameter list and sets RowsAffected to -1.
Destroy
Declaration
destructor Destroy
Purpose
Destroys the instance of the component. The method disconnects the cursor from the database, frees the SQL-statement list and the parameter list.
Disconnect
Declaration
procedure Disconnect
Purpose
Disconnects component's cursor (see Handle property) from the database.
ExecSQL
Declaration
procedure ExecSQL
Purpose
Executes the SQL-statement associated with the component (see SQL property). ExecSQL prepares the statement (if it was not prepared), binds parameters and executes the statement. You must call this method for statements that do not return result set, such as INSERT, DELETE, UPDATE etc. For the SELECT statement call Open, instead of ExecSQL.
ParamByName
Declaration
function ParamByName(const Value: string): TSDParam
Purpose
The method is used for access to the parameter object by name.
Prepare
Declaration
procedure Prepare
Purpose
Causes SQL-statement to be compiled by the remote database server, for increased performance.
UnPrepare
Declaration
procedure UnPrepare
Purpose
Frees remote database resources allocated for a prepared SQL-statement.
Properties
DataSource
Declaration
property DataSource: TDataSource
Purpose
Specifies the data source component, which will be used for extract field values to use with same-name parameters in the SQL statement of the current query component.
ParamCheck
Declaration
property ParamCheck: Boolean
Purpose
Indicates whether the parameter list should change when an SQL-statement is changed at run-time (i.e. when the SQL property is modified by the client application). By default ParamCheck is True, so that when an SQL-statement is changed the parameter list is cleared and repopulated.
ParamCount
Declaration
property ParamCount: Word
Purpose
Determines the number of parameters for the SQL-statement. If you change the SQL-statement, ParamCount is automatically modified.
Params
Declaration
property Params: TSDParams
Purpose
Provides indexed access to the parameters of the SQL-statement and allows changing the name, value and data type of a parameter at run-time.
Prepared
Declaration
property Prepared: Boolean
Purpose
Indicates whether the SQL-statement is prepared for execution. If Prepared is True, the SQL-statement is prepared, otherwise it is not prepared. You can use the Prepared property instead of the Prepare and UnPrepare methods. Setting Prepared to True calls the Prepare method, while setting Prepared to False calls the UnPrepare method.
RequestLive
Declaration
property RequestLive: Boolean
Purpose
When property is True, then Open method will try to return an updatable result set. If UpdateObject is assigned, then it’s properties will be use to update or refresh the result set, else automatically generated statements will be used for these purposes depending on a value of UpdateMode property.
If RequestLive set on, then Post method will update and commit data in the database.
When RequestLive and CachedUpdates properties are equal True, then the live query will be activated, but data will be applied, when ApplyUpdates method will be called. In this case Post only saves data in the local cache.
RowsAffected
Declaration
property RowsAffected: Integer
Purpose
Returns the number of updated or deleted row by the most recently executed SQL-statement. If no rows were affected (updated or delete) by last execution the property returns -1.
SQL
Declaration
property SQL: TStrings
Purpose
Contains the SQL-statement text. Use this property to change the SQL-statement at run-time.
Text
Declaration
property Text: string
Purpose
Returns the text of the SQL-statement. Property is read-only.

TSDMacroQuery
The component has all features of TSDQuery plus possibility to process macros inside SQL statement.
Methods
ExpandMacros
Declaration
procedure ExpandMacros
Purpose
The method replaces all macros on macro values in the SQL property.
MacroByName
Declaration
function MacroByName(const MacroName: string): TParam
Purpose
Returns a macro item by it’s name.
Properties
MacroChar
Declaration
property MacroChar: Char
Purpose
Specifies a character, which has to precede a macro in the statement.
MacroCount
Declaration
property MacroCount: Word
Purpose
Returns number of macros in the statement.
Macros
Declaration
property Macros: TParams
Purpose
Use Macros to set up value of a macro.

TSDStoredProc
The component encapsulates stored procedure on a database server. TSDStoredProc hides the differences between different database servers with respect to calling stored procedures. The component can accept a result set, which may be returned by a stored procedure.
Methods
CopyParams
Declaration
procedure CopyParams(Value: TSDParams)
Purpose
Copies a stored procedure's parameters into another parameter list (for example, to another stored procedure Params property).
Create
Declaration
constructor Create(AOwner: TComponent)
Purpose
Creates an instance of a stored procedure component, initializes parameter buffer and an empty parameter list.
Destroy
Declaration
destructor Destroy
Purpose
Destroys the instance of a stored procedure component. Also Destroy method disconnects from the database and frees the parameter buffer and the parameter list.
DescriptionsAvailable
Declaration
function DescriptionsAvailable: Boolean
Purpose
Indicates whether or not a database server can return information about stored procedure parameters. If DescriptionsAvailable returns True, parameter information is available from the database server. If the method returns False, parameter information is not available. If DescriptionsAvailable is False the client application must itself provide correct parameter information in the parameter list.
ExecProc
Declaration
procedure ExecProc
Purpose
Executes the stored procedure on the server. It is necessary to provide all input parameters in the Params property before calling ExecProc. The method prepares the stored procedure (if necessary) and binds the parameters. After call ExecProc the output parameters are accessible through the Params property (without call the GetResults method for Microsoft and Sybase SQL Server). If the stored procedure returns a result set, it can be accessed with the Open method or the Active property.
GetResults
Declaration
procedure GetResults
Purpose
Returns the all output data from a stored procedure of the some servers after activation of the result set. The output data includes output parameters and an active(current) result set. When you connect to MS or Sybase SQL Server, after GetResults calling the TSDStoredProc component does not use a handle of the associated TSDDatabase component later. The method is applicable for MS SQL Server, Sybase and SQLBase only.
Microsoft and Sybase SQL Server returns the output parameters after select of the last result sets. The method force to fetch a current result set and stores the output parameter’s data into the Params property. Note, that TSDStoredProc component shares a handle of the associated TSDDatabase component as result of a restriction of the SQL Server API. Consequently, if a stored procedure returns a result set, then it is necessary to use a separate associated TSDDatabase component or to call GetResults for getting all data (parameters and result set) of the stored procedure.
SQLBase server returns the output parameters as a result set. Therefore, you can apply to Fields property for the output parameter’s data. The method copies a data from Fields property (for current record) to Params property only.
NextResultSet
Declaration
function NextResultSet: Boolean
Purpose
The method returns True and forces a cursor to begin of a next result set, if one is accessible. If there are not more result set for the stored procedure, the method returns False. Now multiple result set is supported for IBM DB2, Microsoft and Sybase SQL Server only, for other servers the method always returns False.
ParamByName
Declaration
function ParamByName(const Value: string): TSDParam
Purpose
Returns stored procedure parameter object by specified name.
Prepare
Declaration
procedure Prepare
Purpose
Prepares a stored procedure for execution. The method compiles the stored procedure, retrieves parameter information from the database server and allocates parameter buffer.
UnPrepare
Declaration
procedure UnPrepare
Purpose
Frees the resources allocated for a previously prepared SQL-statement.
Properties
Overload
Declaration
property Overload: Word
Purpose
Not used.
ParamBindMode
Declaration
property ParamBindMode: TSDParamBindMode
Purpose
Not used.
ParamCount
Declaration
property ParamCount: Word
Purpose
Indicates the number of parameters currently stored in the Params property.
Params
Declaration
property Params: TSDParams
Purpose
Stores the input and output parameters for a stored procedure. Provides access to parameters of the stored procedure and possibility to change name, value and data type of a parameter at run-time.
Prepare method will fill up Params property, when it is empty, i.e. ParamCount is equal 0. In other case, a developer is responsible for accordance of Params property to actual parameters of procedure/function in a database.
ATTENTION! SQLBase server does not return description of all stored procedure parameters, therefore you must set name, data type and default value of all parameters of the stored procedure.
Prepared
Declaration
property Prepared: Boolean
Purpose
Determines whether a stored procedure is prepared for execution. If Prepared is False that setting it to True calls Prepare method. If Prepared is True that setting it to False calls UnPrepare method. Calling of ExecProc or Open methods automatically prepares stored procedure.
StoredProcName
Declaration
property StoredProcName: string
Purpose
Stores the name of the stored procedure on the database which this component is an encapsulation.

TSDScript
The component encapsulates a database table.
Methods
ExecSQL
Declaration
procedure ExecSQL
Purpose
Executes all statement of the current script, which is assigned to the SQL property.
ExpandMacros
Declaration
procedure ExpandMacros
Purpose
The method replaces all macros on macro values in the SQL property.
MacroByName
Declaration
function MacroByName(const MacroName: string): TParam
Purpose
Returns a macro item by it’s name.
ParamByName
Declaration
function ParamByName(const Value: string): TSDParam
Purpose
The method is used for access to the parameter object by name.
Properties
Database
Declaration
property Database: TSDDatabase
Purpose
The underlying database component associated with the script. The read-only property is automatically set when the script is executed. Use this property for access to the database component's methods, properties and event.
DatabaseName
Declaration
property DatabaseName: string
Purpose
Name of the database component associated with the script. This property should match DatabaseName property of the associated database component.
DBSession
Declaration
property DBSession: TSDSession
Purpose
Determines the instance of the session component with which this script is associated.
IgnoreParams
Declaration
property IgnoreParams: Boolean
Purpose
Indicate whether to use Params property when the script is executed. When IgnoreParams is equal True, then the script component does not use Params property at execution time.
MacroChar
Declaration
property MacroChar: Char
Purpose
Specifies a character, which has to precede a macro in the statement.
MacroCheck
Declaration
property MacroCheck: Boolean
Purpose
Indicates whether the list of macros should be regenerated, when a SQL property is changed at run-time (i.e. when the SQL property is modified by the client application). By default MacroCheck is True, so that when the script is changed the parameter list is cleared and regenerated.
MacroCount
Declaration
property MacroCount: Word
Purpose
Returns number of macros in the statement.
Macros
Declaration
property Macros: TParams
Purpose
Use Macros to set up value of a macro.
ParamCheck
Declaration
property ParamCheck: Boolean
Purpose
Indicates whether the parameter list should be regenerated, when a SQL property is changed at run-time. By default ParamCheck is True, so that when a SQL property is changed the parameter list is cleared and regenerated. It is useful, for example, when semicolon is used inside stored procedure source.
Params
Declaration
property Params: TSDParams
Purpose
Provides indexed access to the parameters of the script and allows changing the name, value and data type of a parameter at run-time.
SessionName
Declaration
property SessionName: string
Purpose
Specifies the name of the session with which this script is associated. If SessionName property is blank, then a script component is associated with the default session (see public variable Session).
A script component can be associated with any database component within one session, i.e. SessionName properties of the script and the database must be equal.
SQL
Declaration
property SQL: TStrings
Purpose
Contains the script text with macros, when they are present. Use this property to change the script text at run-time.
TermChar
Declaration
property TermChar: Char
Purpose
Indicates a character, which is used as a terminator between statements of the script.
Text
Declaration
property Text: string
Purpose
Returns the text of the script with expanded macro values. Property is read-only.
Transaction
Declaration
property Transaction: Boolean
Purpose
Specifies whether to use database methods for transaction control. If Transaction property is equal True, then StartTransaction, Commit, Rollback database methods are used to start and to end a transaction at script execution time (ExecSQL call).
Events
AfterExecute
Declaration
property AfterExecute: TNotifyEvent
Purpose
Occurs at the end of script execution.
BeforeExecute
Declaration
property BeforeExecute: TNotifyEvent
Purpose
Occurs before the component executes a script.

TSDTable
The component encapsulates a database table.
Methods
CreateTable
Declaration
procedure CreateTable
Purpose
Creates a new table using a new structure from TableName, FieldDefs and IndexDefs properties.
DeleteTable
Declaration
procedure DeleteTable
Purpose
Delete an existing table from the database.
EmptyTable
Declaration
procedure EmptyTable
Purpose
Deletes all records from the table.
GetIndexNames
Declaration
procedure GetIndexNames(List: TStrings)
Purpose
Populates List parameter using names of the available indexes for the table.
Properties
DefaultIndex
Declaration
property DefaultIndex: Boolean
Purpose
This property defines whether to use a default (primary or unique) index to order records, when the table is opened. If it is False, then alternative index will be used, which specified by IndexName or IndexFieldNames properties. Default value of DefaultIndex property is True.
When DefaultIndex is False, IndexName is empty and UpdateMode is upWhereAll, then the component does not request index info from a database catalog to speed up of opening.
Exists
Declaration
property Exists: Boolean
Purpose
Indicates whether the database table exists.
IndexName
Declaration
property IndexName: string
Purpose
The property specifies an alternative index, which will be used to order records, when DefaultIndex property will be equal False.
When IndexName property is empty and UpdateMode=upWhereAll, then index info is not requested from the database for speed-up of opening.
IndexFieldNames
Declaration
property IndexFieldNames: string
Purpose
The property contains a list of columns, which are used as an index for a table. Columns have to be separated with semicolon and can include ‘ASC’, ‘DESC’ after each column name to change ordering.
The IndexFieldNames and IndexName properties are mutually exclusive. Setting one clears the other. The both properties signify, when DefaultIndex property is set off.
In a master-detail relationship, IndexFieldNames can defines field names in the detail table, which have correspond to master fields. It is useful, when detail fields are not equal master fields.
TableName
Declaration
property TableName: string
Purpose
Indicates the name of the database table, which the component encapsulates.
ATTENTION: PostgreSQL (at least, v.7.2 and below) do not support an owner name, therefore it is necessary to remove an owner name for TableName property, which is set in Object Inspector.

TSDUpdateSQL
Component for updating SQLDirect datasets. At design-time you can use an editor of TSDUpdateSQL to generate InsertSQL/DeleteSQL/ModifySQL automatically. Note, TableName field in the editor has to have a valid case for case-sensitive databases.
"Select &Primary Keys" button can help to locate and select fields, which are primary key of the table. When the primary key is not available or is not identified, then the first unique index will be used.
Methods
Apply
Declaration
procedure Apply(UpdateKind: TUpdateKind)
Purpose
Sets the parameters for specified SQL-statement and executes it for update current record in the dataset. UpdateKind parameter indicates which SQL statement to bind and execute. The method should be called in OnUpdateRecord event handler.
Create
Declaration
constructor Create(AOwner: TComponent)
Purpose
Creates an instance of an update component.
Destroy
Declaration
destructor Destroy
Purpose
Frees an instance of an update component.
ExecSQL
Declaration
procedure ExecSQL(UpdateKind: TUpdateKind)
Purpose
Executes specified SQL-statement without setting parameters.
SetParams
Declaration
procedure SetParams(UpdateKind: TUpdateKind)
Purpose
Binds parameters for specified SQL-statement. You need to call SetParams before statement execution. Parameter name must exactly match to field name of the dataset. To retrieve the old value of a field, parameter name must begin with "OLD_". UpdateKind parameter indicates which SQL statement to bind. The method should be called in OnUpdateRecord event handler.
Properties
DataSet
Declaration
property DataSet: TSDDataSet
Purpose
Identifies the dataset to which a update component belongs. At design-time, the property automatically sets when you set property UpdateObject of the dataset.
DeleteSQL
Declaration
property DeleteSQL: TStrings
Purpose
Stores the SQL statement to use for applying a deletion to a record.
InsertSQL
Declaration
property InsertSQL: TStrings
Purpose
Stores the SQL statement to use for applying an insertion to a dataset.
ModifySQL
Declaration
property ModifySQL: TStrings
Purpose
Stores the SQL statement to use for applying an update to a record.
Query
Declaration
property Query[UpdateKind: TUpdateKind]: TSDQuery
Purpose
Returns query component used to perform a specified update.
QueryEx
Declaration
property QueryEx[StmtKind: TUpdateStatus]: TSDQuery
Purpose
Returns query component used to execute a specified statement. If StmtKind is equal usUnmodified, then the query is used to refresh a record.
RefreshSQL
Declaration
property RefreshSQL: TStrings
Purpose
Stores the SQL statement to refresh a record.
SQL
Declaration
property SQL[StmtKind: TUpdateStatus]: TStrings
Purpose
Returns SQL statement used to applying a specified update.

ESDEngineError
Exception class for SQLDirect database error.
Methods
Create
Declaration
constructor Create(AErrorCode, ANativeError: TSDEResult; const Msg: string; AErrorPos: LongInt)
Purpose
Creates an instance of ESDEngineError using specified error codes, message and position of the error (if it is applied).
Create
Declaration
constructor CreateDefPos(AErrorCode, ANativeError: LongInt; const Msg: string)
Purpose
Creates an instance of ESDEngineError using specified error codes, message and default position of the error, which is equal -1.
Properties
ErrorCode
Declaration
property ErrorCode: TSDEResult
Purpose
Reserved. At present it is equal to NativeError property.
ErrorPos
Declaration
property ErrorPos: LongInt
Purpose
Indicates a position of the error. It means after prepare or execute calls for Oracle, SQLBase and MS SQL Server only, it is equal –1 always for all other servers and by default at other cases.
In case of error ErrorPos is equal error offset for Oracle and SQLBase and it is equal line number (beginning with 1) for MS SQL Server.
NativeError
Declaration
property NativeError: TSDEResult
Purpose
Returns native error code for used SQL-server.
ESDOdbcError
This exception is raised whenever ODBC errors occurred.
Methods
CreateWithSqlState
Declaration
constructor CreateWithSqlState(AErrorCode, ANativeError: TSDEResult; const AMsg, ASqlState: string)
Purpose
Creates an instance of ESDOdbcError using the specified error codes, message and SQLSTATE string for the ODBC error..
Properties
SqlState
Declaration
property SqlState: string
Purpose
Contains a five-character SQLSTATE code for an ODBC error. The first two characters indicate the class error and the other three characters indicate the subclass.
ESDMssError
This exception is raised whenever DB-Library errors occurred.
Methods
Create
Declaration
constructor Create(DbProc: PDBPROCESS; AErrorCode, ANativeError: TSDEResult; const Msg: string)
Purpose
Creates an instance of ESDMssError with the specified error codes, message for the associated process handle and DB-Library error.
Properties
HProcess
Declaration
property HProcess: PDBPROCESS
Purpose
Indicates a process handle for the associated error. ESDSqlLibError
ESDSqlLibError
This exception is raised whenever errors occurred in process of loading/unloading database client software.

TSDCntrBlobField
The component gives an access to the images stored by Centura developer tools (SqlWindows or Team Developer). These tools can store images in proprietary format, therefore TDBImage component raised exception "Invalid image format".
For use this component you need to include SDCTBLOB unit in your application and set the following code before image query: DefaultFieldClasses[ftBlob] := TSDCntrBlobField . After that all LONG fields will be check for known formats before assign data to TDBImage, TPicture or TBitmap components. You can set TSDCntrBlobField.HeaderRemove property to False or call the following code DefaultFieldClasses[ftBlob] := TSDCntrBlobField , if you want to return all as it was.
Note: TDBImage and TImage do not understand all image formats.
Properties
HeaderRemove
declaration
property HeaderRemove: Boolean
Purpose
If this property is equal True, then field will be parse header image and return only image data, if it is possible. If property set to False, then the component work as standard TBlobField.
TSDSQLBaseServer
The component controls server connection and performs administration procedures on the specific SQLBase server. It allows changing login process.
Methods
AbortProcess
Declaration
procedure AbortProcess(ProcessNo: Integer)
Purpose
Aborts a database server process. You can't abort a process that the server is currently processing.
BackupDatabase
Declaration
procedure BackupDatabase(const DBName, BackupDir: string; Over: Boolean)
Purpose
Makes an online backup, i.e. the procedure copies the specified database file (DBName parameter) and it’s log files needed to restore the database to a consistent state. The backup includes transactions, which are committed when the backup is started. BackupDir defines a directory where the files will be copied or overwritten, if Over parameter is equal True.
The advantage of an online backup is that users can access the database while the backup is being done.
CancelRequest
Declaration
procedure CancelRequest(CursorNo: Integer)
Purpose
Cancels an execution SQL statement.
Close
Declaration
procedure Close
Purpose
Disconnects from SQLBase server.
Create
Declaration
constructor Create(AOwner: TComponent)
Purpose
Creates an instance of TSDSQLBaseServer component.
CreateDatabase
Declaration
procedure CreateDatabase(const DBName: string)
Purpose
Procedure physically creates and installs database on the server.
Destroy
Declaration
destructor Destroy
Purpose
Frees an instance of TSDSQLBaseServer component.
DeinstallDatabase
Declaration
procedure DeinstallDatabase(const DBName: string)
Purpose
Deinstalls the specified database on the server and removes the DBName keyword from sql.ini. The procedure does not physically delete the database.
DeleteDatabase
Declaration
procedure DeleteDatabase(const DBName: string)
Purpose
Drops a database on the server. The procedure physically deletes the entire database directory for the specified database.
GetDatabaseNames
Declaration
procedure GetDatabaseNames(DBNames: TStrings)
Purpose
Populates a string list with the names of the installed database on the server.
InstallDatabase
Declaration
procedure InstallDatabase(const DBName: string)
Purpose
Procedure installs the specified database on the server and adds DBName keyword in sql.ini.
Open
Declaration
procedure Open
Purpose
Connects to the specified server.
RestoreDatabase
Declaration
procedure RestoreDatabase(const DBName, BackupDir: string; Over: Boolean)
Purpose
The procedure restores and recovers the specified database (DBName parameter) and it’s log files that were backed up using BackupDatabase procedure in BackupDir directory.
The procedure can not be performed while users are connected.
Shutdown
Declaration
procedure Shutdown
Purpose
The procedure prevents new connections to the server. After call this procedure, anyone trying to connect to a database receives a "shutdown server in progress" message. All current users remain connected and all current transactions continue.
Terminate
Declaration
procedure Terminate
Purpose
Terminates the server. If users are connected then their session are terminated and they will get a "session terminated" message. All open transactions are left uncommitted.
Properties
Connected
Declaration
property Connected: Boolean
Purpose
Specified whether or not server connection is active. Set Connected to True to establish a server connection. Set Connection to False to close a server connection.
LoginPrompt
Declaration
property LoginPrompt: Boolean
Purpose
Specified whether or not to display a standard login dialog when the application attempts to connect to a server.
Params
Declaration
property Params: TStrings
Purpose
Contains server connection parameters.
ServerName
Declaration
property ServerName: string
Purpose
Specified server name used for connection.
Events
OnLogin
Declaration
property OnLogin: TSDSrvLoginEvent
TSDSrvLoginEvent = procedure(Server: TSDSQLBaseServer; LoginParams: TStrings) of object
Purpose
OnLogin event occurs when an application connects to a server and LoginPrompt property is False. If you provide alternative OnLogin event handler that you must set the "PASSWORD" values in LoginParams.

Global Variables
Oracle8Blobs
Declaration
SDOra.Oracle8Blobs: Boolean
Purpose
The variable defines a binding mode for Oracle8 BLOB and CLOB field types. Set this variable to True before executing a query that uses these types for parameters. Assign the data using TParam.AsMemo for CLOB and TParam.AsBlob for BLOB. If the variable is equal False, then query will bind Blob and Memo parameters as Oracle RAW/LONG RAW field type.
Note you cannot mix CLOB/BLOB and RAW/LONG RAW in the binding of the same query.
Session
Declaration
Session: TSDSession
Purpose
The instance of TSDSession component, which controls the associated database components used by application. It is created automatically as part of application initialization process and destroyed, when application is terminated. It is forbidden to create or destroy Session variable manually.
Sessions
Declaration
Sessions: TSDSessionList
Purpose
The instance of TSDSessionList component contains all session components, which are created by an application. Delphi automatically will add and remove the session components in and from the list.
Applications should not create additional instances of TSDSessionList component.
InitSqlDatabaseProcs
Declaration
TInitSqlDatabaseProc= function (ADbParams: TStrings): TISqlDatabase
InitSqlDatabaseProcs: array[TSDServerType] of TInitSqlDatabaseProc
Purpose
The variable contains an array of references to functions, which create a low-level connection object.
SqlApiDLL
Declaration
SqlApiDLL: string
Purpose
The variables are located in the each server support unit (for example, SDOra, SDMss) and contains the filenames of the client API-libraries, used for connection to the associated database server. You can use this variable to force a specific version of client library to be loaded, for that it is necessary to set this variable before first connect to the specific server.
For example,
Uses
SDOra;
…………
SDOra.SqlApiDLL := 'ORA72.DLL';
SQLWaitTimeout
Declaration
SQLWaitTimeout: Integer
Purpose
Specifies amount of time (in milliseconds) before reset Screen.Cursor in the default state to avoid cursor flickering in process of multiple-statement execution.
The recommended value of this variable is 50-100 milliseconds. To turn off this behaviour, set the variable to value 0.
Public procedures/functions
GetSqlDirectVersion
Declaration
function GetSQLDirectVersion: string;
Purpose
Return version string of SQLDirect components in the following format: “X.Y.Z”, where X - major version, Y – minor version, Z - release number.
GetSqlLibParamName
Declaration
function GetSqlLibParamName(ServerTypeCode: Integer): string;
Purpose
Returns a “XXX API LIBRARY” database parameter name for the specified server, ServerTypeCode is equal Ord(SDDatabase.ServerType).
GetDataSourceNames
Declaration
function GetDataSourceNames(List: TStrings): Integer;
Purpose
List is filled by ODBC datasources, which are registered in the system.
GetDBInfoAttachedUsers
Declaration
function GetDBInfoAttachedUsers(DbHandle: PSDHandleRec): TStrings;
Purpose
Return users, which currently connected to Interbase/Firebird server. The function accepts TSDDatabase.Handle as parameter. It is need to include SDInt unit to use this function.
…..
uses
SDInt;
….
SDDatabase1.Open;
S := GetDBInfoAttachedUsers(SDDatabase1.Handle);
S.Free;

Support
Bug report
If you have any problems send me the following information:
§ what database server (name, version) you use
§ what software database client (SQL*Net, SQLBase Client, Informix CLI, Interbase Client, MS SQL Client, Open Client or DB2 CAE) and its version you use
§ Delphi or C++Builder version
§ Problem description (if it is possible, with sample code)
§ OS version
Notes about modify Oracle8 BLOB/CLOB field types
First, it is necessary to set Oracle8Blobs(it’s necessary for Delphi and C++Builder version 3 and 4) variable to True before bind and execute of the statement with these parameter’s types.
Second, further you have two ways for input a valid UPDATE/INSERT statement.
1. Simplest way is to name a BLOB/CLOB parameter like column in the table. In this way, it’s important to define all parameter’s types before Prepare call. For example:
‘insert into TEST(ID, MEMO) values(:Ident, :MEMO)’
or
‘update TEST set ID=:NewID, MEMO=:MEMO where ID=:OLD_ID’
2. Second way is to use empty_blob/empty_clob functions and RETURNING clause in the statement. For example, below is the modified statements:
‘insert into TEST(ID, MEMO) values( :Ident, empty_clob() ) returning MEMO into :MEMO’ or
‘update TEST set ID=:NewID, MEMO= empty_clob() where ID=:OLD_ID
returning MEMO into :MEMO’
Modify Oracle8 BLOB/CLOB fields using stored procedure
Blob/Clob parameter of a stored procedure has to be declared as input/output.
Create table TEST_TBL(FINT intgere, FLONG BLOB);
Insert into TEST_TBL values(1, NULL);
create or replace procedure ProcUpdateBlob
(
pLob in out BLOB --- it is necessary to return LOB locator to update LOB data
) is
begin
update TEST_TBL set FLONG = empty_blob() where FINT=1 returning FLONG into pLob;
end;
Delphi code to execute a stored procedure:
sp: TSDStoredProc;
….
Sp.StoredPorcName := ‘ProcUpdateBlob’;
Sp.Prepare;
Sp.Params[0].Value := ‘blob data’;
Sp.ExecSQL;
FAQ
SQLBase
F: “Process Activity” screen of SQLBase Server does not show text of the executed command beginning with v.4.2.4.
A: “Process Activity” screen of SQLBase Server shows text of a command only in time of the command compiling (preparing). And in this case the command is executed without Prepare call. I.e. call Prepare method before Open or ExecSQL, if you want to see the command text in “Process Activity” screen of SQLBase Server
Known problems
1. It is impossible to get more then 255 byte for a char/binary column of MS SQL Server 7, so that DB-Lib does not return more then 255 byte for these columns (MS SQL Server 7 truncates data in case of connecting through DB-Library). The reason is the following: Microsoft did not add new features of MS SQL Server 7 for DB-Library.
2. All database connections of applications are lost after using and unloading DLL, which was connected to a database too (MSSQL & DB-Library). By some reason, DB-Library is unloaded incorrectly(dynamically, using FreeLibrary call) and produces AV in main application in case DB-Library calls.
3. If the LONG-column (or LONG RAW) is equal NULL and is located last
in INSERT-statement, then all columns are inserted as NULL (tested
on SQLNet 2.3.2 & Oracle Server 7.3.3).
4. If you get "External Exception C0000008" or "Access Violation" error
with Oracle SQL*Net 2.3.3 that look at the following links:
http://www.borland.com/devsupport/bde/qanda/641.html
or
http://www.borland.com/devsupport/sqllinks/pub-73.html
5. SQLBase incorrectly binds (or converts) DOUBLE program data type, which have the following first digits just after decimal point: 1, 4, 6, 9. Therefore the value like below are incorrectly bound: 1.1; 11.11; 0.4; 0.41; 10.413. For avoid the problem, it is possible to assign a data through TParam.AsString property instead TParam.AsFloat.
6. When you got an error “ORA-04043: object … does not exist” for Oracle8 stored procedure, be sure that you set its full name as <OWNER.NAME> or <OWNER.PACKAGE.NAME>.
7. "ORA-22990: LOB locators cannot span transaction" error is raised when Oracle8 BLOB/CLOB parameters are updated and AUTOCOMMIT database parameter is TRUE. To solve that, it is necessary to set off AUTOCOMMIT parameter or call StartTransaction/Commit explicitly
8. "SQL error code: -504 Cursor unknown" or "SQL error code: -501 Attempt to reclose a closed cursor" errors happen on Interbase/Firebird, when szAUTOCOMMIT is True and Next or Close methods are called, after StartTransaction/Commit/Rollback calls. To exclude the errors:
1) do not use StartTransaction/Commit, when AUTOCOMMIT is set on (True);
2) set AUTOCOMIT database parameter to False.
3) set “DETACH ON FETCHALL” database parameter to True
4) do not use AUTOCOMIT database parameter, in this case commit will be executed after each statement automatically to emulate the autocommit parameter. Also “TRANSACTION RETAINING” database parameter must be equal True or not present to use a default value.
9. DB2 CLI v.8.1 and earlier is not able to return information, that a column is autoincremented.
10. ODBC and OLEDB drivers for MS SQLServer returns an invalid value (0) of affected rows after data modification statements, the table has triggers and parameters are bound at run-time (they are not embedded into the statement). Therefore TSDQuery.RowsAffected returns invalid value in this case. That’s tested with MSSQL ODBC driver v.3.85 and MDAC 2.6 with MSSQL2000.
11. Oracle "ORA-01401: inserted value too large for column" error is raised, when size of updated/inserted data is equal size of updated/inserted CHAR column. It is necessary to use ftFixedChar type for this parameter to avoid this error.
12. Delphi 5 parameters with TParam.DataType = LargeInt can not be assigned 64-bit integer, which has more than 9 numbers, because Delphi 5 variant type does not support Int64.
13. ”Cannot create new connection because in manual or distributed transaction mode.” OLEDB-error, when a row of the large result set is updated in a live mode and single connection mode is off. To avoid the error, it is necessary to set single connection mode(szSINGLECONN database parameter) to True or call FetchAll for the last activated result set (OLEDB & MSSQL)

Latest Changes
Version 5.2.10 (31.10.2007)
§ bugfix: szSKIPPREPARE excludes a preparation of a stored procedure and parameters are not described (OLEDB & MSSQL)
§ bugfix: "ORA-01483: invalid length for DATE or NUMBER bind variable" error, when AsDate is used to assign a datatime parameter (Oracle9)
§ bugfix: call Edit and Cancel for a record, which was inserted and posted, removes the record in cached updates mode
§ bugfix: "SQL error code: -504 Cursor unknown", when szAUTOCOMMIT is True and Next or Close methods are called, after StartTransaction/Commit/Rollback calls. Exclude szAUTOCOMMIT to avoid the error and emulate autocommit behaviour (Interbase, Firebird)
Version 5.2.9 (20.10.2007)
§ szSKIPPREPARE database parameter to exclude preparation of a command and related problems/bugs  of MS SQLServer provider (OLEDB). For example: "Invalid input parameter values..." error.
§ ESDEngineError returns SQLState string (PosgreSQL 8)
§ bugfix: "Table read-only" error, when a table synonym is used in a live query with UpdateMode<>upWhereAll and a primary key exists (Oracle)
§ bugfix: GetTableNames returns only 1st character of a table names, when szMAXSTRINGSIZE < 260 (OLEDB&MSSQL)
§ bugfix: a prepared select-query, which has LIKE predicate with a parameter, returns no record (OLEDB&MSSQL)
§ bugfix: TField.DataSize has invalid value(2*N+1) for VARCHAR(2*N) column (Oracle)
Version 5.2.8 (5.10.2007)
§ szSQLWaitTimeout new database parameter, by default it is equal False (public variable SQLWaitTimeout = 0 by default)
§ bugfix: TSDTable does not use default index to order records, when DefaultIndex = True (TSDTable does not request index info, when DefaultIndex=False and UpdateMode=upWhereAll and IndexName property is empty)
§ bugfix: live query generates an invalid insert statement, when the query has similar fields, like 'ID' and 'ID_MAIN' (Delphi6+)
§ bugfix: OnUpdateRecord handler, which returns UpdateAction=uaSkip, is called repeatedly for the same inserted records
§ bugfix: only the 1-st character of string parameter is stored, when sub-select is executed after Prepare call (OLEDB&MSSQL)
§ bugfix: "Invalid input parameter values..." error, when a prepared query is executed with NULL(empty) parameter value, which is bound to NOT NULL column (OLEDB&MSSQL)
§ bugfix: hourglass cursor is not changed to default, when TSDUpdateSQL Editor is opened first
§ bugfix: hourglass cursor is not changed after Screen.Cursor := crHourGlass; SDDatabase1.Connected := True; Screen.Cursor := crDefault, when SQLWaitTimeout > 0
Version 5.2.7 (27.09.2007)
§ szSTRICTUPDATEMODE database parameter to exclude "Table read-only" error, when the required table does not have a primary keys or unique indexes
§ TSDTable.SetKey/GotoKey methods are supported
§ SQLWaitTimeout new public variable to avoid fleaking cursor, when some queries are executed sequenced (thanks to Rene Schietzel)
§ TSDTable do not request index info, when UpdateMode=upWhereAll and IndexName property is empty, to speed up of opening
§ bugfix: ApplyUpdates hangs, when 2 or more records are inserted
§ bugfix: memory leaks in a live query mode (lost TStringList objects)
§ bugfix: "Access Violation" error, when TSDUpdateSQL Editor is opened
§ bugfix: Assertion failed (SDDEngine.pas, line 3920) or "Record not available locally" error, when Cancel is called in an exception block(without re-raise the exception) after Append/Insert call and "Duplicate record" exception in process of Post call
§ bugfix: unclosed dbprocess structure, when connection to non-existing database is performed (MSSQL)
§ bugfix: “Unknown identificator” error, when TSDTable is activated with a table name (without an owner name), which has duplicates in other schema (Oracle)
§ bugfix: "Table read-only" error, when a live query selects a table name (without an owner name), which has duplicates in other schema (Oracle)
§ bugfix: "Invalid field size" error, when a query with VARCHAR(>255) column is opened (Sybase)
Version 5.2.6 (20.08.2007)
§ szDATABASENAME database parameter is used, when it is not present in RemoteDatabase property (MSSQL, OLEDB, MySQL, PostgreSQL, Sybase)
§ new GetDataSourceNames public function (in SDOdbc unit)
§ performance optimization of a live query with large number of fields
§ TSDTable.CreateTable overwrites an existing table (earlier an error happens)
§ bugfix: error is raised, when CreateTable creates unique index for a primary key (Oracle, MSSQL)
§ bugfix: Locate call with loPartialKey does not found a partial date/time value as string on sorted date/time field (SortRecords(FDATE,..); Locate('02', 'FDATE', [loPartialKey]))
§ bugfix: Locate can not found a record, when variant types of key value and record value are different
§ bugfix: "Duplicate row" error, when ApplyUpdates is called after Delete and Insert records with same key value
§ bugfix: MONEY column is returned as 0 with some international Windows settings (MySQL, PostgreSQL) (Note: MONEY column is updated using a string value with money char)
§ bugfix: "ORA-01406: fetched column value was truncated" error, when NVARCHAR(TWideStringField) column follows in select-list after DATE (not TIMESTAMP) column (Oracle9+)
Version 5.2.5 (5.07.2007)
§ bugfix: default value of TSDQuery.CachedUpdates is False
Version 5.2.4 (1.07.2007)
§ bugfix: "Incorrectly formed filter expression" error, when Filter value contains value of ftLargeint type
§ bugfix: AssertionFailure(D:/.../SDUpdSEd.pas, line 528), when TSDUpdateSQL is not assigned to a dataset
§ bugfix: exception in FreeParamsBuffer, when a statement like below "update TABLE ... returning FLOB_COL=:FLOB_COL" is executed (Oracle9+)
§ bugfix: Cancel does not restore old Blob value, when Blob is modified before other fields
§ bugfix: "SDQuery: Cannot perform this operation on a closed dataset" error, when a field is added in Field Editor (in design-time) for TSDQuery with Options=[doFetchAllOnOpen]
§ bugfix: MONEY column is returned as 0 (PostgreSQL) (Note: MONEY column is updated using string value with money char)
§ bugfix: TIMESTAMP column is returned as string field (MySQL)
§ bugfix: "Could not convert variant of type(String) into type (Date)" error, when Locate with a string value is called for a date/time-field, which is sorted
Version 5.2.3 (15.05.2007)
§ TSQLTimestampField is overrided to display correctly it's value without microsecond in a grid, when szENABLETIMESTAMP=True
§ performance of TSDQuery.ParamByName is improved, when more than 20 parameters are used
§ bugfix: 'invalid transaction handle' error, when a command without result set and parameters is executed w/o Prepare (IB/FB)
§ bugfix: to minimize network trips, save version value in TIMssDatabase.GetServerVersion (MSSQL)
Version 5.2.2 (3.05.2007)
§ bugfix: Locate('COL1'..., [loPartialKey]) does not work after SortRecords('COL1', .., 'False'), when COL1 is a string field
§ bugfix: 'TICustomOdbcCommand.CnvtDBDateTime: DstSize < SizeOf(TDateTimeRec)' assertion, when DATE or TIME field is used (ODBC)
§ bugfix: an invalid statement is executed, when TSDTable.Filter contains a column in brackets, like '[COL=...]'
Version 5.2.1 (1.05.2007)
§ Delphi 2007 support
§ TWideStringField support (MySQL, PostgreSQL)
§ TSQLTimestampField support (DB2, ODBC, Delphi6+)
§ szENABLETIMESTAMP database parameter (default=False)
§ szLOCALCHARSET database parameter is supported for MySQL, PostreSQL
§ TSDTable.Filter property is added in WHERE clause of SQL command (for BDE-compatibility)
§ bugfix: "Invalid variant operation" error, when a live query with UpdateMode=upWhereAll saves NULL-value for TLargeintField (NUMERIC(X, 0)) (Delphi 5 and below)
§ bugfix: SafeArrayTypeMismatchException is raised, when function TIMssDatabase.GetServerVersion is called in .NET enviroment (MSSQL)
§ bugfix: TSDDatabase.GetFieldNames() returns only 1-st char of names like 'd.s' (MSSQL2005 & ODBC/OLEDB)
§ bugfix: "Record not found" error, when Locate is called on a sorted dataset
§ bugfix: Locate('COL1'..., [loCaseInsensitive]) works incorrectly(inversely) after SortRecords('COL1', ..), when COL1 is a string field
§ bugfix: "Data conversion is not implemented.. Float->Currency" error, when TCurrencyField persistent field is used for NUMERIC(x,y) column (PostreSQL)
Version 5.2 (2.04.2007)
§ Firebird 2 support
§ new method TSDDataSet.OpenEx
§ new method TSDDataSet.LocatePrior
§ new property TSDDataSet.Sorted property
§ new property TSDDataSet.Options = [doKeepSorting, doDetachOnFetchAll, doFetchAllOnOpen]
§ new database parameters: szFETCHALLONOPEN, szDETACHONFETCHALL
§ removed TSDDataSet.DetachOnFetchAll property, This property is automatically converted to the corresponding TSDDataSet.Options
§ TWideStringField support (ODBC & MSSQL/Oracle, OLEDB, Oracle)
§ new szUNICODESTRING database parameter to support unicode fields
§ new parameters stPrimaryKeys, stForeignKeys of TSDDatabase.GetSchemaInfo method
§ live query uses primary key info at first instead of index info only earlier
§ Locate uses info about sort fields for quick search (when SortRecords or 'ORDER BY' clause are used)
§ sorting inserted/modified locally records (when dataset is sorted and doKeepSorting is set)
§ TLargeIntField support NUMBER(20) with precision up 19 significant digits
§ load OCI.DLL, which is the first available in PATH variable, instead of highest installed library like: oraclient10.dll, oraclient9.dll or oraclient8.dll (Oracle8-10)
§ transaction handle is closed, when no statements are executed or opened (IB/FB)
§ monitor shows the following properties of ESDEngineError: NativeError, ErrorPos, LostConnection, SQLState, when they have non-default or non-empty values
§ bugfix: transaction with isolation level tiReadCommitted can not read(locked) rows, which are locked by the other transaction (IB/FB)
§ bugfix: assertion, when TSDTable.ApplyUpdates is called, but UpdateObject property or OnUpdateRecord event are not assigned
§ bugfix: Cancel in AfterPost handler duplicates the posted record (when RequestLive = True)
§ bugfix: '[DBNETLIB][ConnectionWrite (send()).]...' error (nNativeError=11) is not considered as lost connection
§ bugfix: fields with Required = True are posted without an exception (D6 and above)
§ bugfix: memory and resource leaks (interface is not destroyed), when a shared connection was used (OLEDB & MSSQL)
§ bugfix: TSDDataSet.LoadFromFile read incorrectly Required and ReadOnly properies of field definitions
§ bugfix: 'Unknown datatype for parameter OLD_XXX' error, when a query saves rows in a table with field names like OLD_XXX in a live or cached updates modes
§ bugfix: LoadFromFile does not load the last data row, after which CR does not follow
§ bugfix: GetSchemaInfo(stTable, ...) returns incorrectly 'TABLE_TYPE' field value (Interebase/FB, SQLBase)
§ bugfix: 'Token unknown ..' error, when GetSchemaInfo(stColumns, ...) is called (Interbase v.6)
§ bugfix: sort order is changed, when sorted columns are moved in TDBGrid
§ bugfix: 'Record not found or changed...' error, when a key field is used with a column alias in the select-list
Version 5.1.5 (20.11.2006)
§ bugfix: 'Table read only' error with a statement like 'select COL1,COL2...' (columns without spaces) or '..where..(1=1)..'
§ 'Table read only' exception includes a table name, when it is possible
Version 5.1.4 (3.11.2006)
§ new ESDIntError.SQLCode property is added to check the returned code (Interbase, Firebird)
§ new ESDOleDbError.SqlState property (OLEDB)
§ new szANSITOOEM database parameter to set DBANSItoOEM and DBOEMtoANSI options (MSSQL)
§ TSDDatabase.Assign duplicates propertiers of other TSDDatabase component
§ bugfix: infinite loop, when a live query has 'ORDER BY' clause with 2 or more fields
§ bugfix: TSDDataSet.Refresh has memory leaks for blob fields
§ bugfix: NextResultSet raises an error, when the next result set is returned (OLEDB, ODBC)
§ bugfix: infinite loop is reported, when a blob parameter of some (unknown) size is stored (ODBC)
§ bugfix: Currency and LargeInt parameters are not supported (Oracle)
§ bugfix: assigning the last record number to TSDDataSet.RecNo works incorrectly after <OpenEmpty and First> calls
Version 5.1.3 (25.09.2006)
§ szSTRICTUPDATE database parameter is added to exclude checking number of affected rows in process of ApplyUpdates
§ szSTRICTLIVEQUERY database parameter is added to allow more than 1 table in select-list of a live query
§ szCACHEDUPDATES parameter is added to set off all default created or loaded TSDDataSet.CachedUpdates properties (for compatibility with BDE components)
§ bugfix: "Table read only" error in case of " SELECT..." statement (space character before SELECT keyword)
§ bugfix: syntax error in a live query like: "...FROM table1 AS T1 LEFT JOIN table2 AS T2 ON ..", when "Table read-only” must be raised (MySQL)
§ bugfix: "ORA-01401: inserted value too large for column" error, when size of updated/inserted ftFixedChar-parameter is equal size of inserted/updated CHAR column (Oracle)
§ bugfix: "CLI0109E String data right truncated" error, when maximum size of data is inserted/updated (DB2, ODBC)
§ bugfix: "0321 Insert/update value is too large" error, when maximum size of data is inserted/updated (SQLBase)
§ bugfix: lost connection (SQLSTATE=40003 - communication failure error) is not detected (DB2)
§ bugfix: "Table is read-only" error, when column names are quoted
§ bugfix: lost connection event closes offline queries, which can stay active in this case
Version 5.1.2 (1.08.2006)
§ bugfix: TSDDatabase.Connected is True, when connection is lost
§ bugfix: AfterReconnect is not fired, when connection is restored
§ bugfix: error 303 on Win2K when optimization compiler option is set on(IB/Firebird)
§ bugfix: 'The handle is invalid' error, when query is activated in Delphi 2006 for NET(Interbase/Firebird)
Version 5.1.1 (26.07.2006)
§ bugfix: TSDQuery.CachedUpdates property is stored incorrectly in dfm-file
§ bugfix: TSDStoredProc does not display RAISEERROR message (OLEDB & MSSQL)
§ bugfix: AV, when an application with an activated TSDTable component is stopped (Interbase)
Version 5.1.0 (21.07.2006)
§ C++Builder 2006 support
§ lost connection handling (TSDDatabase has new ReconnectTimeout property, WaitReconnect method, AfterReconnect, OnLostConnectError, OnReconnectError events)
§ ftFixedChar parameter is supported (also TField.FixedChar is set, when this info is available)
§ BOOLEAN datatype is supported for Interbase 7.x
§ forbid to connect TSDDataSet with unknown DatabaseName value, i.e. TSDDatabase has to exist with the same DatabaseName
§ TField.Required is equal False always, when DataType = ftAutoInc (for BDE compatibility)
§ new TSDDataSet.FindField, which is a few quickly than Fields.FindField, TSDDataSet.FieldByName method is accelerated a few
§ new public GetDBInfoAttachedUsers() function in SDInt unit to return active users string list. The function requires Handle of active TSDDatabase as parameter (Interbase/Firebird)
§ TSDDataSet can assign data from TStrings. When the dataset has more than 1 persistent field, data has to be separated using CSVFieldDelimiter
§ TSDUpdateSQL editor generates statements without owner name for Interbase/Firebird
§ szLOGINTIMEOUT database parameter is supported for Interbase/Firebird
§ szRTRIMCHAROUTPUT database parameter is supported for MySQL, PostgreSQL
§ CachedUpdates is published property now. CachedUpdates and RequestLive can be equal True in one time, CachedUpdates is primary (it's used UpdateMode value to generate statements)
§ monitor shows error text and the statement, which produces the error
§ error message contains error code for MySQL
§ bugfix: OpenEmpty does not use the current valid statement, when an incorrect statement was executed with error before
§ bugfix: 'Table is read-only', when a query looks like 'select#0D...' (CR after SELECT)
§ bugfix: position in a dataset is changed, when Edit, Post methods are called on the unmodified record
§ bugfix: 'Function sequence error', when function with a result set is opened (Informix)
§ bugfix: 'error -104 Invalid command', when a live query is activated (Interbase 7.x)
§ bugfix: TSDDatabase.GetSchemaInfo(stColumns...) does not show INT64-columns (Interbase, Firebird)
§ bugfix: '..error -104 Token unknown..', when a table component with the owner name is posted (Interbase/Firebird)
§ bugfix: AV, when procedure with output parameters is executed (Interbase7)
§ bugfix: the last char of output string parameter is truncated (OLEDB & MSSQL)
§ bugfix: 'Record changed by another user' error, when Prepare, Open, Edit and Post are called for a live query(the table has an index) in single conection mode (MSSQL, ODBC&MSSQL)
§ bugfix: TSDDatabase.Close does not release some handles as reported by Windows TaskManager (OLEDB&MSSQL)
§ bugfix: 'Error 2014: Commands out of sync...', when a query is opened after TSDDatabase.GetSchemaInfo call (MySQL)
Version 5.0.1 (1.04.2006)
§ szPREFETCHROWS is supported for MySQL connection: query can fetch the result set row-by-row from the server or retrieve the entire result at execution time (MySQL)
§ bugfix: "00324-Invalid program bind variable" error, when a query with parameters is executed (D2006 for Win32 & SQLBase)
§ bugfix: "8145:@ is not a parameter for procedure" error, when a stored procedure with parameters is executed (D2006 for Win32 & SQLServer)
§ bugfix: AV, when a query with VARCHAR(>255) is closed and szMAXSTRINGSIZE is not used (Oracle8+)
§ bugfix: string field shows NULL and empty value incorrectly (MySQL)
§ bugfix: monitor receives a statement without CRLF
§ bugfix: procedure without a result set is executed twice, when Prepare, ExecProc are called (MSSQL)
§ bugfix: TSDDataSet.Refresh method returns empty result set, when it was opened without Prepare call (MySQL, PostgreSQL)
§ bugfix: error, when the linked tables, which have different master and detail field names, are activated
§ table components without indexes are refreshed more quickly (indexes is not read repeatedly)
§ bugfix: when a form with an active monitor component is opened in designer, then 'Cannot perform .. on active monitor' exception is raised, when TraceOptions is read from form
§ bugfix: 'error -104 Token unknown - char 24' error, when Params is clicked in Object Inspector and StoredProcName includes an owner name (Interbase/Firebird)
Version 5.0 (15.02.2006)
§ Delphi 2006 support
§ trace-support in a file or monitor for Win32-applications
§ new TSDDataSet.Assign method, which creates a copy of other dataset (if source is not active, then FieldDefs is copied)
§ TSDDataSet.OpenEmpty can work in offline, when the database component is disconnected at all (it is equal to a memory dataset)
§ new methods of TSDDataSet: LoadFromFile, LoadFromStream, SaveToStream, SaveToFile to load/store the result set using CSV-file/stream
§ new TSDDataSet.CancelExec method, which is supported by Oracle7, Oracle8, ODBC, DB2, Informix, OLEDB
§ new methods of TSDBlobStream: SaveToFile, LoadFromFile
§ szMAXSTRINGSIZE database parameter is supported for OLEDB, Oracle 7, 8+
§ BIT datatype is supported as TBooleanField (MySQL5)
§ new FieldTypeToSQLDataTypeMap public variable to turn up a behaviour of TSDTable.CreateTable method
§ bugfix: “Record changed” error did not happen, when ApplyUpdates updates 0 rows
§ bugfix: "Record not found", when SortRecords is called and query does not have visible rows in filter mode
§ bugfix: setting of TSDTable.IndexFieldNames value does not change a record sorting
§ bugfix: at desing-time delays in case of TSDTable.TableName editing (for each character), when a database has many tables
§ bugfix: AV, when a table component, which uses a primary key with more than 1 fields, is closed (IB, Firebird)
§ bugfix: "Unexpended end of command" error happens in case of TSDDatabase.GetSchemaInfo(stPackages..) call (Firebird, IB)
§ bugfix: "SQLDA missing or incorrect version..." (error code=-804), when a statement with a leading space is executed like ' update...' (IB, Firebird)
§ bugfix: TSDUpdateSQL editor does not show fields of primary key, which contains 2 and more fields (Firebird, IB, Oracle)
§ bugfix: TSDUpdateSQL editor generated statements with trailing spaces in field names (Firebird, IB)
§ bugfix:list of TSDTable.TableName is empty in Object Inspector, when non-default session is used
§ bugfix: "Multiple-step OLEDB ..errors" error, when GetSchema() is called (OLEDB & MS Access)
§ bugfix: AV, when TSDTable.CreateTable is called (OLEDB & MSSQL)
§ bugfix: "BIGINT field is not supported" error, when query with this field is activated (OLEDB & MSSQL)
§ bugfix: only integer(<=4byte size) field can be created as TAutoIncField, which has 4 byte size (ODBC)
§ bugfix: "Cannot update, .. is not owned by ..", when TSDDatabase.ApplyUpdates is called after OpenEmpty
§ bugfix: SMALLINT, TINYINT datatypes were returned as TIntegerField (instead of TSmallintField) (MySQL)
§ bugfix: TBlobField is not updated as NULL (empty string is stored) in case of ApplyUpdates (MSSQL)
§ bugfix: "Accessor is invalid" error, when a command is executed (OLEDB & FoxPro)
§ bugfix: output string parameters were truncated at 255 chars without szMAXCHARPARAMLEN parameter. Request and store max output length of procedure parameters in InitParamsList (DB2, ODBC)
§ bugfix: DECIMAL/NUMERIC columns were described as TStringField (MySQL5)
Version 4.2.9 (30.09.2005)
§ TField.DefaultExpression is supported
§ szTRANSNOWAIT parameter (Interbase, Firebird)
§ TSDDatabase.SetHandle is implemented (OLEDB)
§ bugfix: AV, when a query is refreshed after Detach or OpenEmpty is called (Interbase)
§ bugfix: autocommit is set off after StartTransaction/Commit calls (Interbase, Firebird)
§ bugfix: AV, when persistent TStringField.Size is less than actual column size
§ bugfix: TSDTable modifies all record in the table, when UpdateMode property is upWhereKeyOnly (MySQL)
§ bugfix: error, when record is inserted in a table ‘user’ using TSDTable (MySQL)
§ bugfix: AV, when a stored procedure with inline parameters (ex.: sp_t @p=1) is executed using TSDQuery (Sybase)
§ read Sybase Open Client version from the registry to exclude creation of sybinit.err in time of login (Sybase)
§ bugfix: 'Token unknown' error, when TSDTable.IndexName property is clicked at Object Inspector and TableName property contains an object name (Interbase)
§ bugfix: 'Table exists' error, when TSDTable.CreateTable is used (Interbase, Firebird)
§ bugfix: unmatched CoInitialize/CoUninitialize calls, when some database components are used in the different threads (OLEDB)
§ bugfix: 'Table read only' error, when a live query is activated and the table is not found
§ bugfix: error 10038 ('pending results'), when prepared query is activated repeatedly and single connection mode set off (MSSQL)
§ bugfix: "Client-Library error 16843068: ct_options()...routine has been called at an illegal time.", when szTDSPACKETSIZE parameter is used (Sybase)
§ bugfix: AV in some case, when procedure returns output string parameters and it is executed repeatedly (MSSQL)
Version 4.2.8 (15.08.2005)
§ new database parameter szMAXBLOBSIZE (ODBC)
§ try to load Firebird client using a registry item first (Firebird)
§ bugfix: query with blobs allocates unused memory depending on maximum size of blob fields (MySQL)
§ bugfix: invalid rows are displayed, when prepared query with PREFETCH ROWS parameter is refreshed (ODBC)
§ bugfix: "Invalid statement handle" error in the application, when DLL with a shared DB handle is closed (Interbase)
§ bugfix: when Filter property has a value like "COL_ID in (1, 2, 3)", it works like the Filter is equal "COL_ID = 1"
§ bugfix: in sigle connection mode the following sequence: q2.Open; q1.Close; q1.Open; q2.Close; destroys the result set of q1 component (MSSQL)
§ bugfix: memory leak, when the detached query is refreshed
§ bugfix: "Incorrect syntax near ':'" error, when parameter names are quoted (ODBC, OLEDB)
§ bugfix: parameter name is parsed incorrectly in the following case '...where :param=1...'
§ bugfix: a conversion error, when a smallint value is selected and is returned as a persistent integer field
Version 4.2.7 (2.07.2005)
§ "Select Primary Keys" button in TSDUpdateSQL editor (it uses the first unique index, when the primary key is not available)
§ bugfix: TSDQuery.Delete method removes a record, even if CanModify property is False
§ bugfix: input varchar parameters of stored procedure are padded up parameter length (MSSQL&OLEDB)
§ bugfix: now TSDUpdateSQL editor shows dataset fields at first, instead of all table fields as it was earlier
§ bugfix: memory can be overrided, when string parameter is bound (OLEDB)
§ bugfix: AV in rtl70.bpl, when TSDSript is placed at a form, which is an ancestor for other form in the project
§ bugfix: TSDScript does not store Macros property at design-time
§ bugfix: "Function sequence error" error or procedure w/o parameters is executed twice, when TSDStoredProc opens(w/o Prepare) a procedure without a result set (ASA&ODBC)
Version 4.2.6 (10.06.2005)
§ new szTRANSRETAINING database parameter to set off commit/rollback retaining (IB/FB)
§ bugfix: "Function sequence error", when a procedure with an output parameter is executed (OLEDB, ODBC&MSSQL)
§ bugfix: "List index out of bounds", when TSDTable.IndexFieldNames contains more fields than MasterFields property
Version 4.2.5 (20.05.2005)
§ new szANSINULLS database parameter to set ANSI_NULLS setting (MSSQL)
§ bugfix: "Update failed" error (RowsAffected has an invalid value), when ApplyUpdates is called (MSSQL)
§ bugfix: a query parameter, which is assigned using AsDate, stores a date part only to the database (MSSQL, Sybase)
§ bugfix: "Fatal error: No diagnostic data in TICustomOdbcDatabase.CheckHandle", when query with a Blob parameter is executed (ODBC)
§ bugfix: invalid result of detail dataset
Version 4.2.4 (13.05.2005)
§ new TSDDatabase.TestConnected method
§ direct(without prepare phase) execution is supported, when a server supports this feature
§ new szSERVERCURSOR database parameter (OLEDB, ODBC)
§ new szBYTE16ASGUID database parameter to support TGuidField (SQLServer)
§ “CREATE DATABASE” statement could be processed (Interbase, Firebird)
§ source files has defines(sqldir.inc) to exclude unused server supports to minimize application/library size
§ MySQL API call(mysql_insert_id) is used to get autoincrement value to avoid an execution of statement for this purpose (MySQL)
§ bugfix: "Error creating cursor handle", when the first result set of an opened procedure is void, but it has other result sets (OLEDB & ODBC with MS SQLServer)
§ bugfix: TSDTable.IndexDefs does not contain an option of primary key (IB, Firebird)
§ bugfix: "Fieldtype of XXX is not supported" error (in TParam.GetDataSize), when Post for live query with LargeInt field is executed (IB)
Version 4.2.3 (9.04.2005)
§ szTDSPACKETSIZE parameter is supported for OLEDB provider for MSSQL
§ stProcedureParameters support as parameter in GetSchemaInfo (Interbase/Firebird, OLEDB, ODBC, MSSQL, Sybase)
§ bugfix: assertion in TIOleDbDatabase.SPDescriptionAvailable, when TSDStorecProc.Params clicked at design-time
§ bugfix: "Parameter name is unrecognized"(DB_E_BADPARAMETERNAME) error, when query with sub-select has some parameters with one name
§ bugfix: "Data conversion is not implemented for datatype Integer (TSDDataSet.ISqlCnvtFieldData)" error, when persistent fields differ from actual column datatypes
§ bugfix: "Invalid OCI handle" or AV error, when value of RemoteDatabase property is invalid (Oracle8+)
§ bugfix: TSDDatabase.GetProcNames does not return names of procedures without parameters (MSSQL, Sybase)
§ SD_OleDb_D5 dcu/hpp/obj files are included in D5&CB5 installations
Version 4.2.2 (2.04.2005)
§ szSINGLECONN parameter is supported (OLEDB & MSSQL)
§ bugfix: string parameter is updates as empty value (OLEDB & MSSQL)
§ bugfix: GUID field value is output incorrectly (OLEDB & MSSQL)
§ bugfix: GUID field value is output in braces (like, '{xxx..xx}') (ODBC & MSSQL)
§ handler is added for "The system cannot find message for error -2147217887" error in connection time, when some properties are not supported (OLEDB&Oracle)
§ bugfix: AV, when a query (with DetachOnFetchAll=True) is opened and Rollback called (MSSQL)
§ bugfix: "SQL Server Message 911 : Could not locate entry in sysdatabases for database xxx" error, when a database name contains spaces or other delimiters and szSINGLECONN parameter is set off (MSSQL)
§ bugfix: "Invalid OCI handle" or AV error, when a query with BLOB/CLOB field is fetched or closed (D4 & Oracle8)
§ bugfix: "Invalid field size" error, when GetSchemaInfo(stTables..) is called (D4 & Oracle8)
§ bugfix: "SQLSTATE=42000;Parameter Information cannot be derived from SQL statement with sub-select" error, when a query with sub-select is executed (OLEDB & MSSQL)
§ bugfix: "SQLSTATE=HY000; Connection is busy with results for another command" error, when stored procedure is executed (set on szSINGLECONN parameter)
§ bugfix: the statement is executed once, when ExecSQL is called twice or more for a prepared query (PostgreSQL)
§ bugfix: trailing spaces up column size for VARCHAR column happens sometimes (Oracle8+ client)
§ bugfix: vclado50.bpl is required, when Delphi/CB5 Pro does not have this package.
Version 4.2.1 (12.03.2005)
§ bugfix: error “TISqlCommand.GetHandle is not implemented”
§ bugfix: Delphi 7 crashes, when TSDUpdateSQL double clicked at design-time
§ bugfix: SDOleDb.obj is not included in Library file for BCB5&6
§ bugfix: Conflict with ADO components package in Delphi 5
Version 4.2 (5.03.2005)
§ Delphi 2005 support
§ OLEDB support (except for Delphi 4, 8 and 9 for .NET)
§ PostgreSQL 8 support
§ new szUseOLEDB database parameter for MSSQL (by default, it is equal False)
§ new szBLOBPIECESIZE database parameter to change piece size, which is used to read/write blobs (default value is $7FF0)
§ bugfix: “Out of memory” errors, when records are fetched with MySQL 5 client
§ bugfix: assign to RecNo works incorrectly in cached updates mode, when the previous record was deleted and was not applied
§ bugfix: macro name is equal "cProcName(10)" for a statement like: call %cProcName(10)
§ bugfix: "Unknown data type for parameter 'OLD_'" error, when a dataset with a field 'OLD_' is updated
§ bugfix: "AV .. . Read of address 00000056", when 3 or more BLOBs are inserted/updated in a statement (Oracle 8.x or Oracle9i, when temporary LOBs are not used)
§ bugfix: to exclude 'Overflow error' with VARCHAR(32K), TFieldDesc.DataSize is declared as Integer
§ GetTableNames and GetSchemaInfo(stTables or stSysTables) returns an empty result set for MS Excel ODBC driver (tested with v.4.00.6200). Now these methods returns all tables to exclude the feature of MS Excel driver.
§ bugfix: TSDScript raises an error, when a TermChar value is embedded in a string value inside the script
§ bugfix: GetSchemaInfo could raise a "SQLWNTM.DLL not found", when TSDDatabase.SessionName is not empty
§ Thanks to R.Cerny for fixes and offers inside of SDOdbc and SDMss (to process errors in multithreaded MSSQL applications) units
Version 4.1.3 (24.12.2004)
§ new properties MacroCheck and ParamCheck for TSDScript. (by default, it is equal True)
§ it is possible to use an owner pattern in GetTableNames (Interbase, Firebird, Oracle, MSSQL, Sybase)
§ using temporary LOBs to update/insert BLOB/CLOB parameters (Oracle9i+)
§ bugfix: live query did not save BLOB/CLOB fields (Oracle8+)
§ bugfix: FilterOptions was not considered, when Filter property has condition without an asterisk (*) (for example: COL='AA')
§ bugfix: TSDDataSet.RecNo returns 1 (has to be 0), when TSDDataSet.IsEmpty is True
§ bugfix: SortRecords works incorrectly in cached updates, when all records were removed and one was inserted before SortRecords call
§ bugfix: "Error = -804: ..incorrect number/type of variables", when procedure with NUMERIC/DECIMAL parameter (which has size 2 or 4 bytes) is executed (Interbase, Firebird)
§ bugfix: v.4.1.2 slows a performance in ApplyUpdates
Version 4.1.2 (1.12.2004)
§ bugfix: incorrect field description with MySQL 4.1(+) client
§ bugfix: impossible to Append records after the following code sequence: OpenEmpty, Append, SortRecords
§ bugfix: "Invalid argument" error, when Locate method with 2 or more fields is used
§ bugfix: memory leak: TISqlDatabase does not free its TStringList
§ bugfix: "Invalid value for ServerType property" error, when TSDDatabase.Handle is assigned
§ bugfix: "Attempt to reclose a closed cursor" error, when Query.FieldDefs.Update is called (Interbase)
§ bugfix: "Invalid pointer operation" error, when a smallint parameter is used
§ bugfix: TSDTable does not show non-unique indexes in the IndexDefs property (Interbase, Firebird)
Version 4.1.1 (20.11.2004)
§ trimmed the last character of VARCHAR2 column with Oracle8 client
§ GUID/uniqueidentifier datatype support (ODBC)
Version 4.1 (15.11.2004)
§ Oracle10g support
§ new method TSDDataSet.SortRecords
§ TSDScript supports macros (new properties and methods)
§ new global function GetSQLDirectVersion
§ RecNo property is assigned for newly inserted (but not applied) records
§ bugfix: AV, when query with VARCHAR(>8K) is opened (IB, Firebird)
§ bugfix: Locate/LocateNext work incorrectly with loPartialKey option, for example, when KeyValues = 'abc' and a table contains 'ab', 'abc' values
§ bugfix: AV, when 'Login failed for user ..' error has to showed (D7&MSSQL)
§ bugfix: random results for procedure output-parameters (Oracle8)
§ bugfix: RecNo is equal 0 always, when CHAR/VARCHAR column is last in the SELECT-list (Oracle)
§ bugfix: when some records were deleted, RecNo values of the following (after deleted) records are not valid
§ bugfix: EConvertError is raised, when SYSDATETIME/SYSTIME is selected (SQLBase)
Version 4.0.1 (30.10.2004)
§ Locate/LocateNext can search non-string values with loPartialKey option
§ bugfix: macro value was reset, when statement was changed but without changing macro name
§ bugfix: Locate/LocateNext work incorrectly with KeyValues, which is equal empty string; Locate/LocateNext stops search, when one of string field contains empty string
§ bugfix: Locate/LocateNext work incorrectly with non-english strings (extended charsets)
§ bugfix: 'Attempt to reclose cursor' error is raised, when actually 'Permission denied..' to execute statement (IB)
§ bugfix: '..arithmetic overflow...' error, when integer value is bound sometimes (Firebird, IB)
§ bugfix: 'System error 0' is showed when right-click over SQLDirect component in Delphi 8 Form designer
§ bugfix: 'Cannot perform this operation on a closed dataset' error in some cases, when szSINGLECONN parameter is True
§ bugfix: AV, when query like 'select TABLE .* from TABLE' is activated in a live mode
§ bugfix: 'Table read-only', when query like 'select TABLE . * from TABLE' is activated in a live mode
Version 4.0 (15.10.2004)
§ Delphi 8 for Microsoft .NET support
§ Delphi 3/C++Builder3 support was stopped
§ INTERVAL datatypes support (Oracle9i, Informix)
§ new szQUOTE_IDENT database parameter to use quoted (delimited) identifiers for automatically generated statements of a live querys and a table component
§ new szEMPTYSTRASNULL database parameter (default is False) to treat empty string as NULL for parameter's values (Sybase)
§ szENABLEBCD database parameter is supported for Sybase
§ TPtr type is renamed to TSDPtr to exclude ambiguity error
§ TField.Required property is set off, when TSDDataSet.AutoRefresh is on and TFieldDef.FieldType = ftAutoInc
§ bugfix: set linked fields values for a detail table component from master fields
§ bugfix: AV, when some stored procedures (TSDStoredProc) return string parameters (Sybase)
§ bugfix: AV, when a query is detached and RefreshRecord is called
§ bugfix: AV, when ExecProc(without Prepare) is called for procedure with RAISERROR statement (MSSQL)
§ bugfix: DB-Library error 10008, when the second result set is requested (MSSQL)
§ bugfix: TSDDataSet.RecNo = 0, when a record was inserted and was not refreshed, for a live query
§ bugfix: some of default database parameters were not set (Informix)
§ bugfix: set TParam,ParamType to ptInput if it is equal ptUnknown, when TSDQuery.ExecSQL is called
§ bugfix: "Invalid column name 'isnullable', 'xusertype'" error, when GetFieldNames method is called (MSSQL v6)
§ bugfix: error like "Invalid table name", when a live query with nested subquery is updated
§ bugfix: TSDDataSet.Refresh method returns empty result set (Sybase)
§ bugfix: query shows invalid data, when OpenEmpty, Close, Open are called and fields order is changed in Field Editor (ASA&ODBC)
§ bugfix: TSDStoredProc.Params editor is opened empty always (D5+)
Version 3.2.3 (30.06.2004)
§ bugfix: parameter (with DataType is equal ftAutoInc) is bound incorrectly (MSSQL)
§ empty string parameter is bound as NULL for both TSDQuery and TSDStoredProc (earlier for TSDStoredPorc only) (Sybase)
§ bugfix: stored procedure returns NULL value for the output parameter incorrectly (Sybase)
§ bugfix: LastDay procedure returns invalid value for February 2000
§ bugfix: in connection string Userid tag is not recognized like UID; excluded double semicolons ';;' in connection string (ODBC)
§ bugfix: AV or External exception is raised in single connection mode, when a query is activated after the second one (with DetachOnFetchAll=True) was activated and was not fetched before (MSSQL)
§ bugfix: the trailing spaces are removed for output parameter values of stored procedures, when szRTRIMCHAROUTPUT is set to True (Interbase, Firebird)
§ bugfix: Locate method changes position in a result set, when length of the current string value is less then the specified one
§ bugfix: "Invalid column name 'status2'" error, when a procedure is selected from list in Object Inspector (Sybase ASE 11.x)
Version 3.2.2 (17.06.2004)
§ new ESDSqlLibError exception, which is raised when an error occurs loading a database client
§ live query uses StarTransaction/Commit inside Post method, when autocommit is off
§ bugfix: the following sequence Prepare, ExecSQL, ExecSQL executes statement once (MSSQL)
§ bugfix: invalid login, when connection string with parameters does not contain user, password (ODBC)
§ bugfix: AV, when persistent TStringField.DataSize is less, than actual column size in the database (TISqlCommand.GetCnvtFieldData)
Version 3.2.1 (5.06.2004)
§ new method: TSDDataSet.RefreshRecordEx() to refresh the current record only using the specified SQL.
§ new szFIELDREQUIRED database parameter, which specifies a value of Required property of all Tfield
§ bugfix: TSDScript executed the first statement twice in some cases
§ bugfix: AV, when script is executed with error
§ bugfix: MS SQLServer returns a valid value of column number (SQLNumResultCols) only after execution for a query with a parameter like 'select (select COUNT(*) from TABLE where F = :p) from TABLE' (ODBC+MSSQL)
§ bugfix: AppendRecord/InsertRecord do not insert a record in a database for table and live query
§ bugfix: AV happens, when a stored procedure with a datetime parameter is executed (Oracle9)
§ bugfix: "Pending results", in case of Refresh call and single connection database parameter is false (MSSQL)
§ bugfix: an exception is not showed, when RAISEERROR statement is used in procedure (Sybase)
§ live query is prohibited, when it's result set contains only blobs
§ live query is prohibited, when it's result set does not contain index fields and UpdateMode in [upWhereKeyOnly, upWhereChanged]
Version 3.2 (15.05.2004)
§ new property RefreshSQL of TSDUpdateSQL component to refresh the current record
§ new method: TSDDataSet.RefreshRecord to refresh the current record only.
§ IDENTITY field is supported (MSSQL, Sybase(ASA), DB2, ODBC, MySQL)
§ new property TSDDataSet.AutoRefresh to refresh an autoincrement field for live query and for cached updates mode
§ new property: TSDDatabase.DesignOptions
§ szPREFETCHROWS database parameter is supported for DB2, Informix and ODBC
§ TSDDataSet.RecNo is read/write property now
§ new "XXX API LIBRARY" database parameter to set an interface library for the different servers, where XXX server type, for example, Oracle, SQLServer, Interbase or other.
§ If UpdateObject is assigned to TSDUpdateSQL component, then it is used to save data of a live query
§ changes in TSDUpdateSQL interface: QueryEx[] and SQL[] properties is indexed by values of TUpdateStatus
§ added "Quote Field Name" checkbox and RefreshSQL value are added in editor of TSDUpdateSQL component
§ bugfix: error "Ora 1036 Illegal variable name/number", when procedure is executed and 'FORCE OCI7=TRUE' (Oracle)
§ Oracle 7&8 DATE and Oracle9 TIIMESTAMP columns are processed both as TDateTimeField in contrast to v.3.1.1
§ bugfix: index with some fields in descending order was stored incorrectly in TSDTable.UpdateIndexDescs
§ bugfix: char/varchar(255) was considered as blob with default value of szMAXSTRINGSIZE parameter (ODBC)
§ bugfix: only CHAR column is trimmed if szRTRIMCHAROUTPUT is TRUE. VARCHAR is returned without changes (Oracle)
§ bugfix: a table with some detail fields do not work correctly (TSDTable.SetLinkRanges)
§ bugfix: "Invalid OCI handle" error when procedure with Blob/Clob parameter is executed (Oracle8)
§ bugfix: error "A component named SQLxxxxxxxxxx already exists" occurs when TSDTable is opened for a table with a primary key, which contains of more than one column (DB2)
Version 3.1.2 (15.04.2004)
§ bugfix: stored procedure do not return output parameters (and do not release a connection), when it uses cursors (ODBC+MSSQL)
§ bugfix: error, when Boolean column is updated (PostgreSQL)
§ bugfix: TSDBlobStream truncates data, which is written after positon was changed
§ bugfix: “Record changed by another user” error happens, when Edit/Post are called twice for a live query or a table
Version 3.1.1 (25.03.2004)
§ new szPREFETCHROWS database parameter for Oracle8
§ Oracle9i TIMESTAMP datatype is supported (Oracle9i): TIMESTAMP column is processed as TDateTimeField, DATE - as TDateField for Oracle9i
§ ExecProc fetches output parameters without GetResults call (MSSQL, Sybase)
§ bugfix: 'Table is read only' error, when a live query uses a table alias in WHERE clause
§ bugfix: memory leak, when Oracle8 connection is disactivated (in TIOra8Database.FreeHandle)
§ bugfix: memory leak, when Informix connection is disactivated (in TICustomOdbcDatabase.DoConnect)
§ bugfix: an exception is not showed, when a trigger raises an user-defined error using RAISERROR statement (Sybase)
§ bugfix: GetSchemaInfo(stIndexes, ..) generate an "Client-Library error 411: ..", when a table do not have indexes (Sybase)
§ bugfix: incomplete read of blob, when size > 32KB (Oracle ODBC driver)
§ bugfix: TEXT data is not read (Informix 7.3 on Linux)
§ bugfix: an index with some fields was stored incorrectly for TSDTable component
§ bugfix: "Connection is busy with results for another hstmt" error, when two queries are opening in single connection mode (MSSQL+ODBC)
Version 3.1 (01.03.2004)
§ TSDScript component is added
§ TSDTable.MasterSource property is supported
§ szCOMPRESSEDPROT database parameter is added, which defines whether to use the compressed client/server protocol for MySQL
§ szLOGINTIMEOUT database parameter is supported for MySQL
§ szENCRYPTION database parameter is added to support an encrypted password handshaking (Sybase)
§ bugfix: output parameters of a stored procedure are not returned (Sybase)
§ bugfix: AV or "Invalid pointer operation" error, when a query with DECIMAL column is closed (SQLBase)
§ bugfix: TSDDatabase.GetTableNames/GetStoredProcNames methods return object names with preceding point, when an owner name is not present (ODBC)
§ bugfix: when AUTOCOMMIT database parameter is used, it impossible to read blobs larger than 4096 bytes (MSSQL)
§ bugfix: a record of a table or a live query with a blob field is not stored, if only the blob field is changed
§ bugfix: stored procedure component does not return a result set, when it is produced (DB2, MSSQL , ODBC)
§ bugfix: invalid symbols at the end of a field value, when VARCHAR(>255) column is returned as TMemoField (DB2, ODBC)
§ OpenEmpty is not supported and raises an exception for Delphi 4 and below
§ bugfix: an exception happens, when result sets of two stored procedure are fetched concurrently (Sybase)
§ bugfix: an exception is not showed, when procedure raises an user-defined error, for example, RAISERROR (ODBC+MSSQL)
§ default datetime format is changed to 'yyyymmdd hh:mi:ss:nnn' in TISybCommand.CnvtDateTimeToSQLVarChar (Sybase)
§ bugfix: "Ambiguity between stFirebird and Sdcommon::stFirebird", when TSDDatabase.ServerType property is assigned in BCBuilder5
Version 3.0.3 (20.12.2003)
§ bugfix: “No SQL statement available” error, when TSDMacroQuery does not have a macro
§ bugfix: AV, when a SQLBase client library is not found
§ bugfix: AV, when TSDTable.IndexName list is requested (DB2)
§ bugfix: AV sometimes, when a query with blob field is opened (PostgreSQL)
§ bugfix: “SQLDA missing or incorrect version” error, when TSDQuery.Refresh is called (Interbase)
§ bugfix: “SQL0104N An unexpected token ..” error, when a live query (with spaces between a column name and a column delimiter, for example: "COL_NAME ,") is modified (DB2)
§ bugfix: “SQL0104N An unexpected token ..” error, when a live query (which is activated using Prepare, Open calls) is modified (DB2)
§ bugfix: a prepared query is not executed repeatedly (MSSQL, Sybase)
§ bugfix: silent (without an exceptions) post a record in a live query if the record is changed by other application
§ bugfix: size of Blob piece (for read/write process) is changed from $7FFF to $7FF0 to exclude an alignment influence (ODBC, Oracle7, SQLBase)
Version 3.0.2 (01.12.2003)
§ szMAXSTRINGSIZE parameter is added to use VARCHAR(>255) column as TStringField or TMemoField (Interbase, Firebird)
§ Boolean parameter is supported (ODBC)
§ bugfix: AV happens when query with REAL datatype is closed (MSSQL)
§ bugfix: error "Table is read only", when live result set with key is opened (ODBC)
§ bugfix: update fails for a live query with calculated fields
§ bugfix: assertion raises in TICustomIntDatabase.GetTRHandle, when fbclient.dll is not found (Firebird)
§ bugfix: AV happens when an empty VARCHAR(>255) column is read (Firebird)
Version 3.0.1 (25.11.2003)
§ bugfix: number fields, which are equal NULL, are returned as 0 (MSSQL)
§ bugfix: truncated strings are returned
§ bugfix: Refresh corrupts a result set (MSSQL)
§ bugfix: repeated statement execution, when ExecSQL is called (MySQL)
§ bugfix: record is not updated when an old value (and new value <> null) of a key field is equal null in a live result set
§ add SDCommon unit in uses clause of DataMod.pas (QueryUpd project)
Version 3.0 (17.11.2003)
§ TSDMacroQuery, TSDTable components are added
§ Firebird 1.5 and MySQL 4.1 support
§ TSDQuery.RequestLive property is added (it is supported for Delphi 5+)
§ Filter property is supported for Delphi 5+
§ TSDQuery/TSDDataSet.OpenEmpty method is added to open a result set without server data (it is supported for Delphi 5+)
§ TSDDataSet.LocateNext method is added to continue row locating
§ TSDDatabase. GetSchemaInfo function to get metadata
§ all database parameter constants (for example, szSERVERPORT) are moved in SDConsts unit
§ szSERVERPORT database parameter is used for PostgreSQL
§ szENABLEMONEY database parameter is added to use NUM(x,1-4) as a money field (TCurrencyField) for MySQL
§ szFORCEOCI7 is added instead of ForceOCI7 variable
§ szMAXCHARPARAMLEN is added to increase buffer size of procedure’s string parameters
§ szMAXFIELDNAMELEN is added to increase length of the stored field names
§ "connect with no recovery" SQLBase feature is accessible using szTRANSLOGGING database parameter (SQLBase)
§ public variables ForceOCI7 and MinStrParamSize are removed
§ TSDDataSet.Preservation property is removed
§ bugfix: "Unknown datatype for parameter" error in process of Open/ExecSQL call when a parameter is assigned using AsCurrency property (DB2, ODBC, SQLBase)
§ bugfix: excluding a lower case converting of a procedure name in <CALL ....> SpPrepareProc, it's significant for case sensitive database (ODBC)
§ bugfix: GetTableNames supports Pattern parameter (Sybase, IB)
§ bugfix: input procedure parameters are padded spaces up max length (MSSQL2K)
§ bugfix: if AUTOCOMMIT database parameter is not defined and ODBC driver has an autocommit set on by default, then an explicit transaction was not turn off an autocommit (ODBC, Informix)
§ bugfix: Oracle7 client was return trailing spaces for VARCHAR column (Oracle7)
§ bugfix: error 504, when AUTOCOMMIT is True and a query is activated inside StartTransaction/Rollback and it's used outside of the transaction (IB)
§ bugfix: when IMPLICIT_TRANSACTION is ON at server, application was not free locks after Commit call: AUTOCOMMIT parameter value is used to change this connection attribute (MSSQL)
Version 2.9.7 (01.10.2002)
§ Delphi 7 support
§ MAXFIELDNAMELEN database parameter is added for compatibility with BDE, which returns only 30 characters of the field name (Oracle)
§ bugfix: AfterScroll/BeforeScroll handlers are fired in process of ApplyUpdates
§ bugfix: SqlDateToDateTime/SqlTimeToDateTime procedures (SDEngine unit) returns an invalid date, when it is less than 12/30/1899 (MySQL/PostgreSQL)
§ bugfix: TIMyDataSet/TIPgDataSet.CnvtDateTime2SqlString has to return '1899-12-30' , if Trunc(Value) is equal 0 (MySQL/PostgreSQL)
§ bugfix: "Invalid handle.." error in case of Refresh call for prepared TSDQuery after Rollback (ODBC+Access)
§ bugfix: BOOLEAN datatype returns False always (PostgreSQL)
§ bugfix: stored procedure with output BLOB/CLOB raised "ORA-3131..." error (Oracle8)
§ bugfix: GetTableFieldNames do not support a full table name with schema(owner) name (DB2)
§ bugfix: "Field not found" error in case of a statement with 2 blob fields with one name (Oracle)
§ bugfix: when one dll has closed all connection, other dll raises AV when it try to close own connection (MSSQL)
§ bugfix: transaction level is not set for separate connection of TSDQuery component (with SELECT statement) (MSSQL)
Version 2.9.6 (26.08.2002)
§ bugfix: a thread timer is not destroyed in UpdateTimer, when TSDDatabase.IdleTimeOut <> 0
§ declarations of property editors is moved in interface part of SDReg unit
§ fixed an assertion “function 'pqresetStart' not found in PostgreSQL library” is removed (PostgreSQL)
§ Oracle DLL is loaded using the first available one in PATH variable, which is changed by Oracle home selector
§ rollback the current explicit (started by StartTransaction call and is not ended by Commit/Rollback) transaction, when a database connection is closed (DB2)
§ bugfix: “Fatal error: Invalid handle ...” error happens in case of open of a prepared query after rollback call (DB2)
§ bugfix: sometimes AV in multithreaded application in LoadSqlLib at ct_con_alloc call (Sybase 12.5)
§ bugfix: “Pending results..” error when one dataset is in edit mode(all rows are not fetched) and other one is opened (MSSQL)
§ bugfix: the stored procedure is executed twice in case of ExecProc call (DB2)
§ Transaction Monitor support for Oracle8i (added 'XA CONNECTION' database parameter)
Version 2.9.5 (05.07.2002)
§ bugfix: record is not saved, when it's values are set into OnNewRecord handler
§ bugfix: invalid version detection for Oracle9i client (Oracle9i)
§ bugfix: detail query with an additional parameter, which is set manually, is looking the corresponded field in the master query
§ bugfix: “Operation not applicable” error, in case of a master-detail relation and detail query is unidirectional
§ bugfix: TIMESTAMP datatype is not supported in PostgreSQL 7.2 (PostgreSQL)
§ bugfix: “value is not a date” error in case of inserting of the following parameters 14.8.1872-21.09.1899 (inclusive) (SQLBase)
§ bugfix: When AUTOCOMMIT is set ON, then StartTransaction/Commit calls produce "Cursor unknown" error(504) for the following fetch operation (IB)
Version 2.9.4 (30.05.2002)
§ SERVER PORT database parameter is added (MySQL)
§ fixed AV, which is produced by GetRecordCount, when DetachOnFetchAll is True
§ fixed: TSDQuery.RecordCount has an invalid value after Delete and ApplyUpdates calls
§ fixed an assertion, when. PSSetParams is called and the query is not prepared
§ fixed: RowsAffected property shows incorrect value, because the server does not update really rows with non-modified values (for example, RowsAffected=0, when <update TABLE set COL=COL where ...>) (MySQL)
§ fixed an assertion in line 1808 (SDMss.pas), when MSSQL DB-Library is not found (MSSQL)
§ fixed error: when connection is dropped during a transaction, it's impossible to start transaction after reconnecting
§ TSDSession.InternalAddDatabase adds or changes (on the last values) database parameters
§ fixed: CancelUpdates does not revert initial blob data, when it was modified more than once
§ some optimization in TSDQuery.RefreshParams method (query is not reopened when it's possible, it means for master-detail forms)
§ fixed: the current position of the filtered dataset is changed after ApplyUpdates
§ fixed: an empty Blob(IMAGE) data was inserted as 0x00 (changed to NULL) (MSSQL)
Thanks to Ben van Mierlo and Robert Cerny for all things.
Version 2.9.3 (20.04.2002)
§ Borland C++Builder 6 support
§ COMMAND TIMEOUT database option is added (MSSQL, ODBC, SQLBase, Sybase)
§ connect as SYSDBA/SYSOPER feature (Oracle8)
§ NEW PASSWORD database parameter is added to process a "Password expiration" Oracle error 28001 and change the expired password (Oracle8)
§ fixed: TSDDatabase.GetTableNames method does not support Pattern parameter (MSSQL)
§ do not change an autocommit ODBC-option, when an autocommit(szAUTOCOMMIT) database parameter is not set (ODBC)
§ fixed "ORA-01008: not all variables bound" when TSDStoredProc.FieldDefs.Update method is called for the inactive procedure with a cursor parameter (Oracle)
§ fixed "Invalid pointer error" or AV, when a large string parameter is returned by a stored procedure (DB2, ODBC)
§ ForceClose involves an endless loop, when a connection is dropped (IB)
§ fixed: parameter handling is case sensitive (DB2, Informix, ODBC)
§ fixed displaying wrong BLOB when a result set has some blob fields and Fields have a different order then FieldDefs (IB)
§ fixed: TParam.Value property is changed from Null to Unassigned value after ExecProc, when an output parameter is NULL (Oracle)
§ some fixes, concerning an interaction with MIDAS
Version 2.9.2 (20.02.2002)
§ support Sybase 12 features (for example, varchar(>255))
§ fixed an error, when a blob column is not the last in a select-list (Sybase)
§ fixed "Integer overflow" error, when record size is bigger 64Kb
§ fixed "Function sequence error", if UPDATE/DELETE statement does not find at least one record (some Informix versions)
§ fixed a problem, when TSDDatabase.Params could be lost when LoginPrompt is True
§ fixed an "Error reading SDDatabase1.DatabaseName: Duplicate database name '...' " in case of creating an inherited form
§ don't disconnect a long-running statement, when IdleTimeOut 's elapsed.
§ fixed a problem, when a statement contains a quoted string with a single quote, for example: "quoted strin'g"
§ fixed an error: no row is returned, when a result set contains NULL value and aggregate function (DB2)
Version 2.9.1 (25.01.2002)
§ New session SQLWaitCursor property to change a cursor during database operations
§ Fixed: an error 'ORA-01008: not all variables bound' happens, when prepared query is executed (Oracle)
§ Fixed: GetTableNames does not support Pattern parameter (Oracle)
§ Fixed AV, when string data exceeds a field size (data is truncated up a field size) (MySQL)
Version 2.9 (10.01.2002)
§ PostgreSQL support
§ New database’s property: TSDDatabase.IdleTimeOut (drops an idle database connection through the specified timeout)
§ New dataset’s property: TSDDataSet.UniDirectional
§ New dataset’s method: TSDDataSet.RollbackUpdates
§ In filter mode TSDQuery.RecordCount shows number of visible records only (not all)
§ fixed: error 241 'scale error during implicit conversion of NUMERIC value '10.2200000000000001' , when 10.22 is inserted (Sybase)
§ quoted database name is supported (MSSQL)
Version 2.8.5 (30.11.2001)
§ szLOGINTIMEOUT database option is added (MSSQL, DB2, Informix, ODBC, Sybase)
§ fixed error 'SET AUTOCOMMIT = 0 at line 1' (MySQL version <= 3.22)
§ fixed: string parameter was binded incorrectly (MSSQL)
§ TSDQuery component with a statement ‘{call PROC()}’ cannot return a result set from stored procedure (DB2)
§ TSDQuery.FieldDefs.Update does not return field descriptions for a non-active query with a procedure like ‘{call PROC()}’, i.e. at design-time Field Editor cannot see fields of the non-active query, which calls a procedure (DB2)
Version 2.8.4 (15.11.2001)
§ Locate method worked incorrectly with loPartialKey option
§ BIGINT column is supported (MySQL)
§ fixed a memory leak: TSDFieldDescList object is not freed when an invalid query is opened
§ FindNext returned False, when a result set is not fetched completely
§ ApplyUpdates raised ASSERT when the last visible row is deleted
§ "Datetime field overflow" error when datetime and integer values are inserted/modified in one statement (ODBC&MSSQL)
§ fixed AV when NextResultSet is called and TSDStoredProc is activated without Prepare call (Sybase)
§ at design-time TSDUpdateSQL cannot get field names when a table name is casesensitive (IB6)
§ fixed "Invalid Pointer Operation" error when a DATE parameter was the last parameter in a statement (IB6)
§ fixed AV in case of disconnecting: excluded OCITerminate call, which produced AV with some Oracle 8.0.5 and below and which is obsolete call for Oracle 8.1 (Oracle 8.0.4, some 8.0.5 clients)
§ fixed "No parameter type for parameter ..." exception, which is raised in MIDAS environment when TClientDataSet is used in master/detail relationship.
§ fixed StrRTrim function: sometimes "Integer Overflow" error in StrRTrim (DB2)
§ string parameter is binded as variable-length(was fixed-length) character string (ODBC & MSSQL)
Version 2.8.3 (15.10.2001)
§ <SINGLE CONNECTION> database option is supported for ODBC
§ turn off autocommit(when it's set to True) in time of an explicit transaction (StartTransaction/Commit calls)
§ fixed: cursor position is changed randomly after ApplyUpdates
§ fixed sometimes AV in TSDDatabase.Commit method
§ fixed assertion (in SDInt.pas, line 4126) when a blob column is updated (IB)
§ fixed AV when stored procedure component with string parameters is freed (Oracle)
§ fixed a ‘Fatal error’ or AV in case a query is dynamically executed (MSSQL & Sybase)
§ fixed an assertion when an output char procedure's parameter is empty (MSSQL)
§ fixed sometime AV and RowsAffected is returned incorrectly when a query is executed (MySQL & BCB 3&4)
§ fixed "Numeric value out of range" error when BigInt has a big value(>4*10^9) (DB2)
§ fixed "Datetime field overflow" error when datetime value is inserted (ODBC&MSSQL)
§ fixed "String data, length mismatch" error (ODBC&MSSQL)
Version 2.8.2 (15.09.2001)
§ added AUTOCOMMIT database parameter
§ fixed: impossible to insert a record, which is not in a filter range, in the filtered dataset
§ implemented a Direct Execution when statement is performed (ExecSQL) without preparing (prior Prepare call) (ODBC)
§ fixed 'Optional feature not implemented' error in case of double-click on TSDUpdateSQL (ODBC & MS Acces)
§ fixed AV when libmysql.dll is not found (MySQL)
§ fixed: TDBRichEdit stores data incorrectly in the database (MSSQL, Sybase)
§ fixed 'ct_cancel has been called at an illegal time' error right after “Login fail” (Sybase)
§ fixed error ("Command is idle" or "Pending results"): when single connection is in use and one query is executed right after other one was opened (MSSQL & Sybase)
§ ESDEngineError.NativeError property contains a valid SQL error code (earlier it contains Interbase error code) (IB)
§ fixed: an empty(NULL) parameter is inserted as not NULL (Interbase)
§ MakeValidStatement (SDOra.pas) does not remove CR to work correctly with encrypted PL/SQL (Oracle)
§ fixed ORA-01480 when a string parameter of a stored procedure is longer than 255 (Oracle)
§ fixed problems with lowcase parameter names in master-detail relationship
Version 2.8.1 (30.07.2001)
§ fixed: the prepared query is not executed repeatedly (MSSQL)
§ fixed cursor leaks (MSSQL)
§ fixed 'Fatal Eror. No diagnostic data ...' during connect (Informix)
§ GetTableNames (and GetStoredProcNames) returns an empty list instead of AV when database name is unknown
§ fixed 'Unknown datatype for parameter ...' for DATE parameter (IB6)
§ fixed problem with NUMERIC(18,2) in stored procedure (IB6)
§ fixed AV in case of disconnecting from Oracle7 using Net7
§ single connection option is supported with Sybase
§ fixed hangup when stored procedure is opening (Sybase)
§ excluded <ambiguity between TUpdateAction and Db::TUpdateAction> error in BCB5, when set OnUpdateRecord event handler
Version 2.8 (15.07.2001)
§ Delphi 6 support
§ MySQL support
§ New database’s method: ForceClose (drops database connection without an exception in case of network problem)
§ TSDDatabase.Handle property is writable.
§ New dataset’s method: Detach (result set is active without server connection)
§ New dataset’s properties: DetachOnFetchAll, EnableUpdateKinds
§ Memo/Blob parameter with zero-length is equal NULL (Sybase)
§ fixed error in case of one of some query is closed and single connection is active (MSSQL, Sybase)
§ fixed memory leak in processing LOB columns (Oracle8)
§ fixed error: non-empty blob field is empty, when is placed in a statement after varchar(32K) (IB)
§ image column is updated without temporary procedure (MSSQL)
§ fixed assertion failure in SDMss.pas when stored procedure has some output parameter (MSSQL)
§ fixed AV in case of repeated Rollback and some datasets are active (DB2)
§ fixed Client-Library error 290 in case of executing batch with select statement (Sybase)
Version 2.7.5 (10.05.2001)
§ support 'SINGLE CONNECTION' database option to use one process handle for all operation for Sybase
§ added trimming of trailing spaces for char type (Sybase)
§ increased a fetch perfomance (Oracle8 client)
§ fixed errors in time of Rollback and close a result set when SINGLE CONNECTION is used (MSSQL)
§ identification nchar/nvarchar stored procedure’s parameters (MSSQL7+)
§ fixed MSSQL error: returns an incorrect(non-existent) parameter name, when procedure use WRITETEXT statement (MSSQL)
Version 2.7.4 (5.04.2001)
§ VARCHAR datatype with size more than 8K is considered as Memo field (IB5,6)
§ fixed errors in case of DATE and TIME datatypes (IB6)
§ added a database parameter 'SINGLE CONNECTION' to use one process handle for all operation (MSSQL)
§ added DBSETSECURE option in case of NT Athentication (MSSQL)
§ fixed a problem with similar parameter names in update/insert statements, which contain blob parameters (MSSQL)
§ fixed a delay problem in case of close a big result set (MSSQL)
§ TSDQuery is opened in context of the current database for the associated TSDDatabase (MSSQL)
§ fixed an error with an empty result set, which has aggregate function with NULL value (Oracle8i client).
§ OS authentication is used, when user password is empty (Oracle)
§ fixed the following error: in filter mode Locate raises exception in case of record is not found
Version 2.7.3 (15.01.2001)
§ support TVarBytes field and parameter for CHAR WITH BIT option (DB2)
§ fixed "invalid attribute error" instead of the required error (Oracle8)
§ fixed CompareBookmarks method, which worked incorrectly with IP2000 in some cases
§ fixed AV when TSDDatabase.ApplyUpdates has empty array parameter
§ fixed 'Incorrect values within SQLDA-structure' message when same of field (from SELECT) has not persistent field (Interbase)
§ automatically fetch all rows before Commit/Rollback, which destroys a result set (ODBC, Informix, IB5 (for rollback))
§ using isc_commit_retaining method and isc_rollback_retaing for v.6 (IB) to preserve cursor after Commit/Rollback
§ fixed incorrect work in case using 'ENABLE BCD' and ‘ENABLE INTS’ database parameters for Oracle
§ tiDirtyRead (RL) transaction level preserves cursor after rollback (SQLBase)
Version 2.7.2 (20.09.2000)
§ added 'ENABLE BCD' database parameter to enable to use BCD field (Oracle, Interbase)
§ fixed: ApplyUpdates does not update Blob/Memo field ('Update failed' message) (MSSQL)
§ fixed AV in case of performing the stored procedure without input parameters (Interbase)
§ fixed ASSERT is raised when a procedure with a result set/output parameters is performing (Informix)
§ fixed ASSERT is raised in Delphi 3 when insert contains empty string (Interbase)
§ fixed AV when UpdateSQL editor is opening in case of using non-default session for the associated dataset.
§ It is enable to silent save a modified SQL text when TSDQuery is active, in this case TSDQuery is closed
Version 2.7.1 (01.09.2000)
§ add charset, role name and sql dialect database parameters (Interbase)
§ szRTRIMCHAROUTPUT influences on a char datatype output (Interbase)
§ a field name is equal an field alias with AS keyword (Interbase)
§ fixed AV in time of open a query with lookup field (MSSQL)
§ added horz scrollbars for field lists in a TSDUpdateSQL editor
§ fixed AV, which appears sometimes in a stored procedure with string parameter (Oracle)
Version 2.7 (10.08.2000)
§ Interbase support
§ added Close method for TSDSession component
§ added TESDEngineError.ErrorPos property, which means for Oracle 7&8, SQLBase, MSSQL servers
§ editor for TSDUpdateSQL sets Modified flag after changing statements
§ raised exception when RAISERROR operator is performed in a procedure (Sybase)
§ fixed recycling in case of execute an empty statement (MSSQL & Sybase)
§ fixed problem in case reading text/image fields from view (MSSQL)
§ fixed garbage in case of tinyint column (MSSQL)
§ binary/char datatypes with size more then 255 are considered as Blob/Memo (ODBC & ASA6 driver)
§ fixed incorrect pointer when reading blob/binary data for some drivers (ODBC)
Version 2.6.5 (10.04.2000)
§ C++Builder 5 support
§ fixed a problem in a name resolution of stored procedure (Oracle8)
§ TSDUpdateSQL uses the session name of the associated dataset
§ fixed garbage in an empty string field
Version 2.6.4 (26.03.2000)
§ added Session and DBSession properties for TSDDataset and it’s descendants
§ support Oracle8 ROWID pseudo-column (Oracle8)
§ support update/insert some Blob column in one statement - it’s not need to add by hand RETURNING clause (Oracle8)
§ support an execution of a stored procedure from a package (Oracle8)
§ added a database parameter for TDS packet size (Sybase)
§ optimization of Blob reading (MSSQL)
§ support binary/varbinary parameters for a stored procedure (MSSQL)
§ fixed an incorrect binding for a cursor parameter in Delphi 5 (Oracle8)
§ fixed the problem with similar parameter’s names (MSSQL, Sybase)
§ fixed an incorrect size for bit/boolean column (MS Access ODBC driver)
Thanks to Chris Means, Darwin O’Connor, Michael C. Lamb and Robert Cerny for all things.
Version 2.6.3 (01.02.2000)
§ added BFILE support (Oracle8)
§ added Backup/Restore database possibility for SQLBase
§ fixed AV in case of insertion a row in a result set with calculated fields
§ fixed "Invalid state cursor" error in time of Refresh call (ODBC, DB2)
§ fixed “Option is not supported” error (Paradox ODBC driver)
§ fixed silent stop of fetch when data is truncated (SQLBase)
§ in case of StoredProcName property click, TSDStoredProc uses incorrectly an instance of TSDDatabase component, which associates with a persistent TSDSession component
Thanks to Cerny Robert, Gerd Michael Hoffmann , Mickey Hsieh for bug reports and suggestions.
Version 2.6.2 (22.12.1999)
§ added a trimming of trailing spaces for fixed char type (Informix or ODBC)
§ fixed an incorrectly size(1 byte increased) of TMemoField (ODBC)
§ fixed "Fatal error: No diagnostic data.." for a statement like “insert into … select…” (ODBC)
§ fixed “Client-Library error 411...” in time of execute(ExecProc method) a stored procedure without a result set (Sybase)
§ fixed memory leaks with blob fields
Version 2.6.1 (12.12.1999)
The update fixes the following bugs:
§ ‘Option is not supported’ error was raised by MS Access driver (ODBC - MS Access)
§ cutting a last byte in CLOB field (DB2)
§ money datatype (ftCurrency) is not binded in conjunction with text/image parameters (MSSQL)
§ there are not showed a user-defined message from a stored procedure, raised by RAISERROR statement (MSSQL)
§ fields can not be added in Field Editor for TSDStoreProc (MSSQL, Sybase)
§ incorrectly binding, when a parameter's value contains other(follow) parameter's name (MSSQL)
§ in case of Params click, TSDStoredProc uses incorrectly an instance of TSDDatabase component, which associates with a persistent TSDSession component
Version 2.6 (02.12.1999)
§ Informix support
§ ODBC support
§ fixed "DB-Library error 10038: .. results pending" when doing Refresh for an opened quite big result set (MSSQL)
§ changed a default datetime format to 'yyyymmdd hh:mi:ss:nnn' (MSSQL)
§ fixed an error in processing text/image column from a case-sensitivity server (MSSQL)
§ modifications in binding of string parameters
Thanks to Peter Stadelmann, Jompa Cervin, Sven-Erik Еhs for bug reports and suggestions for avoid the errors.
Version 2.5.3 (25.10.1999)
§ optimized processing of record fetching
§ fixed some problems with binary/varbinary columns (MSSQL, Sybase)
§ fixed a resource leak(server detach was missing ) in case of disconnecting from Oracle8 (Oracle, OCI8)
§ support Oracle8i API, when it is available
Version 2.5.2 (10.10.1999)
§ support a provider interface in the implementation for Delphi 5
§ excluded reading of the complete result set in case of ApplyUpdates call
§ excluded a table alias, which is returned by SQLBase, from column header (SQLBase)
§ fixed exception in case of assign empty string for string parameter (MSSQL)
§ corrected right trimming for char fields (Oracle)
Version 2.5.1 (15.09.1999)
§ support Delphi 5
§ implemented Refresh method for reread of result set
§ added a database parameter ('ENABLE INTEGERS') for Oracle
§ fixed exception in case of bind BLOB data type on Oracle8
§ fixed 'Unsupported field type' exception in case of call procedure without parameters from package (Oracle)
§ fixed error, when bind of a string parameter with quote (MSSQL, Sybase)
§ corrected the following behavior: TSDStoredProc.ExecProc does not bind parameters in case of TSDStoredProc.Prepared is equal True, i.e. without UnPrepare call (MSSQL, Sybase)
§ incorrectly bind blob data in Delphi 3
Version 2.5 (25.08.1999)
§ support Oracle8 datatypes like BLOB and CLOB
§ support Microsoft SQL Server 7
§ implemented version(for client and server) properties of the TSDDatabase component
§ some extensions for an association of session and database components
§ new database parameters(RTRIM CHAR OUTPUT, QUOTED IDENTIFIER) for turning of a database behavior (for Oracle, MSSQL and Sybase)
Version 2.4.2 (25.07.1999)
§ fixed <Error loading library ''> exception, which is raised, when SDMss is included before SDEngine
§ support of the quoted identifiers for MSSQL and Sybase
§ parameter's name can be enclosed in double quotation marks and may contain spaces, special and other characters
§ add database’s parameters (szAPPNAME, szHOSTNAME, szMAXCURSORS) for custom changing in application for MSSQL and Sybase
Version 2.4.1 (10.07.1999)
§ fixed an infinite loop, in case of disconnecting after rollback (MSSQL)
§ fixed AV for string output parameter of stored procedure (MSSQL)
Version 2.4 (25.06.1999)
§ IBM DB2 Database connectivity
§ design-time editor for TSDUpdateSQL component
§ fixed bug, in case of retr) of the applied record
Version 2.3.5 (05.06.1999)
§ fixed exception ‘Can not delete temporary stored procedure’ during rollback of blob update (MSSQL)
§ TSDDataSet.RecordCount returned an invalid value after TSDDataSet.Delete
§ fixed problem for the TSDDataSet.Locate call with deleted records and on empty(deleted) result set
§ corrected an attempt to apply record, which was inserted in cache and deleted from cache right away
§ add Error Offset in a parse error message (Oracle)
§ increased default maximum process count (MSSQL)
Version 2.3.4 (24.05.1999)
§ add property UpdateObject for TSDStoredProc component
§ method GetResults of TSDStoredProc component frees a shared handle of the associated TSDDatabase component (for MSSQL and Sybase)
§ fixed an infinite loop when stored procedure fails (for MSSQL)
Version 2.3.3 (10.05.1999)
§ new methods of the TSDStoredProc component: NextResultSet and GetResults
§ multiple result set implemented in TSDStoredProc component (for MSSQL and Sybase)
§ fixed bugs when update a row with text and bit or float datatype (for MSSQL)
§ fixed "Invalid Pointer" exception, when result set with smallint datatype(2byte) was closed (Sybase)
§ improvement of an error processing in the time of Open Client libraries loading (Sybase)
Version 2.3.2 (30.04.1999)
§ implemented block reading, which is used by TDataSetProvider
§ fixed bug when set up an empty ftString-field
Version 2.3.1 (25.04.1999)
§ support bit datatype (for MSSQL and Sybase)
§ fixed bug of the parsing query with JOIN clause and alias using (for MSSQL and Sybase)
§ setting default time part of the internal Oracle DATE type for parameters with ftDate type (Oracle)
Version 2.3 (05.04.1999)
§ Sybase support through Open Client Library
§ support for C++Builder 4
§ at design-time storing of the stored procedure parameters
§ using registry variable in the time of the OCI-library loading (for Oracle)
§ support BINARY_INTEGER datatype for stored procedure parameters (for Oracle)
§ remove CR (0x13) symbol from executable statement, it's necessary to perform PL/SQL blocks (for Oracle)
§ fixed error (ORA-1007) when reopen stored procedure with Cursor parameter at design time (for Oracle)
§ fixed exception, when open a query with equal field name
§ improvement of the query statement parsing with a Blob fields: support JOIN in the FROM clause (for MS SQL)
Version 2.2 (22.01.1999)
§ stored procedure can return result set (for Oracle)
§ fixed invalid size of ROWID (for Oracle)
§ MS SQL Server stored procedure supports Blob parameters
§ added public SrvApiDLLs variable for setting API-library
§ supported images stored by Centura SqlWindows(or Team Developer)
Version 2.1 (15.12.1998)
§ support for C++ Builder 3
§ stored procedure component and money datatype (for MS SQL)
Version 2.02 (25.11.1998)
§ public accessible SqlApiDLL variables
§ valid update empty parameters (for MS SQL Server)
§ using internal parameters with double colon
Version 2.01 (17.11.1998)
§ fixed founded bugs: 'Range Check Error' (for SQLBase)
§ update string with enlarged length (+1)
§ AV when unsuccessful connect
Version 2.0 (14.11.1998)
§ internal reorganization
§ Microsoft SQL Server support
§ record filtering
§ InfoPower-support
§ implemented AppendRecord and InsertRecord methods of DataSet
Version 1.05 (05.09.1998)
§ fixed "List index out of bounds " error after open query with persistent fields
Version 1.04 (24.08.1998)
§ read output parameter of Oracle stored procedure bug
Version 1.03 (21.08.1998)
§ fixed memory leaks and other bugs
Version 1.02 (05.08.1998)
§ fixed the discovered bugs
Version 1.01 (27.07.1998)
§ compatible with Delphi 4
Version 1.0 (10.07.1998)
· new component TSDSQLBaseServer (for SQLBase)
· multi-threading sample
· fixed update error for varchar2(>256) (for Oracle)
· fixed default connect
· design-time editors for TSDataSet and it's descendants

Contents
About SQLDirect................................................................................................................................ 2
Basic features..................................................................................................................................... 2
Licensing issues.................................................................................................................................. 4
Ordering............................................................................................................................................. 4
Installation.......................................................................................................................................... 5
Component install............................................................................................................................. 5
BDE application conversion.............................................................................................................. 5
InfoPower support........................................................................................................................... 5
Database Client Software................................................................................................................. 5
SQLAnywhere connect (OpenClient)............................................................................................ 6
SQLAnywhere connect (ODBC driver)........................................................................................ 6
File description.................................................................................................................................... 7
Demos................................................................................................................................................ 8
QueryUpd....................................................................................................................................... 8
Threads........................................................................................................................................... 8
TSDSession........................................................................................................................................ 9
Methods.......................................................................................................................................... 9
Close........................................................................................................................................... 9
CloseDatabase............................................................................................................................. 9
Create......................................................................................................................................... 9
Destroy....................................................................................................................................... 9
FindDatabase............................................................................................................................. 10
GetDatabaseNames................................................................................................................... 10
GetStoredProcNames................................................................................................................. 10
GetFieldNames.......................................................................................................................... 10
GetTableNames......................................................................................................................... 10
OpenDatabase........................................................................................................................... 11
Properties...................................................................................................................................... 11
Active....................................................................................................................................... 11
AutoSessionName...................................................................................................................... 11
DatabaseCount.......................................................................................................................... 11
Databases.................................................................................................................................. 11
KeepConnections....................................................................................................................... 12
SessionName............................................................................................................................. 12
SQLHourGlass........................................................................................................................... 12
SQLWaitCursor......................................................................................................................... 12
TSDSessionList................................................................................................................................. 12
Methods........................................................................................................................................ 12
FindDatabase............................................................................................................................. 12
FindSession................................................................................................................................ 13
GetSessionNames...................................................................................................................... 13
OpenSession.............................................................................................................................. 13
Properties...................................................................................................................................... 13
Count........................................................................................................................................ 13
List............................................................................................................................................ 13
SessionName............................................................................................................................. 13
TSDDatabase................................................................................................................................... 14
Methods........................................................................................................................................ 14
ApplyUpdates............................................................................................................................ 14
Close......................................................................................................................................... 14
CloseDataSets........................................................................................................................... 14
Commit...................................................................................................................................... 14
Create....................................................................................................................................... 15
Destroy..................................................................................................................................... 15
ForceClose................................................................................................................................ 15
GetFieldNames.......................................................................................................................... 15
GetTableNames......................................................................................................................... 15
GetSchemaInfo.......................................................................................................................... 16
Open......................................................................................................................................... 16
Rollback.................................................................................................................................... 16
StartTransaction......................................................................................................................... 16
StopWaitReconnect.................................................................................................................... 16
TestConnected........................................................................................................................... 17
ValidateName............................................................................................................................ 17
WaitReconnect.......................................................................................................................... 17
Properties...................................................................................................................................... 17
ClientMajor, ClientMinor............................................................................................................. 17
Connected................................................................................................................................. 17
DatabaseName.......................................................................................................................... 18
DataSetCount............................................................................................................................ 18
DataSets.................................................................................................................................... 18
DesignOptions............................................................................................................................ 18
IdleTimeOut............................................................................................................................... 18
InTransaction............................................................................................................................. 18
IsSQLBased.............................................................................................................................. 19
Handle....................................................................................................................................... 19
KeepConnections....................................................................................................................... 19
LoginPrompt.............................................................................................................................. 20
Params...................................................................................................................................... 20
RemoteDatabase........................................................................................................................ 24
ReconnectTimeout..................................................................................................................... 25
ServerMajor, ServerMinor.......................................................................................................... 25
ServerType................................................................................................................................ 25
Session...................................................................................................................................... 26
SessionName............................................................................................................................. 26
Temporary................................................................................................................................. 26
TransIsolation............................................................................................................................ 26
Version...................................................................................................................................... 27
Events........................................................................................................................................... 27
AfterReconnect......................................................................................................................... 27
OnLogin.................................................................................................................................... 27
OnLostConnectError.................................................................................................................. 28
OnReconnectError..................................................................................................................... 28
TSDDataSet..................................................................................................................................... 29
Methods........................................................................................................................................ 29
ApplyUpdates............................................................................................................................ 29
Assign....................................................................................................................................... 29
CancelExec............................................................................................................................... 29
CancelUpdates........................................................................................................................... 29
CommitUpdates......................................................................................................................... 29
RollbackUpdates........................................................................................................................ 30
Create....................................................................................................................................... 30
Detach...................................................................................................................................... 30
Disconnect................................................................................................................................. 31
Destroy..................................................................................................................................... 31
FetchAll..................................................................................................................................... 31
IsSequenced.............................................................................................................................. 31
LoadFromFile / LoadFromStream................................................................................................ 31
Locate....................................................................................................................................... 32
LocateNext, LocatePrior............................................................................................................ 32
Lookup...................................................................................................................................... 33
OpenEmpty................................................................................................................................ 33
OpenEx..................................................................................................................................... 33
RefreshRecord........................................................................................................................... 33
RefreshRecordEx....................................................................................................................... 33
RevertRecord............................................................................................................................ 34
SaveToFile / SaveToStream........................................................................................................ 34
SortRecords............................................................................................................................... 34
UpdateStatus............................................................................................................................. 34
Properties...................................................................................................................................... 35
AutoRefresh.............................................................................................................................. 35
CacheBlobs............................................................................................................................... 35
Database................................................................................................................................... 35
CachedUpdates.......................................................................................................................... 35
DBSession................................................................................................................................. 36
EnableUpdateKinds.................................................................................................................... 36
Filter.......................................................................................................................................... 36
Filtered...................................................................................................................................... 36
Handle....................................................................................................................................... 36
Options...................................................................................................................................... 37
RecNo....................................................................................................................................... 37
SessionName............................................................................................................................. 37
Sorted........................................................................................................................................ 37
UniDirectional............................................................................................................................ 38
UpdateObject............................................................................................................................. 38
UpdateRecordTypes................................................................................................................... 38
UpdatesPending......................................................................................................................... 38
Events........................................................................................................................................... 39
OnFilterRecord.......................................................................................................................... 39
OnUpdateError.......................................................................................................................... 39
OnUpdateRecord....................................................................................................................... 39
TSDMonitor...................................................................................................................................... 41
Properties...................................................................................................................................... 41
Active....................................................................................................................................... 41
FileName................................................................................................................................... 41
TraceOptions............................................................................................................................. 41
TSDQuery........................................................................................................................................ 42
Methods........................................................................................................................................ 42
Create....................................................................................................................................... 42
Destroy..................................................................................................................................... 42
Disconnect................................................................................................................................. 42
ExecSQL................................................................................................................................... 42
ParamByName.......................................................................................................................... 43
Prepare..................................................................................................................................... 43
UnPrepare................................................................................................................................. 43
Properties...................................................................................................................................... 43
DataSource................................................................................................................................ 43
ParamCheck.............................................................................................................................. 43
ParamCount............................................................................................................................... 43
Params...................................................................................................................................... 44
Prepared.................................................................................................................................... 44
RequestLive............................................................................................................................... 44
RowsAffected........................................................................................................................... 44
SQL.......................................................................................................................................... 44
Text.......................................................................................................................................... 45
TSDMacroQuery.............................................................................................................................. 46
Methods........................................................................................................................................ 46
ExpandMacros........................................................................................................................... 46
MacroByName.......................................................................................................................... 46
Properties...................................................................................................................................... 46
MacroChar................................................................................................................................ 46
MacroCount............................................................................................................................... 46
Macros...................................................................................................................................... 46
TSDStoredProc................................................................................................................................. 47
Methods........................................................................................................................................ 47
CopyParams.............................................................................................................................. 47
Create....................................................................................................................................... 47
Destroy..................................................................................................................................... 47
DescriptionsAvailable................................................................................................................. 47
ExecProc................................................................................................................................... 47
GetResults................................................................................................................................. 48
NextResultSet............................................................................................................................ 48
ParamByName.......................................................................................................................... 48
Prepare..................................................................................................................................... 48
UnPrepare................................................................................................................................. 49
Properties...................................................................................................................................... 49
Overload.................................................................................................................................... 49
ParamBindMode........................................................................................................................ 49
ParamCount............................................................................................................................... 49
Params...................................................................................................................................... 49
Prepared.................................................................................................................................... 50
StoredProcName........................................................................................................................ 50
TSDScript......................................................................................................................................... 51
Methods........................................................................................................................................ 51
ExecSQL................................................................................................................................... 51
ExpandMacros........................................................................................................................... 51
MacroByName.......................................................................................................................... 51
ParamByName.......................................................................................................................... 51
Properties...................................................................................................................................... 51
Database................................................................................................................................... 51
DatabaseName.......................................................................................................................... 52
DBSession................................................................................................................................. 52
IgnoreParams............................................................................................................................ 52
MacroChar................................................................................................................................ 52
MacroCheck.............................................................................................................................. 52
MacroCount............................................................................................................................... 52
Macros...................................................................................................................................... 53
ParamCheck.............................................................................................................................. 53
Params...................................................................................................................................... 53
SessionName............................................................................................................................. 53
SQL.......................................................................................................................................... 53
TermChar.................................................................................................................................. 53
Text.......................................................................................................................................... 54
Transaction................................................................................................................................ 54
Events........................................................................................................................................... 54
AfterExecute............................................................................................................................. 54
BeforeExecute........................................................................................................................... 54
TSDTable......................................................................................................................................... 55
Methods........................................................................................................................................ 55
CreateTable............................................................................................................................... 55
DeleteTable............................................................................................................................... 55
EmptyTable............................................................................................................................... 55
GetIndexNames......................................................................................................................... 55
Properties...................................................................................................................................... 55
DefaultIndex.............................................................................................................................. 55
Exists........................................................................................................................................ 56
IndexName................................................................................................................................ 56
IndexFieldNames....................................................................................................................... 56
TableName................................................................................................................................ 56
TSDUpdateSQL................................................................................................................................ 57
Methods........................................................................................................................................ 57
Apply........................................................................................................................................ 57
Create....................................................................................................................................... 57
Destroy..................................................................................................................................... 57
ExecSQL................................................................................................................................... 57
SetParams................................................................................................................................. 57
Properties...................................................................................................................................... 58
DataSet..................................................................................................................................... 58
DeleteSQL................................................................................................................................ 58
InsertSQL.................................................................................................................................. 58
ModifySQL................................................................................................................................ 58
Query........................................................................................................................................ 58
QueryEx.................................................................................................................................... 58
RefreshSQL.............................................................................................................................. 59
SQL.......................................................................................................................................... 59
ESDEngineError................................................................................................................................ 60
Methods........................................................................................................................................ 60
Create....................................................................................................................................... 60
Create....................................................................................................................................... 60
Properties...................................................................................................................................... 60
ErrorCode.................................................................................................................................. 60
ErrorPos.................................................................................................................................... 60
NativeError................................................................................................................................ 60
ESDOdbcError.................................................................................................................................. 61
Methods........................................................................................................................................ 61
CreateWithSqlState.................................................................................................................... 61
Properties...................................................................................................................................... 61
SqlState..................................................................................................................................... 61
ESDMssError................................................................................................................................... 61
Methods........................................................................................................................................ 61
Create....................................................................................................................................... 61
Properties...................................................................................................................................... 61
HProcess................................................................................................................................... 61
ESDSqlLibError................................................................................................................................ 62
TSDCntrBlobField............................................................................................................................. 63
Properties...................................................................................................................................... 63
TSDSQLBaseServer......................................................................................................................... 64
Methods........................................................................................................................................ 64
AbortProcess............................................................................................................................. 64
BackupDatabase........................................................................................................................ 64
CancelRequest........................................................................................................................... 64
Close......................................................................................................................................... 64
Create....................................................................................................................................... 64
CreateDatabase......................................................................................................................... 65
Destroy..................................................................................................................................... 65
DeinstallDatabase...................................................................................................................... 65
DeleteDatabase......................................................................................................................... 65
GetDatabaseNames................................................................................................................... 65
InstallDatabase.......................................................................................................................... 65
Open......................................................................................................................................... 66
RestoreDatabase........................................................................................................................ 66
Shutdown................................................................................................................................... 66
Terminate.................................................................................................................................. 66
Properties...................................................................................................................................... 66
Connected................................................................................................................................. 66
LoginPrompt.............................................................................................................................. 66
Params...................................................................................................................................... 67
ServerName.............................................................................................................................. 67
Events........................................................................................................................................... 67
OnLogin.................................................................................................................................... 67
Global Variables................................................................................................................................ 68
Oracle8Blobs............................................................................................................................. 68
Session...................................................................................................................................... 68
Sessions..................................................................................................................................... 68
InitSqlDatabaseProcs................................................................................................................. 68
SqlApiDLL................................................................................................................................ 68
SQLWaitTimeout....................................................................................................................... 69
Public procedures/functions................................................................................................................ 69
GetSqlDirectVersion................................................................................................................... 69
GetSqlLibParamName................................................................................................................ 69
GetDataSourceNames................................................................................................................ 69
GetDBInfoAttachedUsers.......................................................................................................... 70
Bug report......................................................................................................................................... 71
Notes about modify Oracle8 BLOB/CLOB field types......................................................................... 71
Modify Oracle8 BLOB/CLOB fields using stored procedure................................................................ 71
FAQ................................................................................................................................................. 72
SQLBase...................................................................................................................................... 72
Known problems............................................................................................................................... 72
Latest Changes................................................................................................................................. 74
If you have any question or suggestion, don’t hesitate to contact to author:
Email: info@sqldirect-soft.com
Web:http://www.sqldirect-soft.com
Thank You and Easy connecting!
Yuri Sheino

SQLDirect组件库用户指南相关推荐

  1. Blazor 组件库开发指南

    翻译自 Waqas Anwar 2021年5月21日的文章 <A Developer's Guide To Blazor Component Libraries> [1] Blazor 的 ...

  2. lib60870-IEC 60870-5-101 / 104 C源代码库用户指南-版本2.3.0--第一部分

    lib60870-IEC 60870-5-101 / 104 C源代码库用户指南-版本2.3.0--第一部分 https://github.com/mz-automation/lib60870 介绍 ...

  3. Vue3组件库打包指南,一次生成esm、esm-bundle、commonjs、umd四种格式

    读完本篇,你可以了解到如何将组件库打包成各种格式 上一篇里提到了启动服务前会先进行一下组件库的打包,运行的命令为: varlet-cli compile 显然是varlet-cli提供的一个命令: 处 ...

  4. arm linux arp 支持,当ARP缓存为空 - RL-ARM 实时库用户指南

    ARP协议模块缓存所有接收的IP地址到一个内部缓冲器,它存储着IP地址和以太网地址(MAC). 当应用程序启动时,ARP 缓存缓冲器通常是空的.ARP模块还不知道来自于应用程序的第一个UDP数据包的目 ...

  5. oracle有没有稀疏列,稀疏 BLAS - Oracle® Developer Studio 12.5:性能库用户指南

    稀疏 BLAS Oracle Developer Studio 性能库稀疏 BLAS 软件包基于以下两个软件包: Netlib Sparse BLAS 软件包,由 Dodson, Grimes 和 L ...

  6. 矩阵存储 oracle表,矩阵存储方案 - Oracle® Developer Studio 12.5:性能库用户指南

    矩阵存储方案 对已存储的数组进行处理的某些 Oracle Developer Studio 性能库例程通常具有可利用这些特殊存储形式的相应例程.例如,DGBMV 将构成带状存储中的一般矩阵和向量的积, ...

  7. Deer-ui:一个简单高效的react组件库

    1.前言 自己一直想搭建一套自己的博客系统,今年年末终于有时间开发,在开发后台cms系统时,使用antd组件库,突然一天问自己,组件库是怎么实现的,内部是怎么运行的,打包部署是怎么个原理,带着这些疑问 ...

  8. Vue Injector组件库易于维护和例行测试

    Vue Injector组件库易于维护和例行测试 Vue Injector 是一个组件库,专门设计用于帮助用户在 Vue.js 环境中工作时执行依赖注入.包含一系列专用实例,它将使人们能够实现依赖注入 ...

  9. Xft字体库:体系结构及用户指南(转)

    Xft字体库:体系结构及用户指南(转) Xft字体库:体系结构及用户指南 Keith Packard XFree86 Core Team, SuSE Inc. keithp@keithp.com 本文 ...

最新文章

  1. MikroTik RouterOS使用SATA光驱安装时提示:no CD-ROM found press ENTER to reboot
  2. 表示层 业务逻辑层 数据层(UI BLL DAL)
  3. ORACLE 内部原理
  4. 票务系统思维导图_最全思维导图分享,告诉你如何系统的学好软件测试。
  5. Web安全——易班优课YOOC课群在线测试自动答题解决方案
  6. 操作多个表_6_生成笛卡尔积
  7. 弱类型、强类型、动态类型、静态类型语言的区别
  8. 转:运维监控系统-监控项及指标的梳理
  9. javascript 公历与农历相互转换工具类
  10. 【vue】使用Promise方法保证按顺序执行
  11. js 自动分配金额_深入解析Node.js事件循环工作机制
  12. linux debian安装ssh,Ubuntu Linux上安装SSH和vsFTPd的方法
  13. java历save_日历【savejava吧】_百度贴吧
  14. 【分块】bzoj2120 数颜色
  15. ARFoundation系列讲解-教程目录
  16. Windows影子账户创立
  17. 如何利用eclipse创建一个java web项目?
  18. textarea剩余可输入字数
  19. 【王道】今晚7:30 浙江大学专场,学长学姐帮你指引ZJUCS/SE考研!
  20. 若个人计算机主板上的内存条松动,电脑内存条松动对电脑的影响与解决办法

热门文章

  1. 相同周长的图形,面积最大者是圆
  2. JavaWeb(用IDEA设计登录页面,完成假登录)
  3. SMIC 14 STDCELL库的构成总结
  4. 计算机图形学(1)(基础变换矩阵:缩放,旋转,平移)
  5. 【译】使用python创建一个简单的restful风格的webservice应用
  6. phpwind database.php,phpwind中data目录隐藏功能设置
  7. java 仿 苹果_苹果的最强模仿者soPhone 完全拆卸(多图,大图)
  8. 北通手柄在ros下使用
  9. 华硕K40in加内存报错的解决办法
  10. 京东搭建“千万级消息推送架构”的演进之路