home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 May / Pcwk0597.iso / borland / ib / setups / intrabld / data.z / READLINK.TXT < prev    next >
Text File  |  1996-09-19  |  28KB  |  755 lines

  1.  
  2. ============================================================
  3.    WELCOME TO BORLAND 32-BIT SQL LINKS 3.5 FOR WINDOWS 95/NT
  4.    ---------------------------------------------------------
  5.  
  6.  
  7. This file contains important, late-breaking information 
  8. about Borland SQL Links for Windows, including revisions 
  9. to the documentation.  Information in this file supersedes 
  10. information in the SQL Links documentation.
  11.  
  12.  
  13. TABLE OF CONTENTS
  14. -----------------
  15.  
  16. 1.  DELPHI 2.0 NOTES
  17. 2.  INSTALLSHIELD EXPRESS NOTES
  18. 3.  TIPS FOR USING SQL LINKS
  19. 4.  KNOWN PROBLEMS
  20. 5.  INTERBASE SQL LINK DRIVER
  21. 6.  ORACLE SQL LINK DRIVER
  22. 7.  SYBASE SQL LINK DRIVER (DB-Lib)
  23. 8.  SYBASE SQL LINK DRIVER (CT-Lib) ** NEW **
  24. 9.  MICROSOFT SQL LINK DRIVER
  25. 10. DB2 SQL LINK DRIVER ** NEW **
  26. 11. INFORMIX SQL LINK DRIVER ** NEW **
  27.  
  28.  
  29. 1. DELPHI 2.0 NOTES
  30. -------------------
  31. DATABASE EXPLORER UPDATE
  32. This version of SQL Links includes a revised DLL file for the 
  33. Database Explorer that adds support for the new SQL Links
  34. drivers.  This Database Explorer DLL requires the updated 
  35. Delphi 2.0.  
  36.  
  37. To install it, copy DBX.DLL from the \DBX directory of your 
  38. installation CD to DBX.DLL in the Delphi 2 executable 
  39. directory (usually  \Program Files\Borland\Delphi 2.0\BIN).
  40.  
  41.  
  42. 2. INSTALLSHIELD EXPRESS NOTES
  43. ------------------------------
  44. UPDATING INSTALLSHIELD EXPRESS
  45. You must update the InstallShield Express included with
  46. Delphi, Borland C++, and Paradox to redeploy the latest version
  47. of SQL Links and the Borland Database Engine. To update
  48. InstallShield Express,
  49.  
  50.   1. Copy *.CNF from the \CNF directory of the installation CD
  51.      to the InstallShield Express redist directory, which is
  52.      typically
  53.         \Program Files\InstallShield\IS Express Delphi\redist
  54.         \Program Files\InstallShield\IS Express BC\redist
  55.         \Program Files\InstallShield\IS Express PDX\redist
  56.  
  57.   2. Copy *.* from the \ISX directory of the installation CD 
  58.      to the InstallShield Express directory, which is typically
  59.        \Program Files\InstallShield\IS Express Delphi
  60.         \Program Files\InstallShield\IS Express BC
  61.         \Program Files\InstallShield\IS Express PDX
  62.  
  63.   3. Add the following lines to the [SQL Link Drivers] section
  64.      of ISDEPEND.INI in your InstallShield Express directory:
  65.         Driver5=Informix
  66.         Driver6=DB2
  67.         Driver7=Sybase (CT-Lib)
  68.      Then add the following sections to ISDEPEND.INI:
  69.         [SQL Link Drivers - Sybase (CT-Lib)]
  70.         Src=HKEY_LOCAL_MACHINE\SOFTWARE\BORLAND\Database
  71.              Engine\DLLPATH
  72.         Uses1=sqlssc32.dll
  73.         Uses2=sql_ssc cnf file
  74.         
  75.         [SQL Link Drivers - Informix]
  76.         Src=HKEY_LOCAL_MACHINE\SOFTWARE\BORLAND\Database
  77.              Engine\DLLPATH
  78.         Uses1=sqlinf32.dll
  79.         Uses2=sql_inf cnf file
  80.         
  81.         [SQL Link Drivers - DB2]
  82.         Src=HKEY_LOCAL_MACHINE\SOFTWARE\BORLAND\Database
  83.              Engine\DLLPATH
  84.         Uses1=sqldb232.dll
  85.         Uses2=sql_db2 cnf file
  86.         
  87.         [sql_ssc cnf file]
  88.         Src=<EXEDIR>
  89.         SrcSub=redist
  90.         Uses1=SQL_SSC.CNF
  91.         
  92.         [sql_inf cnf file]
  93.         Src=<EXEDIR>
  94.         SrcSub=redist
  95.         Uses1=SQL_INF.CNF
  96.         
  97.         [sql_db2 cnf file]
  98.         Src=<EXEDIR>
  99.         SrcSub=redist
  100.         Uses1=SQL_DB2.CNF
  101.  
  102. If you have the 16-bit BDE installed and in use on your machine,
  103. you won't see all the available SQL Links drivers when you try to
  104. set up aliases in InstallShield Express. To correct this,
  105.  
  106.   1. Start the 32-bit BDE Configuration Utility.
  107.   2. Note the name of the default .CFG file being used (listed in
  108.      the title bar).
  109.   3. Choose Options|Configure WIN3.1 to uncheck it.
  110.   4. Choose File|Save to update the Windows Registry.
  111.   5. Choose Options|Configure WIN3.1 again.
  112.   6. Choose File|Save As and type TEMP.CFG. When the Non-system
  113.      Configuration File dialog box appears, choose No.
  114.   7. Close the BDE Configuration Utility.
  115.   8. Copy TEMP.CFG over your default .CFG file.
  116.  
  117.  
  118. 3. TIPS FOR USING SQL LINKS
  119. ---------------------------
  120.  
  121. WHERE TO START
  122. For information about configuring and connecting to SQL 
  123. servers, see the Help file SQLLNK32.HLP.
  124.  
  125. USING ALIASES WITHOUT SPECIFYING A LANGUAGE DRIVER
  126. If no language driver is specified, the default language 
  127. driver is ASCII.  Language-specific processes like 
  128. character translation, sorting and table name validation
  129. will default to English rules.  For further information, see
  130. "Common SQL Links driver settings" and your driver's 
  131. "Connecting to..." sections of the SQLLNK32.HLP.
  132.  
  133. WORKING WITH LARGE TABLES
  134. If you create data entry forms on large tables you might
  135. find some performance degradation, particularly if the user 
  136. is allowed to view unrestricted record sets. To help cut 
  137. down the load on your server and optimize server 
  138. performance try to write applications that access relatively 
  139. few records at a time.  One way to do this within a 
  140. form-based application is to create forms that order the 
  141. data by index and set range criteria to limit the record 
  142. set. (For example, instead of creating a form that displays 
  143. all orders for all customers, write your application to 
  144. limit the user's working selection by criteria such as 
  145. customer name, state, and area code.)
  146.  
  147. WORKING WITH "SNAPSHOTS" (TABLES WITHOUT A UNIQUE INDEX OR
  148. ROW ID)
  149. It is always better to use a table with a unique index if 
  150. possible. This allows for better control and performance.
  151. If you insert records into a "snapshot" table, you might
  152. need to close and reopen the table to see your additions.
  153.  
  154. SYNONYM AND CROSS DATABASE / CROSS SERVER TABLE ACCESS
  155. Oracle and Informix synonyms can now be accessed using
  156. DbiOpenTable and Live Queries. Tables on different
  157. databases or servers can also be accessed in the same way.
  158. For example, you can now open "SCOTT"."CUSTOMER"@"DBLINK"
  159. on Oracle and pubs.dbo.authors on Sybase.
  160.  
  161. UPDATING SNAPSHOTS--TABLES WITHOUT UNIQUE INDEX OR ROW ID
  162. When working with a table that does not have
  163. a unique index or row ID, keep the following in mind:
  164.  
  165. - The SQL Links do not support record modifications 
  166.   and deletions on "snapshots" within an explicit 
  167.   client transaction.  Emptying tables is supported 
  168.   within an explicit client transaction, but rolling 
  169.   back such an operation does not update the internal 
  170.   record cache.
  171.  
  172. - To update the record cache, close the table and then
  173.   open it again.
  174.  
  175.  
  176. 4. KNOWN PROBLEMS
  177. -----------------
  178.  
  179. DB2 ON WINDOWS 95
  180. In Windows 95, you should catalog DB2 nodes using TCP/IP on the client, 
  181. such as 
  182.  
  183.     CATALOG TCP/IP NODE MYNODE ...
  184.  
  185. If you use the Microsoft IPX/SPX protocol, the protocol will hang when 
  186. metadata is retrieved. IBM reports that this is a Microsoft problem.
  187.  
  188. The DB2 SQL Links driver can only access servers in the Windows 95
  189. environment that are connected using TCP/IP.
  190.  
  191. INFORMIX-REFERENTIAL INTEGRITY
  192. The Informix SQL Links driver does not currently support referential 
  193. integrity. Support is planned for a future release of SQL Links.
  194.  
  195. ROLLBACKS AND INFORMIX LOGGING TABLES
  196. Rolling back a transaction on an Informix Logging database
  197. invalidates the cursor. To avoid this, use ANSI databases or
  198. close the cursor after rolling back the transaction and
  199. reopen it.
  200.  
  201. SYBASE CT-LIB STORED PROCEDURES
  202. When ENABLE BCD is TRUE, stored procedures with MONEY fields
  203. fail to retrieve MONEY output parameters.
  204.  
  205. INFORMIX - DECIMAL AND MONEY PRECISION
  206. DECIMAL and MONEY data types are rounded to two decimal
  207. places when getting data from the server. For example,
  208. DECIMAL 123.4567 is rounded to 123.45. This is a vendor
  209. issue. To prevent this, set ENABLE BCD to TRUE in the BDE
  210. Configuration Utility.
  211.  
  212. INFORMIX - APPLYING FILTERS
  213. Applying a filter on DECIMAL and MONEY fields in 
  214. Informix will fail, because the data types are all mapped 
  215. to the BDE logical type fldFLOAT. To avoid this, use 
  216. passthrough SQL.
  217.  
  218. UPDATABLE SQL QUERIES
  219. Tables owned by another user must be qualified by owner
  220. name.  Use quotation marks around the entire qualified
  221. name, for example "OWNER"."TABLE".
  222.  
  223. INFORMIX - USING VERSION 7.2 WITH BLOB FIELDS
  224. If you open a BLOB field on an Informix 7.2 server, trying to
  225. move to another record causes the server to crash. This is caused
  226. by an Informix problem. Reference case number 55155 when
  227. contacting Informix.
  228.  
  229. INSTALLSHIELD TEMPORARY DIRECTORIES IN WINDOWS NT
  230. When installing the SQL Links under Windows NT, InstallShield 
  231. does not remove temporary directories named _ISTMPx.DIR, where 
  232. x is a number from 0 to 9. You must delete them manually.
  233.  
  234.  
  235. 5. INTERBASE DRIVER
  236. -------------------
  237.  
  238. INTERBASE SQL LINK and LOCAL INTERBASE SERVER
  239. InterBase SQL Link installs a subset of the InterBase vendor
  240. DLLs necessary for Local InterBase Server.  If you have an
  241. earlier version of Local InterBase Server on your computer
  242. when you install InterBase SQL Link, be sure to upgrade
  243. with the latest version.
  244.  
  245. STORED PROCEDURE AND PARAMETER BINDING
  246. Trying to bind parameters to a SQL statement after a stored 
  247. procedure has been run results in a "Column Unknown" error when 
  248. DbiQPrepare is called.
  249.  
  250. SUPPORTED DATA TYPES
  251. The BDE now supports the InterBase 4.0 data types of NUMERIC and 
  252. DECIMAL.
  253.  
  254. INTERBASE INSTALLATION CHANGES
  255. When installing over existing copies of IB_LICEN.DAT and 
  256. INTRBASE.MSG, the SQL Links installation program copies 
  257. the files being overwritten to IB_LICEN.BOR and 
  258. INTRBASE.BOR. If the SQL Links are uninstalled, these files 
  259. are NOT restored automatically; you must restore them.
  260.  
  261.  
  262. 6. ORACLE DRIVER
  263. ----------------
  264.  
  265. SUPPORT FOR QUOTED OBJECT NAMES
  266. This release of SQL Links supports the creation of Oracle
  267. tables with quoted object names.  Object names enclosed
  268. in double quotation marks may contain spaces, special
  269. characters, reserved words, or mixed case.  When querying
  270. a table with special object names, be sure to enclose the
  271. name in double quotation marks. For example:
  272.  
  273.      SELECT * FROM "Customer"
  274.  
  275. For more information on object naming rules, see your 
  276. Oracle server documentation.
  277.  
  278. USING LIVE QUERIES WITH QUOTED FIELD NAMES
  279. Live queries for Oracle tables require a table qualifier or 
  280. an alias name if the field names are quoted. For example :
  281.  
  282.     SELECT * FROM someTable WHERE "fieldname" = someValue
  283.  
  284. will not work, the workaround will be to use either
  285.  
  286.     SELECT * FROM someTable T1 WHERE T1."fieldname" = someValue
  287. or
  288.     SELECT * FROM someTable WHERE "someTable"."fieldname" = someValue
  289.  
  290. SETTING ORACLE DRIVER FLAGS
  291. Using mixed-case object names can result in incompatibility
  292. with earlier versions of SQL Links for Oracle. Earlier
  293. versions of SQL Links used uppercase object names only. To
  294. use uppercase object names only, set the DRIVER FLAGS option
  295. to 1 using the BDE Configuration Utility.
  296.  
  297. Specifying a Repeatable Read transaction isolation level
  298. can result in incompatibility with applications using earlier 
  299. versions of SQL Links for Oracle. Earlier versions of SQL 
  300. Links supported Read Committed only. To maintain transaction 
  301. support compatibility with earlier versions of SQL Links, use
  302. the BDE Configuration Utility to set the DRIVER FLAGS option
  303. to 512.
  304.  
  305. To use uppercase object names only AND maintain transaction 
  306. support compatibility with earlier versions of SQL Links, use
  307. the BDE Configuration Utility to set the DRIVER FLAGS option
  308. to 513 (representing 512+1).
  309.  
  310. ORACLE UPDATABLE QUERIES
  311. All names, both column and table,
  312. are case sensitive (as if they were quoted explicitly).
  313.  
  314. ORACLE BLOCK WRITE SUPPORT
  315. Support for Oracle array binding
  316. in this release shows improved performance for block writes
  317. when using DbiBatchMove and DbiWriteBlock.
  318.  
  319. CONFIGURING BDE FOR USE WITH ORACLE SQL*NET V2.0 OR GREATER
  320. Use the BDE configuration utility (or alias manager) to set
  321. the "Net Protocol" parameter for Oracle aliases to TNS.
  322.  
  323.  
  324. 7. SYBASE DRIVER (DB-LIB)
  325. -------------------------
  326.  
  327. ADDITIONAL TRANSACTION ISOLATION LEVEL SUPPORT
  328. An error (DBIERR_NOTSUPPORTED) is returned if
  329. Repeatable Read is specified.
  330.  
  331. USING DEFAULT SYBASE DRIVER FLAGS SETTING
  332. For Sybase SQL Servers prior to System 10, if your SQL 
  333. Server faults while executing BLOB reads or BLOB writes, 
  334. check the SQL Link driver's DRIVER FLAGS parameter.  If 
  335. DRIVER FLAGS is set to 0 (the Sybase default):
  336.  
  337.   1.  Call Sybase Customer Support and describe the 
  338.       problem, referencing Case #125046.
  339.  
  340.   2.  Set the DRIVER FLAGS parameter to 1.  Use this 
  341.       DRIVER FLAGS setting until you receive the necessary
  342.       software fix from Sybase.
  343.  
  344. Setting DRIVER FLAGS to 1 will enable you to execute BLOB 
  345. reads and BLOB writes without causing a server fault.  
  346. This may cause the client to receive SQL Server timeouts 
  347. during BLOB writes.
  348.  
  349. MULTIPLE RESULT SETS
  350. The Sybase SQL Link driver does not support the use of
  351. stored procedures that return multiple answer sets.
  352.  
  353. SYBASE INDEX HINT FOR UPDATABLE QUERIES
  354. This release of SQL Link has added support for Sybase's
  355. forceindex hint for query optimization when performing
  356. updatable queries. For example, the following query is
  357. now a valid updatable query:
  358.    SELECT * FROM CUSTOMER (2)
  359.  
  360. SYBASE URGENT PARAMETER AND TABLE CLOSE PERFORMANCE
  361. The use of the URGENT parameter is supported by the named
  362. pipes driver, the Novell NetWare networking software
  363. (SPX/IPX) as well as many TCP/IP networking packages:
  364. (Note: the dll's specified in the following examples are
  365. network and network transport specific.)
  366.  
  367. myNLMsrvr=C:\SQL\BIN\WDBNOVSP,04200020,1,83BD,URGENT
  368. myUNIXsrvr=C:\SQL\BIN\WDBNOVTC, 128.0.168.245, 1425, URGENT
  369. myNamedPipesrvr=C:\SQL\BIN\DLL_NAME,\\MY_SRVR\ROOT, URGENT
  370.  
  371. The  Sybase Open Client documentation erroneously notes that
  372. Novell's LanWorkPlace does not support the URGENT parameter.
  373. You actually need a LanWorkPlace version later than 4.0, Lan 
  374. WorkPlace for OS/2 is compatible only with version 3.0.
  375.  
  376. URGENT requires Out of Band Data (OOBD) support and is
  377. necessary for Sybase's  dbcancel() to work effectively.  
  378. Dbcancel() is called to cancel the retrieval of un-read
  379. result sets.
  380.  
  381. In order to properly support OOBD, your Solaris-based
  382. server may need a call to ndd to set its
  383. tcp_rexmit_interval_max parm.
  384. The call is:
  385.  
  386. /usr/sbin/ndd -set /dev/tcp tcp_rexmit_interval_max nnnn
  387.  
  388. where nnnn is a number of milliseconds.
  389.  
  390. You might see a delay when clicking on the master grid of
  391. a master-detail form - the query to retrieve the data for
  392. the detail might not return for several minutes.
  393.  
  394. By default, the TCP protocol will wait until a packet is
  395. full before sending it. This will generally help packet
  396. transmission over large networks because it cuts down on
  397. the number of packets sent. This can often slow the
  398. performance of client applications. If the server needs
  399. to send 750 bytes to an application and is using 512-byte
  400. packets, the client will see a delay while the server waits
  401. on 274 bytes of additional data.
  402.  
  403. It might be possible to disable this on the SQL Server
  404. itself.  This can be done by adding a trace flag to the
  405. RUN_SERVER file, -T1610.
  406.  
  407. UPDATE/DELETE QUERIES AND DBIGETRELATIVERECORD
  408. Running the SQL statements UPDATE or DELETE on a table with a unique 
  409. index, closing and reopening the table, switching to an existing 
  410. index, then calling DbiGetRelativeRecord results in the server 
  411. error "Attempt to initiate a new SQL operation with results pending."
  412.  
  413. STORED PROCEDURES AND DBIQSETPROCPARAMS
  414. If a stored procedure with a result set and either an output
  415. parameter or a return value is executed and then rebound using
  416. a call to DbiQSetProcParams, the output parameter or return
  417. value will not work correctly.
  418.  
  419. SPECIFYING THE SYBASE QUERY API
  420. By default, SQL statements sent to MS SQL and Sybase servers
  421. using  DB-Lib are now sent using the synchronous query submission
  422. API. Earlier versions of SQL Links used the asynchronous query
  423. submission API. To use the asynchronous query submission API, add
  424. 2048 to the current value of DRIVER FLAGS or set it to 2048 if
  425. it's blank.
  426.  
  427.  
  428. 8. SYBASE DRIVER (CT-LIB)
  429. -------------------------
  430.  
  431. DBIERR_MULTIPLEUNIQRECS ON DEAD TABLES
  432. If the error DBIERR_MULTIPLEUNIQRECS occurs while using 
  433. a dead table (no index at all), then the cursor for that 
  434. table should be closed and reopened, regardless of whether 
  435. DbiBeginTran had been called to start a transaction. This 
  436. is true only for the CT-Lib version of the Sybase driver.
  437.  
  438. SUPPORTING OLDER SYBASE SQL SERVER VERSIONS
  439. The Sybase CT-Lib driver does not support older versions
  440. of the Sybase SQL Server. If you intend to use Sybase 
  441. SQL Server versions 4.x and below, you must use the BDE 
  442. Configuration Utility (on the Sybase Driver page) to 
  443. change the name of the DLL32 parameter from SQLSSC32.DLL 
  444. (the default) to SQLSYB32.DLL. If you cannot find the 
  445. SQLSYB32.DLL file then you will need to run the Install
  446. program and select the Sybase DBLIB driver to install. 
  447. You will also need to set the environment variables PATH,
  448. SYBASE, INCLUDE and LIB so that they do not refer to the
  449. CT-Lib directory.
  450.  
  451. MULTIPLE ACTIVE STORED PROCEDURE SUPPORT
  452. The Sybase CT-Lib SQL Link driver can now perform row
  453. fetches from multiple stored procedures simultaneously using
  454. the new property stmtEXECASCURSOR.
  455.  
  456. The stmtEXECASCURSOR property allows users to ask for a CT-Lib
  457. cursor instead of  a CT-Lib command. CT-Lib cursors let the
  458. user have multiple cursors open and fetch rows from those
  459. simultaneously. With CT-Lib commands, all pending results
  460. must be processed before executing the next operation.
  461.  
  462. This property is mainly for users who execute Sybase stored
  463. procedures that return a result set. They can pass the SQL
  464. string as "EXECUTE proc_name"  or "EXECUTE proc_name  :1,
  465. :2, :3  ..." (if there are parameters), prepare the
  466. statement, then set stmtEXECASCURSOR to True. This makes the
  467. driver open cursors on the stored procedure instead of a
  468. command.
  469.  
  470. Some limitations to this property:
  471. 1.  The stored procedure should not have any BDE output
  472.     parameters or return status.
  473. 2.  Input parameters must be place holders in the SQL string
  474.     and  must be bound before execution. (Literal substitution
  475.     of parameter values in the string doesn't work).
  476. 3.  The stored procedure body should contain a single
  477.     SELECT statement returning a single result set.
  478.  
  479. EXAMPLE:
  480.  
  481.    int main ()
  482.    {
  483.        // Initialize engine
  484.        
  485.        // Connect to database
  486.    
  487.        //Prepare a statement
  488.        DbiQPrepare(hDb, .., .. , phStmt);
  489.     
  490.       // Set the property
  491.       DbiSetProp(hStmt,  stmtEXECASCURSOR, TRUE);
  492.    
  493.       // Bind parameters if any
  494.    
  495.       //DbiQExec(hStmt, phCur);
  496.    
  497.        .
  498.        .
  499.        .
  500.       
  501.         return 0;
  502.    }
  503.  
  504.  
  505. 9. MICROSOFT SQL DRIVER
  506. -----------------------
  507.  
  508. USING DEFAULT MICROSOFT SQL DRIVER FLAGS SETTING
  509. If your Microsoft SQL Server faults while executing BLOB reads
  510. or BLOB writes, check the SQL Link driver's DRIVER FLAGS 
  511. parameter.  If DRIVER FLAGS is set to 0 (the Microsoft SQL 
  512. default) set the DRIVER FLAGS parameter to 1. Setting DRIVER 
  513. FLAGS to 1 will enable you to execute BLOB reads and BLOB 
  514. writes without causing a server fault. This may cause the 
  515. client to receive SQL Server timeouts during BLOB writes.
  516.  
  517. SPECIFYING THE MS SQL QUERY API
  518. By default, SQL statements sent to MS SQL and Sybase servers
  519. using  DB-Lib are now sent using the synchronous query submission
  520. API. Earlier versions of SQL Links used the asynchronous query
  521. submission API. To use the asynchronous query submission API, add
  522. 2048 to the current value of DRIVER FLAGS or set it to 2048 if
  523. it's blank.
  524.  
  525.  
  526. 10. DB2 DRIVER
  527. --------------
  528.  
  529. DBCLOB DATA TYPE
  530. The DB2 physical type DBCLOB is not currently supported 
  531. within the BDE even though schema information indicates 
  532. that it is an available type. It is suggested that you use 
  533. either CLOB or BLOB physical types.
  534.  
  535. STORED PROCEDURES
  536. The SQL Links driver for DB2 translates the logical BDE
  537. string type (fldZSTRING) to a physical DB2 SQL_CHAR data
  538. type when it is passed as a parameter to a stored procedure.
  539. This can cause problems for stored procedures that are
  540. hard-coded to expect a physical SQL_VARCHAR as a parameter. 
  541.  
  542. Programmers should write stored procedures that examine the
  543. sqltype member of the SQLDA structure (for example,
  544. input_sqlda->sqlvar[i].sqltype) to determine which data type
  545. the client has actually bound, instead of expecting a
  546. specific data type.
  547.  
  548. CONNECTING TO AS/400 SERVERS
  549. Due to a problem with IBM server software, remote
  550. connections to DB2 on the AS/400 platform do not work
  551. properly when version 2.1.0 or earlier of the DB2 
  552. client/server library is used. Version 2.1.1 of the 
  553. client/server library corrects the problem.
  554.  
  555. CREATING INDEXES ON AS/400 SERVERS
  556. Due to a problem with the IBM server software version 
  557. 2.1.1, if you create a new index by specifying an index 
  558. name that includes lowercase characters and is enclosed 
  559. in double quotes ("<index_name>"), the index cannot be 
  560. accessed by the BDE.
  561.  
  562. For example, the following statement creates an 
  563. accessible index, 
  564.  
  565.    CREATE INDEX CustNdx ON ....
  566.  
  567. but the following statement creates an index that the 
  568. BDE can't access,
  569.  
  570.    CREATE INDEX "CustNdx" ON ....
  571.  
  572. If creating an index through a call to DbiAddIndex(), the
  573. szName member in the IDXDesc Parameter should only be
  574. uppercase.
  575.  
  576. CREATING BLOB OR CLOB COLUMNS WITH DBICREATETABLE()
  577. When using DbiCreateTable(), BLOB or CLOB columns created in
  578. a DB2 table by the function are set by default to a size of
  579. 1MB. To create BLOB columns of different sizes, use
  580. Passthrough SQL.
  581.  
  582. VARBINARY OUTPUT PARAMETERS IN STORED PROCEDURES
  583. In a stored procedure parameter description
  584. (SPParamDesc.uFldType), normally a corresponding BDE logical
  585. data type is specified. There is one exception. A varbinary
  586. output parameter should specify fldBYTES instead of
  587. fldVARBYTES.
  588.  
  589. CALLING BY NAME IN STORED PROCEDURES
  590. DB2 only supports calling by number in stored procedures.
  591. Always use calling by number instead of calling by name.
  592.  
  593. CREATING SCHEMA OBJECTS ON IBM MVS
  594. There is an optional entry, within the alias settings of the 
  595. BDE configuration, called REMOTE DBN. This entry can be used 
  596. for setting the user's preferred database on IBM MVS. For 
  597. creating Schema objects using APIs like DbiCreateTable() 
  598. this entry should be set to the user's preferred database 
  599. name. This entry is only used for IBM MVS.
  600.  
  601. For example; REMOTE DBN = BORLAND will create objects in 
  602. database BORLAND and the query generated by  BDE will be 
  603. "CREATE TABLE TABNAME ( ... ) IN DATABASE BORLAND". 
  604.  
  605. Ignoring this entry will create objects in the user's 
  606. default database.
  607.  
  608.  
  609. 11. INFORMIX DRIVER
  610. -------------------
  611.  
  612. SOFTWARE REQUIREMENTS
  613. The Informix SQL Link driver requires the latest client
  614. software from Informix.
  615.  
  616. LIMITATIONS ON OPENING TABLES
  617. This edition of the Informix SQL Link driver does not
  618. support opening a table with a column name that is an
  619. Informix keyword or function name. Some examples include
  620. MONTH, DAY, YEAR, AVG, COUNT, ALL, and UNIQUE.
  621.  
  622. For a complete list of keywords and function names, see 
  623. your Informix documentation.
  624.  
  625. COPYING INFORMIX TABLE WITH INTERVAL COLUMN
  626. When an Informix table with an interval column is copied,
  627. the destination table is created with an interval that has
  628. a qualifier of year-to-month. If this qualifier does not 
  629. match the source table's interval qualifier, you will 
  630. receive an error during the copy.
  631.  
  632. To work around this problem, use passthrough SQL to 
  633. create the destination table with the correct interval 
  634. qualifier. Then append the contents of the source table 
  635. to the destination table.
  636.  
  637. STORED PROCEDURE SUPPORT
  638. The Informix driver supports stored procedures. 
  639. Please note the following points:
  640.  
  641. 1. Informix stored procedures have input parameters but
  642.    no output parameters.
  643.  
  644. 2. DbiOpenSPParamList returns all input parameters
  645.    and sets SPParamDesc.uParamNum and SPParamDesc.szName
  646.    starting from 1. 
  647.  
  648.       SPParamDesc[0].uParamNum = 1
  649.       SPParamDesc[0].szName = "1"
  650.      and SPParamDesc[0].eParamType = paramIN;
  651.       .
  652.       .
  653.       .
  654.   
  655.    The rest of the information for SPParamDescs
  656.    (such as uFldType, usubType, iUnits1, iUnits2, uOffset,
  657.     uLen, and uNullOffset) must be set by user.
  658.  
  659. RETRIEVING SQLCA INFORMATION
  660. The Informix SQL Link driver includes an improved
  661. passthrough property that contains native SQLCA information.
  662. Users can use the drvNATIVESQLCA property with DbiGetProp()
  663. to retrieve SQLCA information. 
  664.  
  665. SQLCA information gives detailed data on Informix server
  666. errors and exceptions. When an Informix error occurs, the
  667. Informix Global SQLCA information for that error is
  668. retrieved and retained by the SQL driver until the next time
  669. the database server is accessed. General SQLCA information
  670. is returned whenever an error hasn't occurred.
  671.  
  672. The following table shows the information that is made available.
  673.  
  674.                   *ppropValue        *pilen
  675. Informix          SQLCA              sizeof(struct sqlca_s)
  676.  
  677. EXAMPLE
  678.  
  679. // Informix SQLCA structure from informix sqlca.h header file
  680. struct sqlca_s
  681.      {
  682.      long sqlcode;
  683.      char sqlerrm[72]; /* error message parameters */
  684.      char sqlerrp[8];
  685.      long sqlerrd[6];
  686.                /* 0 - estimated number of rows returned */
  687.                /* 1 - serial value after insert or  ISAM error code */
  688.                /* 2 - number of rows processed */
  689.                /* 3 - estimated cost */
  690.                /* 4 - offset of the error into the SQL statement */
  691.                /* 5 - rowid after insert  */
  692.      struct sqlcaw_s
  693.      {
  694.      char sqlwarn0; /* = W if any of sqlwarn[1-7] = W */
  695.      char sqlwarn1; /* = W if any truncation occurred or
  696.                          database has transactions */
  697.      char sqlwarn2; /* = W if a null value returned or
  698.                          ANSI database */
  699.      char sqlwarn3; /* = W if no. in select list != no. in into list or
  700.                          turbo backend */
  701.      char sqlwarn4; /* = W if no where clause on prepared update,
  702.                          delete or incompatible float format */
  703.      char sqlwarn5; /* = W if non-ANSI statement */
  704.      char sqlwarn6; /* reserved */
  705.      char sqlwarn7; /* reserved */
  706.      } sqlwarn;
  707.      };
  708.  
  709. struct sqlca_s mySqlca;
  710.  
  711. int main()
  712. {
  713.      // Initialize engine
  714.  
  715.      // Connect to database.
  716.  
  717.       //get the sqlca (on no exception)
  718.       unsigned int len;
  719.       DbiGetProp(hDb,drvNATIVESQLCA, &mySqlca, sizeof(sqlca_s),
  720.                       &len);
  721.  
  722.      //get the sqlca (on an exception)
  723.       DbiOpenTable(hDb, "non existing table", ...)
  724.  
  725.       DbiGetProp(hDb,drvNATIVESQLCA, &mySqlca, sizeof(sqlca_s),
  726.                       &len);
  727.        return 0;
  728. }
  729.  
  730. SYSTEM TABLE STORAGE OF OBJECT NAMES
  731. Before storing object names in the system tables (such as table
  732. names, index names, field names, and so on) the Informix driver
  733. converts them to lowercase.
  734.  
  735. RETRIEVING INFORMIX DATABASE INFORMATION
  736. The Informix SQL Link driver has three properties for determining 
  737. the type of database the BDE is connected to
  738.  
  739.    Property          Type     Description
  740.    ---------------------------------------------------------
  741.    dbONLINE          BOOL     TRUE if the database connected
  742.                               is ONLINE type otherwise FALSE
  743.    dbTRANALLOWED     BOOL     TRUE if the database connected
  744.                               permits transactions otherwise
  745.                               FALSE
  746.    dbANSI            BOOL     TRUE if the database connected
  747.                               is ANSI type otherwise FALSE
  748.  
  749. You can access these properties using the BDE function
  750. DbiGetProp.
  751.  
  752.  
  753. ============================================================
  754.  
  755.