- BORLAND/: Borland C++ 4.52 (chosen over 4.5 by byte-match: CODE/RP/CW32.LIB
is identical to 4.52's install lib). BCC32/TLINK32/TLIB/MAKE run natively on
Win11; CODE/BT/OPT.MAK is the shipped BTL4OPT.EXE's exact flag recipe
(extender = Borland PowerPack DPMI32, not Phar Lap TNT).
- restoration/source410/: the literal 1995-form reconstruction of the missing
BT game source (never mixed into CODE/). Round 1-3 state:
* 6 of 10 surviving original TUs COMPILE CLEAN under the period toolchain
(BTMSSN, BTCNSL, BTSCNRL, BTTEAM, BTL4MODE, BTL4ARND) - first builds
since 1996.
* BT_L4/BTL4APP.CPP pilot reconstruction: 12/12 functions, Fail() lands on
its binary-recorded line 400 exactly.
* BT/BTCNSL.HPP: console wire IDs recovered from the binary's ctors
(Killed=9, Damaged=10, ScoreUpdate=13, DeathWithoutHonor=15 [T1];
TeamScore=12 flagged [T4]).
* MUNGA/: 8 engine-header backfills back-dated from the BT412 WinTesla tree
(VDATA numbering decomp-verified; AUDREND's OpenAL-era virtual removed -
the period compiler is the drift detector).
* Tooling: backdate.py (WinTesla->1995 header transform), compile410.sh
(per-TU verification sweep under authentic OPT.MAK flags).
* README: corrected roadmap - MECH.HPP is the capstone grown with the mech
TU reconstructions; BTREG.CPP green = the header-family milestone.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
371 lines
14 KiB
Plaintext
371 lines
14 KiB
Plaintext
|
|
BORLAND SQL LINKS TIPS
|
|
FOR PARADOX 5.0 FOR WINDOWS USERS
|
|
---------------------------------
|
|
|
|
|
|
This file contains important, late-breaking information
|
|
you need if your current Paradox 5.0 application uses
|
|
the Borland SQL Links and you will be building or using
|
|
an application built with a newer version of the SQL
|
|
Links. For example, if you are building or using
|
|
applications built with Delphi.
|
|
|
|
|
|
* * * * *
|
|
|
|
|
|
TABLE OF CONTENTS
|
|
-----------------
|
|
1. General Information
|
|
2. Informix Driver
|
|
3. InterBase Driver
|
|
4. Oracle Driver
|
|
5. Sybase Driver
|
|
|
|
|
|
|
|
1. GENERAL INFORMATION
|
|
----------------------
|
|
|
|
The Table method sort keyword and sortTo TCursor method are
|
|
missing from the list of standard ObjectPAL methods that do
|
|
not support SQL.
|
|
|
|
|
|
|
|
2. INFORMIX DRIVER
|
|
------------------
|
|
|
|
SQLPASSTHRU MODE AND MULTIPLE INFORMIX CONNECTIONS. This
|
|
release of the SQL Link Informix driver uses Informix
|
|
ESQL/C 4.10, which allows only one connection to an
|
|
Informix server at a time from each workstation. This
|
|
means that you cannot be connected to two Informix servers
|
|
or to two databases on the same server simultaneously.
|
|
|
|
SQL Link operations on Informix databases are of two
|
|
types:
|
|
|
|
- those that execute pass-through SQL statements
|
|
(whether interactively or through ObjectPAL)
|
|
|
|
- all other database operations (such as running queries,
|
|
viewing tables, editing through forms, and executing
|
|
methods of ObjectPAL's tCursor, table, and UIObject
|
|
types)
|
|
|
|
The SQL Link Informix driver "sees" these two types of
|
|
operations as different connections.
|
|
|
|
If you set the Informix driver's SQLPASSTHRU MODE to
|
|
one of the SHARED settings (either SHARED AUTOCOMMIT,
|
|
which is the default, or SHARED NOAUTOCOMMIT), you
|
|
can execute both pass-through SQL and non-pass-through
|
|
operations in the same connection. If you set
|
|
SQLPASSTHRU MODE to NOT SHARED or blank, you will be
|
|
unable to switch between pass-through SQL statements
|
|
and other non-pass-through operations in the same
|
|
session. If your first operation on the server is a
|
|
pass-through SQL statement, you can only perform pass-
|
|
through SQL operations in that session. If your first
|
|
operation is a non-pass-through operation, you can
|
|
only perform non-pass-through operations in that
|
|
session. To switch from one to the other, select the
|
|
alias for the database to which you are connected in
|
|
the Alias Manager dialog, choose Disconnect, then
|
|
choose Connect.
|
|
|
|
If you attempt to perform an operation that cannot be
|
|
executed because SQLPASSTHRU MODE is not set to
|
|
allow shared connections, you may see the following:
|
|
|
|
- Pass-through SQL, ObjectPAL, and other operations
|
|
return the error message "Multiple connections
|
|
not supported".
|
|
|
|
- You can view the SQL equivalent of a QBE query in the
|
|
SQL Editor, but you cannot execute the pass-through
|
|
version of that query while QBE is open.
|
|
|
|
If you have set SQLQRYMODE to NOT SHARED and have
|
|
already started a session working with QBE, follow these
|
|
steps to execute a pass-through query:
|
|
|
|
1. Use Query | Show SQL to display the SQL equivalent
|
|
of the query in the SQL Editor
|
|
|
|
2. Use File | Save to save the query as an .SQL file.
|
|
|
|
3. Use the Alias Manager to explicitly disconnect from
|
|
the Informix server.
|
|
|
|
4. Use the Alias Manager to explicitly connect to
|
|
the Informix server.
|
|
|
|
5. Select File | Open | SQL File to select the saved
|
|
SQL query.
|
|
|
|
6. Execute the query as pass-through SQL.
|
|
|
|
|
|
To execute a QBE after starting a session in
|
|
pass-through:
|
|
|
|
1. Use the Alias Manager to explicitly disconnect from
|
|
the Informix server.
|
|
|
|
2. Use the Alias Manager to explicitly connect to
|
|
the Informix server.
|
|
|
|
3. Select File | Open | Query to open the saved
|
|
Borland desktop query.
|
|
|
|
|
|
|
|
WORKING WITH INFORMIX SERIAL FIELDS. The Informix Serial
|
|
field type is a "write once, read always" field type. In
|
|
an Informix database, when you insert a new record into a
|
|
table you can either assign a value greater than zero to
|
|
a serial field, or let Informix supply a value for you. If the
|
|
serial field has a unique index placed on it, any value
|
|
assigned to the serial field must be unique. Once the
|
|
record is committed to the table, that value cannot not be
|
|
updated.
|
|
|
|
Paradox for Windows supports all of the above behavior of
|
|
the Informix Serial type, with the assumption that the
|
|
Informix server (and not you) will supply values for any
|
|
newly-inserted Serial fields. This means that when you
|
|
create a form with a field bound to an Informix serial
|
|
field, Paradox "protects" the Serial field by marking it
|
|
Read Only.
|
|
|
|
If you want to be able to assign your own value to the
|
|
serial field,
|
|
|
|
1. Put the form in Design Mode.
|
|
|
|
2. Right Click on the field to display the Property
|
|
Inspector pop-up menu.
|
|
|
|
3. De-select Runtime | Read Only.
|
|
|
|
When you run the form, you will be able to specify the
|
|
value to be inserted in the Informix Serial field, along
|
|
with other fields in the table.
|
|
|
|
Remember: you cannot insert a duplicate value for the
|
|
Serial field if there is a unique index on the field; you
|
|
also cannot modify the Serial field of an existing record.
|
|
|
|
|
|
|
|
3. INTERBASE DRIVER
|
|
-------------------
|
|
|
|
IMPROVING PERFORMANCE OF ONE-TO-MANY LINKS. Often a one-
|
|
to-many link joins a single-field index in the master
|
|
table to the first field of a multi-field index in the
|
|
detail. A common example is ORDERS.ORDERNUM joined to
|
|
LINEITEM.ORDERNUM, where LINEITEM has a unique index on
|
|
its ORDERNUM and ITEMNUM fields together. In InterBase 3.3
|
|
you can sometimes improve performance by adding a non-
|
|
unique index on LINEITEM.ORDERNUM alone.
|
|
|
|
|
|
BEGINTRANSACTION METHOD. Improvements in the BDE's handling of
|
|
transaction isolation levels may affect your application if it
|
|
uses the OPAL Database method beginTransaction(). (See the
|
|
description of beginTransaction() in the Paradox 5.0 ObjectPAL
|
|
reference or online help for a description of isolation levels.)
|
|
|
|
Unless you use beginTransaction() to initiate a DirtyRead or
|
|
ReadCommitted transaction, your application will not be affected by
|
|
these improvements.
|
|
|
|
You can use your application unchanged if you set the driver flags
|
|
for the InterBase driver. See READLINK.TXT. Setting the driver
|
|
flag will make transaction operations compatibile with SQL Links,
|
|
version 2.0 (or earlier), disabling the improvements for all
|
|
applications which use the InterBase driver.
|
|
|
|
Under SQL Links, version 2.0 (or earlier), all beginTransaction()
|
|
calls initiated a transaction with the RepeatableRead isolation
|
|
level. RepeatableRead was used even if the optional isoLevel
|
|
parameter was provided. Thus all the following beginTransaction()
|
|
calls were equivalent and used RepeatableRead:
|
|
|
|
var
|
|
db Database
|
|
success Logical
|
|
endVar
|
|
success = db.beginTransaction()
|
|
success = db.beginTransaction("DirtyRead")
|
|
success = db.beginTransaction("ReadCommitted")
|
|
success = db.beginTransaction("RepeatableRead")
|
|
|
|
BDE's new transaction support runs your transaction at a level
|
|
supported by the server at or above the level you specify. If the
|
|
server does not support an isolation level at or above that level, an
|
|
error will be returned. If you specify an isolation level and write
|
|
your application correctly assuming you have that isolation level,
|
|
your application will execute correctly or will receive an error.
|
|
|
|
For InterBase databases, db.beginTransaction() and
|
|
db.beginTransaction("RepeatableRead") still initiate a RepeatableRead
|
|
transaction. db.beginTransaction("DirtyRead") and
|
|
db.beginTransaction("ReadCommitted") initiate a ReadCommitted
|
|
transaction.
|
|
|
|
So, if your application specified DirtyRead or ReadCommitted, it will
|
|
now execute at the ReadCommitted level instead of the RepeatableRead
|
|
level. You should test it to ensure that it operates correctly at
|
|
the ReadCommitted level.
|
|
|
|
|
|
|
|
4. ORACLE DRIVER
|
|
----------------
|
|
|
|
BEGINTRANSACTION METHOD. Improvements in the Borland Database Engine's
|
|
(BDE) handling of transaction isolation levels will affect your
|
|
application if it uses the OPAL Database method beginTransaction().
|
|
(See the description of beginTransaction() in the Paradox 5.0
|
|
ObjectPAL reference or online help for a description of
|
|
isolation levels.)
|
|
|
|
If you do not use beginTransaction(), your application will not be
|
|
affected by these improvements.
|
|
|
|
You can use your application unchanged if you set the driver flags
|
|
for the Oracle driver. See READLINK.TXT. Setting the driver flag will
|
|
make transaction operations compatibile with SQL Links, version 2.0
|
|
(and earlier), disabling the improvements for all applications which use
|
|
the Oracle driver.
|
|
|
|
If you do not set the driver flag, you will probably need to change
|
|
your use of the beginTransaction() method.
|
|
|
|
Under SQL Links, version 2.0 and earlier, all beginTransaction() calls
|
|
for Oracle databases initiated a transaction with the ReadCommitted
|
|
isolation level. ReadCommitted was used even if the optional isoLevel
|
|
parameter was provided. Thus all the following beginTransaction()
|
|
calls were equivalent and used ReadCommitted:
|
|
|
|
var
|
|
db Database
|
|
success Logical
|
|
endVar
|
|
success = db.beginTransaction()
|
|
success = db.beginTransaction("DirtyRead")
|
|
success = db.beginTransaction("ReadCommitted")
|
|
success = db.beginTransaction("RepeatableRead")
|
|
|
|
The BDE's new transaction support runs your transaction at a level
|
|
supported by the server at or above the level you specify. If the
|
|
server does not support an isolation level at or above that level, an
|
|
error will be returned. If you specify an isolation level and write
|
|
your application correctly assuming you have that isolation level,
|
|
your application will execute correctly or will receive an error.
|
|
|
|
For Oracle databases, db.beginTransaction("DirtyRead") and
|
|
db.beginTransaction("ReadCommitted") still initiate a ReadCommitted
|
|
transaction. db.beginTransaction() and
|
|
db.beginTransaction("RepeatableRead") initiate a read-only
|
|
RepeatableRead transaction. If your application makes updates during
|
|
the transaction, you should change these calls to specify
|
|
ReadCommitted. Otherwise an error will be generated when you attempt
|
|
to commit the update (or unlock an updated record).
|
|
|
|
If you are using Paradox 4.5 and you use beginTransaction() for an
|
|
update transaction on an Oracle database, you must set the driver
|
|
flag. The optional isoLevel argument was added to beginTransaction()
|
|
in Paradox 5.0.
|
|
|
|
TABLE\INDEX NAME CAPITALIZATION. Under SQL Links, version 2.0 and
|
|
earlier, Oracle table and index names were always forced to
|
|
uppercase. This release of SQL Links supports names in mixed case.
|
|
Previously, SQL Links could be used to access the table
|
|
CUSTOMER but not Customer, for example.
|
|
|
|
Existing Paradox Forms, Reports, QBE queries, Scripts and Libraries
|
|
may have refered to these using mixed case. For example, the table
|
|
CUSTOMER might be refered to as Customer in a Form. Since the names
|
|
were forced to upper case, this reference was to CUSTOMER.
|
|
|
|
Under this release of SQL Links, the use of a table name in a Form,
|
|
Report, QBE query, Script or Library which does not match the name
|
|
on the server exactly will fail. So a reference to the CUSTOMER
|
|
table which is spelled Customer will fail.
|
|
|
|
You can use your Paradox and Oracle objects unchanged if you set the
|
|
driver flags for the Oracle driver. See READLINK.TXT. Setting the
|
|
driver flag will make naming conventions compatibile with SQL Links,
|
|
version 2.0 and earlier, disabling the improvements for all
|
|
applications which use the Oracle driver.
|
|
|
|
If you do not set the driver flag, you may either change your Paradox
|
|
references to match the names on the server (which are probably all
|
|
upper case), or change the names on the server to match those in your
|
|
Paradox objects.
|
|
|
|
|
|
|
|
5. SYBASE DRIVER
|
|
----------------
|
|
|
|
BEGINTRANSACTION METHOD. Improvements in the Borland Database Engine's
|
|
(BDE) handling of transaction isolation levels will affect your
|
|
application if it uses the OPAL Database method beginTransaction().
|
|
(See the description of beginTransaction() in the Paradox 5.0
|
|
ObjectPAL reference or online help for a description of
|
|
isolation levels.)
|
|
|
|
If you do not use beginTransaction(), your application will not be
|
|
affected by these improvements.
|
|
|
|
You can use your application unchanged if you set the driver flags
|
|
for the Sybase driver. See READLINK.TXT. Setting the driver flag will
|
|
make transaction operations compatibile with SQL Links, version 2.0
|
|
(and earlier), disabling the improvements for all applications which use
|
|
the Sybase driver.
|
|
|
|
If you do not set the driver flag, you will probably need to change
|
|
your use of the beginTransaction() method.
|
|
|
|
Under SQL Links, version 2.0 and earlier, all beginTransaction() calls
|
|
for Sybase databases initiated a transaction with the ReadCommitted
|
|
isolation level. ReadCommitted was used even if the optional isoLevel
|
|
parameter was provided. Thus all the following beginTransaction()
|
|
calls were equivalent and used ReadCommitted:
|
|
|
|
var
|
|
db Database
|
|
success Logical
|
|
endVar
|
|
success = db.beginTransaction()
|
|
success = db.beginTransaction("DirtyRead")
|
|
success = db.beginTransaction("ReadCommitted")
|
|
success = db.beginTransaction("RepeatableRead")
|
|
|
|
The BDE's new transaction support runs your transaction at a level
|
|
supported by the server at or above the level you specify. If the
|
|
server does not support an isolation level at or above that level, an
|
|
error will be returned. If you specify an isolation level and write
|
|
your application correctly assuming you have that isolation level,
|
|
your application will execute correctly or will receive an error.
|
|
|
|
For Sybase databases, db.beginTransaction("DirtyRead") and
|
|
db.beginTransaction("ReadCommitted") still initiate a ReadCommitted
|
|
transaction. db.beginTransaction() and
|
|
db.beginTransaction("RepeatableRead") attempt to initiate a
|
|
RepeatableRead transaction, but an error is generated because
|
|
RepeatableRead transactions are not supported. You should change
|
|
these calls to specify ReadCommitted.
|
|
|
|
If you are using Paradox 4.5 and you call beginTransaction() for a
|
|
Sybase database, you must set the driver flag. The optional isoLevel
|
|
argument was added to beginTransaction() in version 5.0.
|
|
|