                                  KDBF
                     Database FrameWorks for IDAPI

                                Features
                                ========

The KDBF provides a C++ Class Hierarchy which allows programmers to add
database functionality to their Borland C++ v4.xx 16-bit Windows applications.
Borland C++ v4.0 is the oldest supported compiler as the KDBF makes use of
Exception Handling and Templates. Exceptions are not supported in either
Borland C++ v3.1 or Microsoft VC++ v1.5.

The KDBF has been designed for use with the same data sources that IDAPI
supports. The majority of testing has been done with dBASE and Paradox tables,
but it has also been tested with Oracle, InterBase, and SYBASE.

The KDBF allows encapsulates the majority of the IDAPI functionality: a
complete listing of KDBF functions can be found in the file HIERACH.TXT. As
the whole IDAPI API is not encapsulated, the getHandle() function is provided
to return the IDAPI handle used by each class. This allows the programmer to
access the complete IDAPI API. Note that care should be taken when accessing
the handle outside the class: don't make changes to the handle's properties
outside the class.

One of the ways that the KDBF simplifies the development of IDAPI enabled
applications is that it simplifies the parameter lists to the functions. This
allows the programmer to focus on what is being written, not which parameters
are required....

The KDBF is not officially supported by Borland. It is designed for customer
upgrading from the existing DBF to IDAPI. As such, the only documentation
available is one small text file (HIERARCH.TXT) and the documentation which
came with the shipping DBF.

                             Compatibility
                             =============

While a great deal of effort went into creating a framework as compatible as
possible with the existing Database Framework (DBF) that shipped with the
Paradox Engine, it is not 100% compatible. There are opperations in the
Paradox Engine which are either not required, or do not have a direct mapping,
in IDAPI.

The KDBF is believed to be roughly 95% compatible with the DBF when used with
local tables, and 85% compatible when used with SQL tables, such as InterBase
or Oracle. The KDBF still does not hide driver specific features, such as
which characters are allowed for a field name or the size of a field name.

Brief overviews of known incompatibilities:

 Private BLOB's are not supported in IDAPI - the BLOB must be written to
 the table before it can be manipulated.
 When used with Custom Records, make certain to add a call to BRecord::Clear
 in the Custom Record Clear method.
 Added the pxGreater search option.
 The pxSearchNext search option now has a value of 3 (used to be 1).

 Use of Record Numbers is only supported for dBASE and Paradox tables
 Composite Indexes referenced by ID are only supported for Paradox Tables.
 BDatabase::getIndexID is only supported for Paradox Tables.

 The BCursor::searchIndex() function will only return the DBIERR_RECNOTFOUND
 error when the searchEqual case is used. Success is allways returned for
 the other cases.

 The BCursor::undeleteRecord, BCursor::packTable, and BDatabase::packTable
 functions are only  available with dBASE tables. Use
 BDatabase::restructureTable to pack Paradox tables. 

 Care should be taken when using the BCursor::setFieldMap and
 BCursor::clearFieldMap functions. These functions do not automatically
 update attached BRecord objects, which could cause an incompatibility
 in certain situations (record buffer would be the wrong size).

 Not supported for Local tables:
     BCursor::hasChanged - returnes FALSE
     BDatabase::getSKeyInfo
     BEngine::setHWHandler


 Not supported for SQL tables:
     BDatabase::encryptTable
     BDatabase::decryptTable
     BDatabase::upgradeTable
     BDatabase::restructureTable
     BDatabase::getIndexID
     BDatabase::getSKeyInfo
     BDatabase::packTable

     BCursor::gotoRec(RECORDNUMBER)
     BCursor::getCurRecNum
     BCursor::hasChanged
     BCursor::undeleteRecord
     BCursor::packTable

     BEngine::setHWHandler

     Record locking does not support the use of lock handles.

Do not use the "Put constant strings in code segment" option
when compiling the KDBF. This will cause errors when using
pre-compiled headers.

Certain assumptions are made as to the location of tables and how the
existance of a table is verified. Because of this, only tables in the
currect working directory can be opened. Absolute paths are not
supported when opening tables.

Not all functions are declared as virtual, as was the case in the DBF. This
was done to reduce the size of the V-Table.


                          !!!!! WARNING !!!!!

Use of this product is at your own risk. This is NOT an
official Borland product. This is not an indication of future directions
for a C++ Framework from Borland. This is something that was created as a
test in porting and it is providing to Borland Customers who are interested
in a C++ Framwork for IDAPI or who are interrested in an example of porting
from the Paradox Engine to IDAPI.


               !!! Standard Technical Support Disclaimer !!!

DISCLAIMER: You have the right to use this technical information
subject to the terms of the No-Nonsense License Statement that
you received with the Borland product to which this information
pertains.

