----------------------------------------------------------------------------- I N G R E S / O D B C F R E Q U E N T L Y A S K E D Q U E S T I O N S ( F A Q ) This version: 1.25 19-MAR-96 Last version: 1.24 28-FEB-96 Archived at ftp.naiua.org Copyright (C) 1994-1996 by Jon Machtynger This document is COPYRIGHTED to control its distribution and to prevent it from being used for profit. PLEASE DO NOT DISTRIBUTE IT WITHOUT THIS DISCLAIMER OR THE COPYRIGHT NOTICE. Replication of this document by any means is explicitly encouraged, provided that the content is not altered in any way. ------------------------ D I S C L A I M E R -------------------------- COMPUTER ASSOCIATES TAKE ABSOLUTELY NO RESPONSIBILITY FOR THE CONTENT OF THIS FAQ. I PREPARED IT IN MY OWN TIME, WITHOUT THE PERMISSION, ENDORSEMENT OR KNOWLEDGE OF ANY REPRESENTATIVE OF COMPUTER ASSOCIATES. This is a voluntary effort by many contributors, coordinated by me, who may or may not be identified in "Contributors." Their respective employers are in no way responsible for the content of this FAQ. Nothing in this FAQ should be regarded as true. Any item of information may become obsolete or out of date at any time. The coordinator, contributors, and distributors of this document make no representations as to the correctness of the information contained herein, and make no promises to correct any errors or omissions. You use this information at your own peril. No responsibility is given for neglect to mention Company tradenames or trademarks. Any trademarks or tradenames are mentioned only in conjunction with the use of ODBC and the Ingres product for informative purposes. No recommendation of these products is directly or indirectly sponsored. +--------------------------------------------------------------------+ | Jon Machtynger(jonm@ingres.com) +--------------+ | | Boulevard de la Woluwe | Aussie in | | | 34 Bte. 13. Brussels. | Overijse.. | | | Ph: 02-774 49 23 Fax: 02-773 28 09 +--------------+ | +--------------------------------------------------------------------+ If you don't see the '---- END OF FAQ ----' line, something is missing. ----------------------------------------------------------------------- TABLE OF CONTENTS 01. Notes 01.001 Contributors 01.002 What this FAQ is NOT 01.003 Improvements to this FAQ 02. ODBC Basics 02.001 What is ODBC? 02.002 What are advantages/disadvantages for using ODBC? 02.003 Where can I get ODBC? 02.004 ODBC Architecture. 02.005 What is a data source? 02.006 What is a single tiered or multi-tiered model? 02.007 What database types can I access using ODBC? 02.008 Can I run ODBC over network ABC? 02.009 What are the different ODBC Conformance Levels? 03. The Ingres ODBC Driver 03.001 What level of compliancy is the Ingres ODBC Driver? 03.002 How do I install the ODBC Driver? 03.003 Can ODBC Access Ingres Database Procedures 03.004 How do I use stored procedures from ODBC? 03.005 Can ODBC Access Knowledge Management facilities? 03.006 What versions of the Ingres ODBC Driver exist? 04. Alternative ODBC Drivers 04.001 What alternative ODBC drivers are available to access Ingres? 05. Practicalities of ODBC 05.001 If my database changes do I need to change my client application? 05.002 What Ingres Software does ODBC Require? 05.003 Is ODBC secure? 06. The ODBC FAQ 06.001 Where is the ODBC FAQ? 06.002 Can I get the FAQ by mail? 07. More Information on ODBC 07.001 What extra sources of information exist on ODBC? 08. ODBC Add-Ons 08.001 What is the compatibility Layer? 08.002 What facilities exist to trace ODBC performance? 08.003 Alternatives to ODBC. 09. Performance Issues 09.001 ODBC is very slow using Visual Basic. What can be done? 10. Miscellaneous 10.001 Can I use ODBC with University Ingres? 10.002 Can I access Database events through ODBC? 10.003 Can I use a 6.4 ODBC driver against OpenIngres? 10.004 Can I use ODBC under Windows95? 11. Common Problems 11.001 I have problems accessing tables with an underscore in them. 11.002 I am using Visual Basic and can't use Transactions? 11.003 Powerbuilder GPF's when attaching to the Ingres Database... 11.004 I cannot use Lotus123 (Previous to Version 5) with the ... 11.005 I've just installed Paradox 5 and trying to use the... 11.006 I get an 'Read Only' or 'Table is not Updatable' error... 11.007 I cannot reliably access and update data to Ingres... 11.008 How can I set Lockmodes using the Ingres ODBC Driver? 11.009 Can I use ODBC with OpenROAD? 11.010 When using attached tables with MSAccess and the... 11.011 I can't use MULTINATIONAL dates with the new Intersolv driver. 11.012 When I access information from attached tables using... 11.013 I've tried installing my 16 bit ODBC Driver under NT... 11.014 Can I use Ingres Net/ODBC with Windows-95?... 11.015 I have had problems using blank dates in MSAccess. 11.016 I cannot use Intersolv's 32 bit driver under NT 3.51.... 11.017 I can't install the Intersolv driver properly... 11.018 Date/time in MSAccess is always out by a number of hours. ======================================================================= 01.001 Contributors This FAQ is the work of numerous individuals working on it in their own time. The layout of this FAQ has been blatantly copied from the initial FAQ produced by Roy Hann. As such, much of the material in this FAQ is copied directly (where appropriate). This is NOT an FAQ on Ingres the database as there already exists a comprehensive ingres FAQ. This is an FAQ on implementing ODBC with the Ingres Database. (At least) the following people contributed (and some didn't even know that they contributed!) in alphabetical order: Ken Garove kgarove@charm.net Roy Hann rhann@tnc.com Bruce Horrocks bh@granby.demon.co.uk James Logajan jameslCyBowr.5uK@netcom.com Jon Machtynger jonm@ingres.com Duncan Mackinder duncanm@ingres.com Paul Mergener pmerge@pacersoft.com Ronny Ong ronnyong.40.0016B8DA@unicomp.net Dan Osterhout doster01@aol.com Manny Power Manny.Powers@SanDiegoCA.ATTGIS.COM Tom Ross tomr@ingres.com RW Salnick salnick.71qp@dejavu.spk.wa.us John Vandermay john.vandermay@marcam.com Peter Write Peter@gendev.demon.co.uk Please direct all corrections, suggestions and complaints to Jon Machtynger (flames especially, by private E-mail please). New contributors are always welcome. General expressions of praise and gratitude can be directed to any and all of the above. 01.001 What this FAQ is NOT. This FAQ is not a be-all and end-all performance tuning guide to using ODBC. This FAQ will get you started by showing you what ODBC is and who you can approach for more information. The area of performance tuning is very application/project dependent. Some guidelines will be mentioned as these will be generic across most vendors. Where performance tuning suggestions have been provided, keep in mind that their use was apt for the situation in which they provided benefit. 01.002 Improvements to this FAQ If you have any comments about this FAQ regarding accuracy of information or you would like more sections relating to different aspects of ODBC, then LET ME KNOW. 02.001 What is ODBC ODBC is Microsoft's implementation of a Call Level Interface specification defined by the SQL Access Group. It provides a standard API that allows a client (ie Windows program) to access a wide range of servers (ie data sources). The SQL grammer is supported at 3 levels of conformance. Applications must make assumptions about what minimum level of conformance they can accept from a data source. The data source you access can be a flat file or a relational database depending on your requirements. It is also possible to access multiple data sources simultaneously regardless of the database provided. There has been wide spread industry support of ODBC such that new drivers are appearing quite regularly. A list of the currently known drivers also appears in this FAQ. 02.002 What are advantages/disadvantages for using ODBC? ODBC is the most universally supported API of its kind that is actually available in shipping implementations, with support from more third parties than any other alternative (including non-shipping ones). ODBC makes it simple to develop generic, scalable client applications for distributed systems. On the other hand, in order to level the field of proprietary database vendors (non compliant SQL etc), ODBC takes a least-common denominator approach to what is usable in your applications. It is also an additional layer between the application's code and the data. This means that ODBC may restrict you from taking maximum advantage of your specific DBMS features (such as Groups/Roles/Database events) and ODBC will slow down your applications runtime performance. NOTE: Some vendors claim that use of ODBC can increase the performance of your application. 02.003 Where can I get ODBC Since ODBC is just a standard you can 'get' ODBC by using drivers provided by vendors. The Ingres ODBC driver used to come free with Ingres/NET. Since the introduction of the Intersolv driver, you can now purchase this. If however you, were given the previous driver free and were licenced for it, you should be able to upgrade to the Intersolv driver free of charge. There are alternative drivers available for ingres via other vendors. See the section 4.001 for other vendor details. 02.004 ODBC Architecture. ODBC follows a 4 layer model. +------------------+ | ODBC Application | Your Visual Basic or Excel program +------------------+ \ +------------------+ | Driver Manager | This is ODBC.DLL +------------------+ \ +------------------+ | ODBC Driver | This is the Driver (e.g. SQING.DLL) +------------------+ \ +------------------+ | Data Source | Your data Ingres database or xbase file. +------------------+ 02.005 What is a data source? A data source is a logical name for your data repository. This is not necessarily the same as your remote name in the NETU utility. You define these in the ODBC manager. When using an Ingres/NET based ODBC driver, think of the data source as a combination of a NETU entry (i.e. machine name, Ingres installation within that machine, username and user password) and a database name. 02.006 What is a single tiered or multi-tiered model? A data source can be a direct data source example xbase file or Btrieve file. This is a single-tiered data source. A data source can be an indirect data source such as an ODBC database across a network. An example of this is your Ingres database. This is a multi-tiered data source. 02.007 What database types can I access using ODBC? ODBC is supposed to provide an open platform from which to access data sources. This means that if you have an ODBC driver for a particular database, you can access that data base (data source) with any ODBC compliant interface (such as Excel/Visual Basic etc). Given the range of database types you can access through an ingres database (ie via their gateways), not having an ODBC driver for an RMS database is not a problem if you have the Ingres RMS gateway. ODBC provides for being able to utilise any form of data source. With regard to the Ingres ODBC Driver, this means you have access to any data source you can access through Ingres or an associated Driver: These are at least the following: Ingres (Not University Ingres) Allbase (Via Ingres Gateway) RMS (Via Ingres Gateway) DB2 (Via Ingres Gateway) 02.008 Can I run ODBC over network ABC? What you run ODBC across matters little since the ODBC driver will utilise the underlying Ingres/NET connection. A driver such as Visionware or OpenLink does not use Ingres/NET so you will have to contact them for information as to what their driver supports. There are INGRES/NET network adaptors for at least: Taken from Ingres Networking for Windows Release Notes 6.4/04 (net.win/01). DRIVER Network Description TCP_WOL TCP/IP Wollongong Pathway Access 2.0 or above TCP_LMX TCP/IP HP ARPA 2.1 Rev B.03.00, Microsoft Lan Manager 2.1 LM/X NETBIOS NetBIOS Used in a LAN with the Ingres OS/2 Server, Microsoft Lan Manager 2.0 or 2.1. DECNET DECnet Pathworks dor DOS 4.1 TCP_NFS TCP/IP PCNFS 4.0a or 5.0 LAN_WORKPLACE TCP/IP Lan Workplace for DOS 4.1 TCP_FTP TCP/IP PCTCP 2.1 or 2.2 TCP_DEC TCP/IP DEC TCP/IP 2.0 NVL_SPX NETWARE Netware 3.10 WINSOCK TCP/IP Used in a network with Windows 3.1 and a winsock.dll or rev 1.1 or above. Be sure to contact your Computer Associates office for authoritative information. Example: Is it possible to run Ingres/NET over trumpet winsock using either a LAN or PPP? Since Trumpet is winsock 1.1 compliant, Ingres/NET will communicate at the winsock layer to Trumpet. The media being used to transport your packets should not be important. So yes, this should work. I have not tried this but then again I have seen Windows 4GL working with Trumpet and I have seen replicator working across PPP. ODBC is only going to use the underlying Ingres/NET layer. 02.009 What are the different ODBC Conformance Levels? ODBC provides 3 conformance levels: CORE LEVEL 1 LEVEL 2 With ODBC 3.0 about to be released, you should contact your ODBC vendor for more information on their compliance. 03.001 What level of compliancy is the Ingres ODBC Driver? Traditionally, ASK and then CA distributed a Core and Level 1 compliant driver. The current ODBC driver (Intersolv 2.11) is documented has having CORE, LEVEL 1, and LEVEL 2 API functions (listed in an appendix). 03.002 How do I install the ODBC Driver? This will really depend on what driver you are loading. Most drivers provide their own quirks but in general will require that you provide in some way a host to connect to and a database name. Any driver that uses Ingres/NET will probably use the virtual node as a fair way of determining your server and the installation. Below is a brief description of installing the original Ingres driver and a first data source: Copy the files from the ODBC Disk to a temporary directory. From the file manager double-click on the SETUP.EXE program. You are then given the opportunity to create a data source. These are the values you should be entering. Data Source Name:Description: Virtual Node: Database: Server Type: Done! Now test it using VB or something similar. 03.003 Can ODBC Access Ingres Database Procedures The ability to execute database procedures is limited by the driver interface you are using. Testing of this failed under the Ingres driver version 1.01.1617 and earlier. I have tested this against the Intersolv Ingres driver and it still does not work. Expect a E_US09C4 Syntax error message. This also failed using the Q+E driver (Version 1.02) (with their patch). This would imply that this is an ODBC compliancy issue. This succeeded using OpenLink's Driver (Version 1.06.1010). 03.004 How do I use stored procedures from ODBC? Assuming you cannot use an execute procedure statement from your application, one solution is to use a trigger table. Inserting a row into this table along with any arguments necessary can fire off a rule that can execute the database procedure. 03.005 Can ODBC Access Knowledge Management facilities? The KM facilities are accessed transparently. In the case of rules being fired etc, these should activate whether you are using Ingres via a native interface or through an ODBC connection. With regard to Rules/Groups. The first version of the Ingres Driver did not provide this functionality. This is provided with other drivers and is only limited by the connection information passed to the Ingres server. You should check your ODBC driver documentation for confirmation on whether this is provided or not. For more info on implications of using Ingres Rules with ODBC, see the Jet White Paper and the "Implementing Ingres and ODBC/Visual Basic" Article. 03.006 What versions of the Ingres ODBC Driver exist? Intersolv has now released version 2.11 of its Ingres driver. However, the most recent version of the original Level 1 compliant Ingres ODBC Driver is 1.01.1617. This should have patches 3142 and 3174 applied as this resolves problems with underscores in table names and random GPF'ing. The most stable Level 1 compliant version previous to this is 1.01.1518. Where 1.01.1617 seems to fall over, it is advisable to regress back to 1.01.1518. 04.001 What alternative ODBC drivers are available to access Ingres? The following are a list of currently known ODBC Drivers that allow access to the Ingres Database. In order to provide some idea of the performance/ experiences with the drivers, I have 'quoted' from comments/emails etc. These are not ultimate judgments on the products, but rather a non-sales brochure opinion from real users. These opinions do not express my opinions of the products nor do they express the opinions of Computer Associates. 1) Intersolv ODBC driver, this uses Ingres/NET. The latest release is 2.11. For the moment, the CA recommended Driver. Requires Ingres/NET?: YES Address (UK) Ph: +44 1727 811177 Fx: +44 1727 848991 Opinions/Experiences: 2) SCO (previously Visionware). Old description follows: SQL Retriever from VisionWare, this uses VisionWare's own comms protocol (hence they claim performance advantages), but you require a VisionWare communications module on the server side as well, and I think they currently only have these for the major Unix platforms. The Visionware driver is definitely not available for NT. I was told by SCO that they have no plans to deploy on NT in the future (18-01-96). Requires Ingres/NET?: NO Address (UK): SCO Ltd. Vision House Waterside Kirkstall Rd. Leeds LS4 2QB Ph: +44 113 2512000 Fx: +44 113 2512001 old email: support@visionware.co.uk. info@visionware.co.uk. No new email addresses available to date. Opinions/Experiences: I have used the visionware driver and found it very easy to install. The very first connection was a little slow but the data transfer rate was quite good. 3) Pacer Software Requires Ingres/NET?: UNKNOWN Address (US) Pacer Software Ph: +1 508 898 3300 email: pmerge@pacersoft.com Opinions/Experiences: 4) VMARK Software Requires Ingres/NET?: UNKNOWN Address (US) VMARK Software 30 Speech (or Speen) Street Framinham MA 01701 Ph: +1 800 966 9875 of (+1 800 729 3553) Opinions/Experiences: 5) Apple Computing Requires Ingres/NET?: UNKNOWN Provide an ODBC driver for the Mac. Address: (somewhere in silicon valley?) Opinions/Experiences: 6) Independence Technologies Inc. Provide a DAL/ODBC client as well as a DAL server for VAX/VMS. Requires Ingres/NET?: UNKNOWN Address (US) Ph: +1 510 438 2000 Opinions/Experiences: 7) OpenLink Software Besides the standard Microsoft type interfaces that you can use to access various back-ends, OpenLink also provide a UNIX interface to ODBC. In other words, you can also use the ODBC API under UNIX. Provide 'UDBC' Universal Database Connectivity. UDBC is a compatibility layer enabling ODBC/SAG CLI development in UNIX (SCO, LINUX, AT&T UNIX 5.4, OSF/1, SOLARIS, SUNOS, HP-UX, DG-UX, SINIX, IRIX etc..), OS/2, and VMS environments. UDBC will allow developers write ODBC/SAG compliant Client Applications capable of accessing local or remote ORACLE, SYBASE, INGRES,INFORMIX, PROGRESS, UNIFY 2000 Database Engines without the enforced dependency on DBMS specific comms products such as SQL*Net, CTLIB/NETLIB, I-NET, INGRES NET, PROGRESS CLIENT, and UNIFY NET. Requires Ingres/NET?: NO For More Information: Contact: Tel: ++44-181-681-7701 Fax: ++44-181-681-7702 Email: 72662,3403@compuserve.com WWW: http://www.openlink.co.uk Opinions/Experiences: Very easy to install. Very fast. In some cases the database agent may take a second or two to start up but then successive connections are instantaneous. 8) AUGUST SOFTWARE CORPORATION A Macintosh ODBC Driver for Ingres to work with NT. Requires Ingres/NET?: UNKNOWN Contact: Thomas Gray 23232 Peralta Drive. Suite 202 Laguna Hills, California USA 92653-1437 Telephone (714) 454-9007 x443 Fax (714) 454-9032 Opinions/Experiences: 9) Visigenic Software Visigenic has ODBC drivers available for Ingres 6.4, Informix, Oracle, Sybase, MS SQL Server, and soon DB2. The Ingres 6.4 driver was added to the ODBC DriverSet 1.02 released in early May 1995. In 1994 Visigenic partnered with Microsoft with an exclusive license to port ODBC to all non-Windows platforms. Visigenic has the source code for the entire Windows SDK and currently has SDKs and ODBC DriverSets available on UNIX (Solaris, SunOS, HP-UX, IBM AIX, SCO, SGI...), OS/2 and Mac (68K and PMac). ODBC Test and ODBC Spy will be entering beta soon. Requires Ingres/NET?: Yes Address (US) Visigenic Software, Inc. 951 Mariner's Island Blvd. Ste. 460 San Mateo, CA 94404 Contact: Neil Blumenfield Tel: +1 415-286-1900 Fax: +1 415-286-2464 Email: info@visigenic.com support@visigenic.com WWW: http://www.visigenic.com Opinions/Experiences: 05.001 If my database changes do I need to change my client application? This will depend on the application you are writing. Some client applications load the data types of the data sources at application startup (such as an SQL monitor or dynamic Query Builder). If you have committed to data types and table structures in your application, the database table structure should mirror this. The exact database you are using should not matter though. A change of database name or ingres installation in which the database resides merely requires a change to the NETU or Data Source definitions. 05.002 What Ingres Software does ODBC Require? I have just bought ODBC driver 'x'. Will I need any Ingres software to use my application (e.g. MSAccess) against my Ingres database? This will depend on the driver you purchase. Look at the section describing the ODBC drivers available. Depending on which driver you buy, you may need to use/buy Ingres/NET. Some drivers will provide their own alternative. 05.003 Is ODBC secure? Since ODBC is supposed to be open, there are proprietary doors closed as far as keeping your front end secure. That is to say, you can't expect to be open without compromising security to some extent. At the end of the day, any ODBC sniffer will be able to trace *everything* from an ODBC perspective. This includes data, usernames, passwords etc. However, if you are using an ODBC driver that provides encryption, you increase your level of security. To really provide a secure environment and still use ODBC, you will have to bypass ODBC for the secure issues. You can use an embedded SQL DLL that performs individual secure statements. It would be wise to assign groups and roles to the databases accessible by ODBC. Since any front-end tool could feasibly modify your databases, you must enforce your security at a server level. The security of TCP/IP is questionable anyway. Question on the net: 'I am using Gupta Windows 5.0 to access an Ingres 6.4/04 database. The problem is that using the SQLWindows "sqlconnect" function to create an initial connect does not seem to do any checking of the actual password which is entered in a login screen. The value of the password is copied to the SqlPassword value but when I use truss on the iigcn process I can see that the password supplied to the server is always the one typed into NETU on the client. Even after defining an empty password (using '*') in NETU, this is sent to the server as the literal value which then fails.' Answer by mdkale: 'The same problem appears in Powerbuilder. The same solution may well work with Gupta. I believe the password being ignored is the 'fault' of Ingres/NET. Installation passwords are not supported. Try using a username within Ingres/NET of IIPROMPTALL, pw=*. This informs Ingres/NET to put up a separate dialog box requesting username/password. This works but you may soon tire of this new dialog box. So we wrote a .DLL to capture the username/password from our login screen and force-feed the Ingres dialog box. Users don't even see it pop-up' 06.001 Where is the ODBC FAQ? The INGRES FAQ (~45) is archived at: ftp.naiua.org (/pub/ingres) The following is an example of the dialogue with the FTP server; lines that include user input are marked with a `->' symbol: ->csh> ftp ftp.naiua.org Connected to ftp.naiua.org 220- *** /etc/motd.ftp *** [much stuff deleted]... 220 FTP server (Version 5.92 Tue Dec 14 10:42:52 EST 1993) ready. ->Name (ftp.naiua.org) anonymous 331 Guest login ok, send ident as password. ->Password: juser@somewhere.org 230 Guest login ok, access restrictions apply. ->ftp> cd /pub/???? 250 CWD command successful. ->ftp> get ODBC-FAQ 200 PORT command successful. 150 Opening ASCII mode data connection for ODBC-FAQ (nnnn bytes). 226 Transfer complete. local: ODBC-FAQ remote: ODBC-FAQ nnnn bytes received in 19 seconds (12 Kbytes/s) ->ftp> quit 221 Goodbye. 06.002 Can I get the FAQ by mail? The FAQ is posted five or six times a year. Between postings it is available from the archive site using ftp (see section 01.010). If you do not have ftp access to the archive site, you can obtain the FAQ by mail using one of the many ftpmail servers. (You can also use the ftpmail servers to get the contributed tools mentioned in section 03.) [The following information is provided by Bruce Horrocks and Tom Northey.] The ftpmail servers use different software and the commands required will differ from server to server. Try sending a message consisting of just the word "help". For some systems, the body of the message should be something like this: open address [username [password]] mode ascii cd /pub/directory/etc get filename where address is an IP address, username and password are the username and password to log into that machine as. Normally these are omitted and they default to "anonymous" and your own mail address as the password. Default transfer mode seems to be binary with files coming over uuencoded, hence the switch into ascii mode. In reply you get a confirmation of receipt mail message with an ID number that lets you cancel your request. Assuming all goes well you get the file requested as a mail message sometime later. Large files are blocked up into 64k messages and need to be reassembled before uudecoding. Here is a list of ftpmail servers: USA === ftpmail@decwrl.dec.com ftpmail@sunsite.unc.edu bitftp@pucc.princeton.edu Europe ====== bitftp@vm.gmd.de ftpmail@ftp.uni-stuttgart.de ftpmail@ftp.inf.tu-dresden.de ftpmail@grasp.insa-lyon.fr bitftp@plearn.edu.pl ftpmail@ftp.inf.tu-dresden.de ftpmail@ftp.uni-stuttgart.de ftpmail@doc.ic.ak.uk Australia ========= ftpmail@cs.uow.edu.au 07.001 What extra sources of information exist on ODBC? * "Microsoft ODBC 2.0 Programmers reference and SDK guide" by Microsoft Press; ISBN 1-55615-658-8. A very good guide to ODBC but is filled with typo's and loads of bugs in the code. I can understand why there is no disk with this as nothing would compile if it was taken straight from the text. I lost many hours finding misdeclared variables, missing declarations and pointers to nowhere. * "Inside ODBC" by Kyle Geiger; ISBN 0-471-10675-6 Kyle was one of the original ODBC architects from Microsoft. * "Using ODBC 2" by Robert Gryphon, Luc Charpentier, Jon Oelschager, Andrew Shoemaker, Jim Cross and Albert W Lilley. ISBN 0-7897-0015-8 Covers the ODBC API itself, and also the C++ MFC database classes, as well as the VB data controls and Data Access Objects which interface to ODBC. * "Database Developers Guide with Visual C++" by Roger Jennings and Peter Hipson; ISBN 0-672-30613-1 Discusses all aspects of writing Visual C++ DBMS applications all the way from DB design and performance issues, through user interface design, using MFC, ODBC, OLE through to packaging a finished application for distribution. * "Writing ODBC Drivers" by Dennis R McCarthy (Dr Dobbs Journal) Good explanation of Dr DeeBee tools to Build ISAM driver. I remember the article being a comparison of a couple of drivers having been given a budget and a time limit in which to build a driver. In any case, it was quite good reading. * The ODBC White papers (By Neil Black, and Stephen Hecht). Available under compuserve and also on the ftp.naiua.org. This includes both ODBC 1.1 and ODBC 2.0. There is plenty of information on ODBC in general, but this tends to be centred around the Jet Engine which has inherent problems of its own. * Visual Basic Documentation Look through the VB documentation on using ODBC through VB. The principles will be the same whether you are using VB or another product such as Powerbuilder. * Implementing Ingres and ODBC/Visual Basic (By Jon Machtynger) A DRAFT paper on some of the problems encountered around March '94. Can be found at ftp.naiua.org. * Microsoft ODBC FAQ (By Colleen Lambert) 'ODBC: Architecture, Performance and Tuning'. This is a document readable and printable from any HTML friendly viewer. Address is: http://www.microsoft.com/DEVONLY/STRATEGY/ODBC/ODBCBG.HTM * ftp.microsoft.com has a heap of information including the compatibility layer (if you're interested in using Access 2.0 with VB3.0). 08.001 What is the compatibility Layer? When Microsoft initially sold their Access 1.0/1.1 database packages, they were making use of the Jet Engine. Access 2.0 had many additions making access 1.0/1.1 databases incompatible with the Access 2.0 Engine. Microsoft now provides a compatibility layer (found at ftp.microsoft.com) that allows you to access Access 2.0 databases with Visual Basic. Look for the file COMLYR.EXE. 08.002 What facilities exist to trace ODBC performance? There are some commercial products available: * ODBC Spy provided in the ODBC SDK 2.0. (Free) Impressions: It does an OK job. If you know the ODBC API, then it is probably quite sufficient. However it lacks a really good interface. * SQL Inspector (Call for details) Blue Lagoon Software 6047 Tampa Ave., Suite 209 Tarzana, CA 91356 U.S.A. Main: (818) 345-2200 Fax: (818) 345-8905 BBS: (818) 343-8433 CSERV: 70152,1601 Internet: blagoon@netcom.com * Dr DeeBee Spy, Syware Inc, P.O. Box 91, Kendall, Cambridge, MA 02142. USA Tel: (617) 497 1376 Fax: (617) 497 8729 * ODBC Agent The Leading Edge 2391 Baxter Crescent Burlington, ONTARIO CANADA L7M 4C9 +1 (905) 319-8063 Internet: edge@wchat.on.ca CompuServe: 76311,1426 Evaluation Copy available from compuserve (GO MSSQL) Contact: Brendan Young. Impressions: Really nice interface. Very intuitive. Some things in the evaluation copy did not work (such as logging trace to a file) but overall I was very impressed. The price has recently come down on this tool so you'll need to speak to them regarding current cost. Some more Info on the Product follows: ODBC agent provides comprehensive Spy/Trace analysis and fast & simple ad-hoc ODBC query functionality. Its intuitive graphical displays show you the manner in which ODBC compliant applications make use of the ODBC specification, and the manner in which ODBC drivers handle the various API calls. It can display up to 999,999,999 rows of trace information on screen and output unlimited rows of trace information to disk. The 16-bit version works with you applications now and the 32-bit release for Windows NT and Windows95 will be work great with 32 bit applications. You can easily save and open existing queries (*.sql files) capable of containing multiple SQL commands and display up to 999,999,999 rows by 999,999,999 columns of data for select queries. Fire it up and get complete driver information for each ODBC data source, full database table & column information, all system tables, views, aliases and synonyms including privileges. You'll instantly see detailed information concerning all columns in each table in the current data source, foreign & primary keys, references from a given column as well as references to a given column. ODBC Agent offers full Clipboard support, file-save and file-print functions. 08.003 Alternatives to ODBC. ODBC is supposed to 'be' the alternative. However, it does provide its fair share of problems. Most of these problems can be remedied by going more proprietary. Some users are using DLL's to bypass ODBC performance. For an example of this, see my paper on 'Implementing Ingres and ODBC/ Visual Basic' or March '94. This is a little out of date but gives heaps of pointers. * Due to overwhelming requests (and to cut down on personally mailing everyone who asks), the DLL and sample application are now available at the NAIUA ftp site. Look for the VBISQL.ZIP file. 09.001 ODBC is very slow using Visual Basic. What can be done? This is in effect a problem of the Jet Engine. The Jet Engine is inherently slow against multi-tiered data sources. ODBC has a problem in trying to be all things to all products. Performance will also depend on the ODBC driver you are using as well as the ODBC interface you are using. I have run an application under Powerbuilder that is considerably faster (in terms of connect time and data retrieval) than I could have created under Visual Basic. This was using the Ingres Driver. Hence, performance of the Ingres Driver was not necessarily the major bottle neck. This also tells me that use of a much faster driver would have improved performance dramatically under Powerbuilder. Programming using the ODBC API directly is a little bit of work initially but it may well be worth the effort. You will come up against *loads* of problems with code examples and Visual Basic issues (if you are calling directly from VB). You may want to create wrapper routines that convert your FAR pointers to something more manageable by your host application. For more information on performance tuning ODBC with Jet, see the documents outlined in 07.001. * Implementing Ingres and ODBC/Visual Basic * Microsoft ODBC FAQ 10.001 Can I use ODBC with University Ingres? No. University Ingres was created well before the ODBC standard. Furthermore, Ingres89 uses a QUEL interface. ODBC requires SQL (also known as the crippleware version of QUEL). 10.002 Can I access Database events through ODBC? The ODBC Standard does not provide you with the facility to use database events. However, there is a control that does provide this functionality. It works as a VBX and is currently usable (i.e. tested) from within at least Visual Basic 3.0 and SQLWindows 5.0. The current version 2.00 provides the alternative of using Ingres/NET or ODBC to raise DBEvents. For more information contact Joli International Ltd. at: (100436.1103@compuserve.com) 10.003 Can I use a 6.4 ODBC driver against OpenIngres? Yes this is possible. Due to Ingres' very open structure, a 6.4 client is totally unaware that it is in fact talking to an OpenIngres server. In fact, due to the fact that GCA was designed to be upwardly compatible, OpenIngres will do whatever the 6.4 client requests (within reason of course). Now if you use an ODBC driver that uses Ingres net you can attach to an OpenIngres server with the limitation that you won't have access to OpenIngres specific data types such as DECIMAL/LONG VARCHAR. I have found relatively few problems with this so far. If you are not using a driver that relies on Ingres NET, you may have to be a little bit more devious. The following examples assume you'll be using Ingres local to your database access engine. In other words you're either using something like OpenLink or Visonware (i.e. no Ingres net) or you're using your ODBC driver locally (e.g. 32bit NT version of Intersolv or OpenLink NT). For UNIX ~~~~~~~~ You have two choices here. You can set up a 6.4->OI gateway. This will look after the requests from your OI database through truly portable GCA (see option 1). Alternatively, you may be lucky enough to just switch servers (See Option 2). Option 1: You can install an Ingres 6.4 client installation on the same machine as your OI 1.x. Thie means your 6.4 installation only requires use of your gcc/gcn. Your ODBC client always speaks to the 6.4 installation. You will therefore need to set up your netu entries as a loopback from 6.4 to the OpenIngres installation on the same machine. This is somewhat of an inconvenience but is a good workaround while an OpenIngres ODBC driver is being developed. Your ODBC client (i.e. PC) will then have to specify the 'remote' database (from the 6.4 installations perspective). In other words, on your PC you enter 'oinode::mydb' instead of 'mydb' for your database name. You will have to have set up a netu entry for 'oinode' on the server (gateway) to your server (database installation). This means keeping your netu entries up to date with the UNIX passwords. I have successfully used this with an OpenLink driver on HP. Option 2: Using OpenLink under HP, I was also able to modify the II_SYSTEM in the oplrqb.ini to point from my original 6.4 installation to my new OI 1.2 installation. The request broker starts up fine (as you would expect - no contact with Ingres yet). However, the Ingres agent (6.4 linked) seems to speak to OI with no problems. Quoting the OI 1.2 release notes for HP: "CA-OpenIngres 1.2 provides support for 6.4 applications at the binary level. You can run 6.4 applications that access a CA-OpenIngres 1.2 server without rebuilding the application. However it is recommended that you rebuild all CA-Ingres 6.4 applications with CA-OpenIngres 1.2." In other words, before throwing option 1 away, ensure you have something similar to the above in your release notes. I didn't find anything like this in the NT release notes. This explains the following workaround. Under NT ~~~~~~~~ Since there is going to be a conflict of a 6.4 GCF architecture with the new improved OI 1.2 architecture, you can run both a 6.4 client and OI 1.2 client in the same installation (i.e. same II_SYSTEM). Installation of (as a bare minimum) the OpenROAD Driver in your proposed II_SYSTEM is necessary. This MUST be done BEFORE you install OpenIngres. If you have already installed OpenIngres, then install OpenRoad in the same directory and RE-install OpenIngres over the top. Your databases should be quite safe since iidbdb etc already exist. You can now install your 32 bit driver. Any 6.4 clients on the NT box will require the 6.4 runtime system. Fortunately, this is now in your II_SYSTEM since you installed the OpenROAD driver. Your 6.4 clients will be able to speak to the local 1.2 server. I have successfully used this with both the Intersolv 2.11 32 bit driver and the OpenLink 32 bit NT ODBC driver. 10.004 Can I use ODBC under Windows95? Yes it is possible to use ODBC against Ingres databases under Windows95. You have two possibilities: You can use the 16 bit version of ODBC together with the 16bit Ingres/NET *or* you can use the 32 bit version of an ODBC driver. If you're going to use Intersolv's 32 bit driver, you will need to make sure you can run the 6.4 dependent EXE under Windows95. For this, I installed the Windows95 OpenRoad driver, and copied the LIBQ32_1.DLL to a file called LIBQ32.DLL. Then install your Intersolv driver as per normal. Visual Basic 4.0 worked fine. 11.001 I have problems accessing tables with an underscore in them. This was a problem with Driver 1.01.1617 (without patches). Install the patch 3174 (or regress back to 1.01.1518). You can request the patch from your nearest CA office. Recent ODBC delivery has included the patch. 11.002 I am using Visual Basic and can't use Transactions? You will *not* be able to use Transactions using Visual Basic using SQL_PASSTHROUGH. This is due to the limitation of ODBC level 1 compliancy (or Visual Basic depending on whether Microsoft call it a deficiency in your driver or their product). You can use transactions under VB by using dynasets. For more information See the Implementing Ingres and ODBC/Visual Basic Paper (section 7.001). 11.003 Powerbuilder GPF's when attaching to the Ingres Database using the Ingres driver 1.01.1617. This also occurs using Lotus 123 Version 5. Regress back to Ingres driver 1.01.1518 or install patch 3174. 11.004 I cannot use Lotus123 (Previous to Version 5) with the Ingres Driver! There have been many issues with using Lotus with the Ingres Driver. My Recent testing of Lotus Version 5 using the Q+E Driver (Version 1.02) has shown it to work but dates did not display properly. Lotus have been investigating this. 11.005 I've just installed Paradox 5 and trying to use the Ingres ODBC driver version 1.01.1617. When I try and open an Ingres table on our Unix box I get a General protection Fault in sqing.dll. The problem may be due to the Driver version. Regress back to ODBC driver 1.01.1518 or install patch 3174. 11.006 I get an 'Read Only' or 'Table is not Updatable' error message when trying to update or delete a row in an ODBC table. You must define a unique Index on the table being updated. This is a restriction of ODBC. Jet will query the DBMS catalog for unique indexes and will use the first one (in DBMS lexical order) it finds. It then uses this unique index to maintain addressability to each row. If it finds none then the recordset is treated as read only. With the new Intersolv driver, you will need to either have a table created with a unique index as part of the table (e.g. btree) or create a secondary index. For columns of integer, I have found you need a secondary index. The primary index is not enough. 11.007 I cannot reliably access and update data to Ingres using Access 2.0. Also, I Get an ODBC_Call Failed error on reading multi-column indexed tables. When using large tables with a multi-column primary key, you will get an ODBC call failed error when trying to read the table. You will be able to edit/retrieve one record at a time (but of course this is slow). One workaround is to eliminate multi-column primary keys or use the SnapShotOnly=1 ([ODBC] section) parameter in the MSACC20.INI (which will cause the table to be read-only). Another workaround is by using a SQL Passthrough query as the source of the data instead of an attached table. MSAccess tends to take a simple select * from and convert it to a select with about 30-40 where clauses. This tends to blow the Ingres optimiser. By making the source of the data a SQL Passthrough Query you eliminate the opportunity for MSAccess to modify its query from Access-SQL to Ingres-SQL. This is a problem that appears on many drivers. This is invariably due to Access 2.0. Access trys to read a data set of up to 10 rows at a time. The Select statement generated by Access that allows it to update any row that has changed is composed of 10 'OR's. With a multi- column key, the WHERE clause is too complex. This has apparently been resolved in Intersolv's 2.11 driver but I have not tested this yet. 11.008 How can I set Lockmodes using the Ingres ODBC Driver? Driver 1.01.1617 does not allow the set lockmode statement to be sent as commands. You can however, set up a data source with a locking strategy of readlock = default/nolock/system. The new Intersolv Driver does not allow you to set readlock. However, you can set your default readlock strategy using ING_SET in your config.ing file. i.e. 'ING_SET=set lockmode session where readlock=nolock' 11.009 Can I use ODBC with OpenROAD? Up until recently, W4GL 3.0/02 (xxx.xxx/0x) and 6.4/04 (net.win/00) were incompatible. This meant that using any ODBC driver that utilised Ingres/NET would cause a conflict. The only alternative was using a driver that did not use Ingres/NET such as Openlink or Visionware. From W4GL 3.0/03 (...), the Ingres/NET conflict has been completely resolved so you can use an Ingres/NET application (such as Crystal Reports) through ODBC and run your OpenRoad application at the same time. You must install the 6.4/04 (net.win/01) for this to work though. An added advantage of this version of Ingres/NET is that it is far more performance. If you are using ODBC through OpenROAD to access local database files, you should find no problems at all. The main difficulties in using ODBC through OpenROAD are in addressing your handles properly and defining your API routines. Until you get them perfect, you will get no end of GPF's. I stress that these GPF's are probably not due to OpenROAD but down to getting your integer/long arguments correct in your API function declarations. Try creating a wrapper DLL for the ODBC API. This will behave far better and allow easier debuging of ODBC calls. What is possible is to define a user class holding the ODBC attributes/methods and provide the ODBC functionality through OpenROAD methods. This worked quite well on local tables in the Watcom Database and also Ingres Databases through ODBC. In theory this should work as well on other databases like Informix and Sybase but I didn't have one around to try it. 11.010 When using attached tables with MSAccess and the Intersolv 2.0 driver, if I don't save the user/password information at the time of attach, the next time I go into MSAccess and try to use that table I get a GPF. This will only occur on tables that have a unique secondary index. If you are using the new Ingres/NET 6.4/04 (net.win/01), request patch 3627 from technical support. It resolves this problem. Alternatively, if you are using the Intersolv 2.10 driver or above, this should be resolved. 11.011 I can't use MULTINATIONAL dates with the new Intersolv driver. Strangely, only a date format of US works with the new driver. I can't see a problem with this unless you're not in the States. This is resolved as from the Intersolv driver 2.10 and above. If you need to use multiple date formats, you can set up a batch file that starts your application. Before application startup, assign the II_DATE_FORMAT to MULTINATIONAL (for example). 11.012 When I access information from attached tables using the Intersolv Driver, I get the following error message: ODBC Specification Conformance Error (-7776). This error should be reported to the ODBC Driver vendor. This is the error message produced by not having your date set to US (as per 11.011). This problem should be resolved with version 2.1. Setting your date format to US does not however, make any difference to your display on Access. It will still show dates as per your control panel settings. 11.013 I've tried installing my 16 bit ODBC Driver under NT. It doesn't work. This makes sense, since the 16 bit ODBC manager will try to install itself in the NT control panel. This is more a by-product of the ODBC driver's setup program than any 16 bit limitations. I have spoken to people to have installed the Intersolv 16 bit driver under NT successfully. It is probably preferable however to use the 32 bit driver. It works fine. I've written a 32 bit driver without coding any thinking and it was usable by a 16 bit application such as ODBC test. I can only assume then, that the thinking is being handled somewhere in the top two layers of ODBC. In other words, your 16 bit applications should still work OK with a 32 bit driver. The only two 32bit drivers I have been made aware of so far are Intersolv and OpenLink. Both work well against Ingres (and OpenIngres) under NT. For more information see section 4.001. 11.014 Can I use Ingres Net/ODBC with Windows-95? Theoretically you should be able to use any 16-bit application under windows-95. I have successfully used Ingres/NET without having to fudge anything through W95. If you can use a 16-bit ODBC manager and an application that uses the Ingres 16-bit NET API, this should work. I have heard that it has worked under NT. 11.015 I have had problems using blank dates in MSAccess. Where you have a blank string for a date, you will get an ODBC specification conformance error (-7776). All data when using Access shows up as #Name. This has been reported as Ingres Bug #69085. In other words, this has been reported back to Intersolv for resolution. The workaround is to use NULLs instead. 11.016 I cannot use Intersolv's 32 bit driver under NT 3.51. On doing a connect, the interface immediately disappears. The same problem occurs using ODBC Test. This due more to a lack of DLL's in your 6.4/OI 1.2. To work around this problem, if you are using Ingres 6.4/05, install the OpenROAD driver in the same installation as your Ingres server. If you are using OI 1.2, install the OpenRoad driver and then re-install OI 1.2 on top again. This problem did not appear in NT 3.50 and earlier. 11.017 I can't install the Intersolv driver properly... I get the following error: "You may be low on memory and need to quite a few applications" This is a very bad example of using one error message for every problem. You may in fact be low on memory. However you should also check that DLLs required by the driver are all readable and in your path. Some of the main culprits: %II_SYSTEM%\ingres\bin\iiw3ing.dll \windows\system\qeing407.dll Under Windows95 and WindowsNT they could also be: libq32.dll adf32.dll gca32.dll 11.018 The date/time as I read data in MSAccess is always out by a number of hours from that time I get on the server. The Net/API will use the DOS environment variable TZ. Work out what offset you need to set in DOS for this to work. e.g. place a SET TZ=-1 in your autoexec.bat. ------------------------ END OF FAQ -----------------------------
© William Yuan 2000
Email William