uawdijnntqw1x1x1
IP : 216.73.216.110
Hostname : 6.87.74.97.host.secureserver.net
Kernel : Linux 6.87.74.97.host.secureserver.net 4.18.0-553.83.1.el8_10.x86_64 #1 SMP Mon Nov 10 04:22:44 EST 2025 x86_64
Disable Function : None :)
OS : Linux
PATH:
/
home
/
emeraadmin
/
www
/
node_modules
/
.bin
/
..
/
isobject
/
..
/
array-slice
/
..
/
..
/
4d695
/
unixODBC.zip
/
/
PK㰐\a��00"doc/AdministratorManual/index.htmlnuȯ��<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta name="Author" content="Peter Harvey"> <meta name="GENERATOR" content="Mozilla/4.77C-CCK-MCD Caldera Systems OpenLinux [en] (X11; U; Linux 2.4.2 i686) [Netscape]"> <title>unixODBC - Administrator Manual</title> </head> <body text="#000000" bgcolor="#FFFFFF" link="#0000EF" vlink="#51188E" alink="#FF0000"> <img SRC="unixODBC.gif" height=32 width=32><font face="Arial,Helvetica"><font size=+4>unixODBC</font></font> <br> <hr WIDTH="100%"> <center><b><font face="Arial,Helvetica"><font size=+3>ADMINISTRATOR MANUAL</font></font></b></center> <p><b><font face="Arial,Helvetica">Introduction</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">Welcome to the unixODBC Administrator Manual. This manual has been created to help system administrators install and manage the ODBC sub-system.</font><font face="Arial,Helvetica"></font> <p><b><font face="Arial,Helvetica">Getting Started</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">At this point you know what ODBC is and what it can offer the Users of your system(s) - now you want to get it on your system(s).</font><font face="Arial,Helvetica"></font> <p><b><font face="Arial,Helvetica">Platforms</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">unixODBC implements ODBC on the following platforms;</font> <ul> <li> <font face="Arial,Helvetica">Linux</font></li> <li> <font face="Arial,Helvetica">Mac OSX</font></li> <li> <font face="Arial,Helvetica">VMS</font></li> <li> <font face="Arial,Helvetica">and various flavours of UNIX</font></li> </ul> <font face="Arial,Helvetica">This manual covers all platforms and will give special indication of differences for any particular platform.</font><font face="Arial,Helvetica"></font> <p><b><font face="Arial,Helvetica">Do You Have It?</font></b> <br><font face="Arial,Helvetica"> </font> <br><font face="Arial,Helvetica">It is possible that your system already has unixODBC installed. The best way to check for this is to drop to a terminal and execute 'odbcinst --version'.</font> <br><font face="Arial,Helvetica"></font> <table BORDER COLS=1 WIDTH="100%" BGCOLOR="#FFFFCC" NOSAVE > <tr> <td>[root@p12 qt]# odbcinst --version <br>unixODBC 2.1.1 <br>[root@p12 qt]#</td> </tr> </table> <font face="Arial,Helvetica"></font><font face="Arial,Helvetica"></font> <p><b><font face="Arial,Helvetica">Downloading</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">You can get the source from <a href="http://sourceforge.net/projects/unixodbc">Source Forge</a>.</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">You can get binary distributions from various places. One place to look is with the vendor of your operating system. You can also go to <a href="http://sourceforge.net/projects/unixodbc/">Source Forge</a> and take a look at the Home Page to see the availibility and location of binary distributions.</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">Whether you choose a binary distribution or source code depends largely upon your site policy and which operating system you are working with. I recommend the following;</font> <ul> <li> <font face="Arial,Helvetica">Mac OSX - use a binary distribution</font></li> <li> <font face="Arial,Helvetica">Others - use a source distribution (tar-ball NOT CVS)</font></li> </ul> <font face="Arial,Helvetica"></font> <p><br><b><font face="Arial,Helvetica">Installing From Source</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">There are two options when installing from source. You can install from a source distribution (a gzipped tar-ball) or from CVS. In either case you will find README files in the main directory which should help you build and install unixODBC.</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">The unixODBC build process uses the GNU auto-tools. This will be a concern to you if you choose to build from CVS because you must start the build process with 'make -f Makefile.cvs' - this, in turn, uses the GNU auto-tools (i.e. automake, autoconf) to build a 'configure' script. Unfortunately; the GNU auto-tools can be very version sensitive. See the README file(s) for more on this if you plan to build from CVS source.</font> <br><font face="Arial,Helvetica"></font> <table BORDER COLS=1 WIDTH="100%" BGCOLOR="#FFFFCC" NOSAVE > <tr> <td>[root@p12 unixODBC]# make -f Makefile.cvs </td> </tr> </table> <font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">You do not have to 'make -f Makefile.cvs' when using a source distribution. Regardless of whether you choose to use CVS or a source distribution you will want to execute the 'configure' script with options appropriate for your needs.</font> <br><font face="Arial,Helvetica"></font> <table BORDER COLS=1 WIDTH="100%" BGCOLOR="#FFFFCC" NOSAVE > <tr> <td>[root@p12 unixODBC]# ./configure --help</td> </tr> </table> <font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">The 'configure' script will check your system for features of interest and build some make files as well as create some include file(s) which will ensure that unixODBC will build without errors and only with features supported by your operating system.</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">At this point it is important to think about whether or not GUI tools are important to you (and your Users). The 'configure' script will try to detect support for the GUI applications in unixODBC and will build them if such support exists. unixODBC includes GUI tools based upon the Qt class library and GTK. The Qt based tools will be built if libqt*so can be found. Linux systems will probably have this. You can get this from <a href="http://www.trolltech.com">Troll Tech</a>.</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">Now you are ready to build the sources. Do this with the usual build sequence of commands.</font> <br><font face="Arial,Helvetica"></font> <table BORDER COLS=1 WIDTH="100%" BGCOLOR="#FFFFCC" NOSAVE > <tr> <td>[root@p12 unixODBC]# make <br>[root@p12 unixODBC]# make install</td> </tr> </table> <font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica"><font color="#FF0000">Mac OSX</font>: The Apple folks seem to be grappling with their support for the GNU auto-tools at the time of this writing. I recommend installing from a binary distribution of unixODBC. If you must install from source, and you are having problems with the GNU auto-tools, then you may want to try the qmake build. The qmake build process is not well documented at this time. People familiar with qmake should be able to build unixODBC with the included qmake project files.</font><font face="Arial,Helvetica"></font> <p><b><font face="Arial,Helvetica">Installing From Binary</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">RPM</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">Various RPMs exist for unixODBC. The best idea is to use any RPM files you can from your O/S vendor. Typically RPM distributions break unixODBC into more than one RPM distribution such as; core, and GUI.</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">Mac OSX Disk Images</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">A binary distribution for OSX has recently become availible in the downloads section at <a href="http://www.codebydesign.com/DataArchitect">CodeByDesign</a>. This includes proper Mac installs. The install should be done in the following order;</font> <ol> <li> <font face="Arial,Helvetica">Qt Runtime</font></li> <li> <font face="Arial,Helvetica">unixODBC</font></li> <li> <font face="Arial,Helvetica">drivers in any order</font></li> </ol> <font face="Arial,Helvetica">Others</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">Proper install packages are also avalible for other platforms such as the Debian package format for Debian Linux. Check with the O/S vendor.</font><font face="Arial,Helvetica"></font> <p><b><font face="Arial,Helvetica">Where Are Installed Files</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">The location for files vary somewhat depending upon how you installed unixODBC (source or binary) and which platform you installed on. Furthermore; the location can be changed during a source install by './configure --prefix='.</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">Typically;</font> <ul> <li> <font face="Arial,Helvetica">library files will go in /usr/lib or /usr/local/lib</font></li> <li> <font face="Arial,Helvetica">binaries will go in /usr/bin or /usr/local/bin</font></li> <li> <font face="Arial,Helvetica">system config files will go in /etc or /usr/local/etc</font></li> </ul> <font face="Arial,Helvetica">The system config files are;</font> <ul> <li> <font face="Arial,Helvetica">odbcinst.ini - list of registered drivers</font></li> <li> <font face="Arial,Helvetica">odbc.ini - system data source names</font></li> </ul> <font face="Arial,Helvetica">The location of the system config files can be changed by setting the ODBCSYSINI environment variable at run-time. The system config files can be edited using a simple text editor but it is recommended that you use the ODBCConfig GUI tool or the odcinst command-line tool because they will validate the reading and writing of these files while ensuring that the current location is used.</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica"><font color="#FF0000">Mac OSX</font>: The OSX binary install will use; /usr/lib, /usr/bin, /Applications/Utilities and /etc.</font><font face="Arial,Helvetica"></font> <p><b><font face="Arial,Helvetica">Post Install</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">You now have an ODBC sub-system installed on your system(s). What is the system administrators role from here? The system administrator is the only person who can install and register ODBC drivers and create/edit/delete system Data Source Names (DSN).</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">Drivers</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">Drivers should be installed and configured based upon the driver vendors instructions. Many drivers do not include a full install process - lacking the driver registration step. These drivers can be registered using the ODBCConfig GUI tool or the odbcinst command-line tool.</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">System DSN</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">These can be created using the ODBCConfig GUI tool or the odbcinst command-line tool. ODBCConfig is the prefered method but not all drivers have a User Interface (U.I.) part.</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica"><font color="#FF0000">Mac OSX</font>: In some cases the ODBCConfig icon will not open. In such a case you should drop to a terminal window and use the open command.</font> <br><font face="Arial,Helvetica"></font> <table BORDER COLS=1 WIDTH="100%" BGCOLOR="#FFFFCC" NOSAVE > <tr> <td># open /Applications/Utilities/ODBCConfig.app</td> </tr> </table> <font face="Arial,Helvetica"></font> <p><b><font face="Arial,Helvetica">Summary</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">unixODBC implements an ODBC sub-system for a wide variety of platforms. unixODBC can be installed using; binary, source and source from CVS. Drivers can be installed using installation methods created by the driver vendor with unixODBC tools availible to fill any gaps. ODBC system information can be managed using; ODBCConfig, odbcinst, or a text editor.</font> <br><font face="Arial,Helvetica"></font> <p> <hr WIDTH="100%"> <br> <br> </body> </html> PK㰐\#9�T�%�%%doc/AdministratorManual/odbcinst.htmlnuȯ��<html> <head> <title>unixODBC without the GUI</title> </head> <body> <h1><center>unixODBC without the GUI</center></h1> <h3><center>Or<br> everything you wanted to know about odbcinst but were afraid to ask</center></h3> <h3>Purpose</h3> A lot of people are using unixODBC but for a number of reasons are not building the GUI configuration and testing tools (ODBCConfig and DataManager). This document is aimed at these people and hopes to explain what you need to do and when to do it. <br> <h3>What's a ini file ?</h3> ODBC first appeared within Windows 3.0. At this time Windows used .ini files to contain configuration information. These are text files containing the following layout <pre>[section1] entry1 = value entry2 = value [section2] entry1 = value entry2 = value ...</pre> With the advent of Windows NT these ini files have been replaced by the registry, but the API to access them in ODBC has remained the same. Windows has two function in odbcinst.dll that allow applications and drivers to query and modify these files, SQLGetPrivateProfileString and SQLPutPrivateProfileString. <p>As part of unixODBC's aim of reproducing the ODBC environment on non Windows platform's the ini files and libodbcinst provide the same format and functionality. <h3>System versus User</h3> ODBC distingushes between two types of ini files. System ini files are designed to be accessable but not modifable by any user, and user files are provate to a particular user, and may be modified by that user. <p>The system files are odbcinst.ini and odbc.ini (note no leading dot), and the user file is ~/.odbc.ini in each user's home directory (note leading dot). <p>The system file odbcinst.ini contains information about ODBC drivers available to all users, and the odbc.ini file contains information about DSN's available to all users. These "System DSN's" are useful for application such as web servers that may not be running as a real user and so will not have a home directory to contain a .odbc.ini file. <p>A good example of this is Apache and PHP with ODBC support. When the http server is first started it calls SQLAllocEnv as root. it then at a later time changes to the specified user (in my case nobody) and calls SQLConnect. If the DSN's was not a system DSN then this fails. <h3>FILEDSN's</h3> ODBC 3 also has a third sort of DSN, a file DSN. These store the connection information in a file that may be accessable to anyone. unixODBC does not at this time support FILEDSN's but it will when I get around to it. They are useful things but of less use to UNIX's than NT. Because of the MS view that everyone should have Windows on there desk, each workstation will have it's own registry with it's own set of system and user DSN's that can not be used by other workstations. File DSN's are a fix to allow the information to be stored in a central server that is accessable to all the workstations. <h3>Why not vi ?</h3> All the configuration files needed by unixODBC are plain text files, so there is no reason that you can not use your favorite text editor to setup the files. <p> However since beta 1.6 the location of the system files odbcinst.ini and odbc.ini are determined by the configure script. The default location is /usr/local/etc, and if a prefix is specified the location is {prefix}/etc. The location of the etc path can be broken out of the normal prefix tree by specifing --sysconfdir=DIR, so the following will expect the system files to be in the same location as pre 1.6 builds. <pre>./configure --sysconfdir=/etc</pre> The upshot of all this is that if you use odbcinst to configure the files you can be sure that the same path to the files will be used as are used by the driver manager, so the modifications will take effect. <h3>What goes into them ?</h3> Ok now we know a bit of the history of ini files and ODBC so now we need to get to the bit that is actually of use. What you put in them. <h4>odbcinst.ini</h4> This contains a section heading that provides a name for the driver, so for the example below PostgreSQL to indicate a Postgres driver. The following lines contain a description and then the important bits. The Driver and Setup paths point to the ODBC driver and setup libs. The setup lib is used when you click on Add in ODBCConfig to add a new DSN, but as this document is about not using the GUI tools, this is not that important for us. Far more important is the Driver entry (vital in fact) This is the library that the driver manager will dynamicaly load when SQLConnect or SQLDriverConnect is called for that DSN. If this points to the wrong place the DSN will not work. If the dlopen() fails the DSN will not work. The fileusage entry is added by the odbcinst program, so if you are using a text editor, you will need to add it yourself. <pre> [PostgreSQL] Description = PostgreSQL driver for Linux & Win32 Driver = /usr/local/lib/libodbcpsql.so Setup = /usr/local/lib/libodbcpsqlS.so FileUsage = 1 </pre> <h4>templates</h4> odbcinst expects to be supplied with a template file. If you are adding a driver for the above entry the template file would contain the following <pre> [PostgreSQL] Description = PostgreSQL driver for Linux & Win32 Driver = /usr/local/lib/libodbcpsql.so Setup = /usr/local/lib/libodbcpsqlS.so </pre> and you would invoke odbcinst with the following arguments, assuming that you have created a file template_file with the above entries in. <pre> odbcinst -i -d -f template_file </pre> The args to odbcinst are as follows <p>-i install <br>-d driver <br>-f name of template file <p> <h4>Threads</h4> Since 1.6 if the driver manager was built with thread support you may add another entry to each driver entry. For example <pre> [PostgreSQL] Description = PostgreSQL driver for Linux & Win32 Driver = /usr/local/lib/libodbcpsql.so Setup = /usr/local/lib/libodbcpsqlS.so <b>Threading = 2</b> </pre> This entry alters the default thread serialization level. More details can be found in the file DriverManager/__handles.c in the source tree. <h4>[.]odbc.ini</h4> The contents of the odbc.ini files are a bit more complicated, but they follow just the same format as the odbcinst.ini entries. These are complicated by each driver requiring different entries. The entries for all the drivers supplied with the distribution are included bellow for reference. The entries may be added in the same way using odbcinst, or a text editor. A sample entry to match the above driver could be <pre> [PostgreSQL] Description = Test to Postgres Driver = PostgreSQL Trace = Yes TraceFile = sql.log Database = nick Servername = localhost UserName = Password = Port = 5432 Protocol = 6.4 ReadOnly = No RowVersioning = No ShowSystemTables = No ShowOidColumn = No FakeOidIndex = No ConnSettings = </pre> And this may be written to a template file, and inserted in the ini file for the current user by <pre> odbcinst -i -s -f template_file </pre> The individual entries of course may vary. <p>The Driver line is used to match the [section] entry in the odbcinst.ini file and the Driver line in the odbcinst file is used to find the path for the driver library, and this loaded and the connection is then established. It's possible to replace the driver entry with a path to the driver itself. This can be used, for example if the user can't get root access to setup anything in /etc (less important now because of the movable etc path). For example <pre> [PostgreSQL] Description = Test to Postgres Driver = /usr/local/lib/libodbcpsql.so Trace = Yes TraceFile = sql.log Database = nick Servername = localhost UserName = Password = Port = 5432 Protocol = 6.4 ReadOnly = No RowVersioning = No ShowSystemTables = No ShowOidColumn = No FakeOidIndex = No ConnSettings = </pre> <h3>Templates</h3> The templates for the included drivers are... <h4>Postgress</h4> <pre> [PostgreSQL] Description = Test to Postgres Driver = PostgreSQL Trace = Yes TraceFile = sql.log Database = nick Servername = localhost UserName = Password = Port = 5432 Protocol = 6.4 ReadOnly = No RowVersioning = No ShowSystemTables = No ShowOidColumn = No FakeOidIndex = No ConnSettings = </pre> <h4>Mini SQL</h4> <pre> [Mini SQL] Description = MiniSQL Driver = MiniSQL Trace = No TraceFile = Host = localhost Database = ConfigFile = </pre> <h4>MySQL</h4> <pre> [MySQL] Description = MySQL Driver = MySQL Trace = No TraceFile = Host = localhost Port = Socket = Database = </pre> <h4>NNTP driver</h4> <pre> [nntp Data Source] Description = nntp Driver Driver = nntp Driver Trace = No TraceFile = Host = localhost Database = Port = </pre> <h4>Sybase SQL Anywhere 5.0</h4> Thanks Greg. <pre> [Sybase SQL Anywhere 5.0] Driver=Sybase SQL Anywhere 5.0 Description=Sybase SQL Anywhere 5.0 ODBC Driver Userid=dba Password=sql DatabaseFile=sademo.db </pre> Hopefully this will be of some use to someone... <a href="mailto:nick@lurcher.org">Nick Gorham</a> </body> </html> PK㰐\d]H��!doc/AdministratorManual/php3.htmlnuȯ��<html> <head> <title>Installing PHP with unixODBC</title> </head> <body> <h1>Installing PHP with unixODBC</h1> This install procedure is based on apache 1.3.6 and PHP 3.0.9. The PHP4 from beta 3 will have a configure option to use unixODBC so most of the following will be redundant. <p> This document assumes that unixODBC has been built and installed, in this case in the default location /usr/local, and that both Apache and PHP have been untarred in the users home directory. <ol> <li>In the Apache directory run the following command <pre> ./configure --prefix=/www </pre> plus any other local config you need <p><li>Create a file in /usr/local/include called odbc.h containing the following three lines <pre> #include <sql.h> #include <sqlext.h> #include <odbcinst.h> </pre> replacing /www with your desired apache install path <p><li>Move to the PHP directory Define the following environment variables <pre> CFLAGS="-I/usr/local/include" LDFLAGS= CUSTOM_ODBC_LIBS="-L/usr/local/lib -lodbc" </pre> remember to export these variables <pre> export CFLAGS LDFLAGS CUSTOM_ODBC_LIBS </pre> <p><li>Configure PHP with <pre> ./configure --with-apache=../apache_1.3.6 --with-custom-odbc=/usr/local --enable-track-vars </pre> plus any other local config you need then... <pre> make make install </pre> <p><li>Go back to your apache directory, and do <pre> ./configure --prefix=/www --activate-module=src/modules/php3/libphp3.a make make install </pre> <p><li>Back to the PHP directory Then to quote from the PHP INSTALL <pre> cp php3.ini-dist /usr/local/lib/php3.ini You can edit /usr/local/lib/php3.ini file to set PHP options. Edit your httpd.conf or srm.conf file and add: AddType application/x-httpd-php3 .php3 <pre> </ol> And that should be that. <p>If this is of any help to someone, good, any problems let <a href="mailto:nick@unixodbc.org">me</a> know. <p>Nick Gorham </body> </html> PK㰐\Z��!ZZ$doc/AdministratorManual/unixODBC.gifnuȯ��GIF89a ��������l����������!�NETSCAPE2.0!�Made with GIMP!� , ����Ig���ͷ��ԍ�$Y}R����/L�w��[������JB�CŒ�]�C�F�5���O.ϫ"��1�3{��c�Jyゼ>ov[�{z}!vJ�{�[��|fDb��r+�;����W����Z=���p`��������u��a�n��1& g������ä�� !� , ����0�I�8�Z/�� J\�}���dy�B�����<�u��;��yy�tM�˘��R@���A����5'�Ëq�3�����-}�/����.�&siX�_f�Vc`BiP^��Y��7����2������I���{i����V���&��v_������������o�� !� , ����0J� Q+��&n�GUD0��������s����ݪF�łBQ�2�â(C�z�i��Y���BsU��˱�<���_�o���-�i���%q8[���\m������)����lv5��.������xv����)���F��D������[��������w&y%&�� !� , ��I��x��Y�Di�^X��颛*�o]�ag�~鼝�� �3����'20��F׀���>Q��`���Oo���N���j�o�ܜ�1T{}ux �s�~�8��"�dz����{|p��D�^p�[]�������^�y����M��w��������������IŗȬ�Ɯ2#md�2l#�;PK㰐\�{o�[2[2*doc/AdministratorManual/unixODBCsetup.htmlnuȯ��<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> <HTML> <HEAD> <TITLE></TITLE> <META NAME="GENERATOR" CONTENT="StarOffice/5.1 (Linux)"> <META NAME="AUTHOR" CONTENT="Charles Morrison"> <META NAME="CREATED" CONTENT="19990831;225400"> <META NAME="CHANGEDBY" CONTENT="Charles Morrison"> <META NAME="CHANGED" CONTENT="19990914;11232600"> </HEAD> <BODY> <H3 ALIGN=CENTER>A neophyte's guide <BR>to getting unixODBC and Mysql/MyODBC working<BR><BR><BR> </H3> <H4>Introduction</H4> <P STYLE="margin-left: 0.79in">UnixODBC is an idea whose time has come. It holds many promises for those of us who use databases in our daily work and would like to do more of that work on Linux or one of the UNIX variants. Those coming from a windows background will rapidly discover that it can be much more involved setting up a working Unix based database than they are used to. They will also discover a world of great advantages too; stability, scalability and freely available source code are values not easily dismissed.</P> <P STYLE="margin-left: 0.79in">This document is designed to help people set up and use unixODBC. My database of choice is MySQL, which I have used with great success for several years, and it is the database I will discuss setting up</P> <P STYLE="margin-left: 0.79in">ODBC is an interface by which programs and programmers can communicate with any database which has an ODBC driver. While most databases have one or more APIs in various programming languages, ODBC allows the same programming code to talk with numerous types of databases. (ODBC is not the only interface to do this, but it is very widely used and supported)</P> <H4>Getting Started</H4> <P STYLE="margin-left: 0.79in">UnixODBC is available in source code only. This means that you download a tar file from <A HREF="http://www.unixODBC.org/">http://www.unixODBC.org</A> , extract it, compile it, and install it. Before you do so though you need some other things.</P> <H4>Prerequisets: </H4> <OL> <LI><P>The Qt toolkit version 2.x sources from <A HREF="http://www.troll.no/">http://www.troll.no</A> . Make sure it is version 2 or higher !</P> <OL> <LI><P>Download the Qt v2 sources.</P> <LI><P>Extract the sources to somewhere, usually this is done by placing the tar file in a directory like /usr/local or /opt and using the command.<BR><B>tar zxvf qt-2.0.1.tar.gz </B><BR>to extract the files. This will create a subdirectory qt-2.0.1 . Remember that only root can normally write to /usr/local or /opt. This is an exaple, use the name of the file you have.</P> <LI><P>Compile the sources. Assuming you have a relatively recent version of Linux with all the appropriate stuff (libg++, gcc or egcs etc) You issue 3 commands from the qt-2.0.1 directory.<BR><B>./configure</B><BR><B>make</B><BR><B>make install</B></P> <LI><P>This last command is scary since it will install the new libqt into places where any old v1.4x libqt may exist. Rest assured that the full name of the library is different and it will not overwrite your existing libqt. It should choke on rewriting the symlink to libqt.so and thus not mess up your existing Qt / KDE apps. If it does rewrite this link, you will need to set it back to its original link.</P> <LI><P>For more information, see <A HREF="http://www.troll.no/">http://www.troll.no</A> . Please don't bother the unixODBC people for instructions on setting up Qt.</P> </OL> </OL> <OL START=2> <LI><P>A Database - in this case MySQL from <A HREF="http://www.mysql.com/">http://www.mysql.com</A></P> <OL> <LI><P>Again, I strongly suggest you get the sources and compile them yourself. The process is similar if not identical to that for Qt described above. By default MySQL installs it's executable files in<B><I> /usr/local/bin</I></B>, it's include files (source headers) in <B><I>/usr/local/include/mysql</I></B> and it's libraries in <B><I>/usr/local/lib/mysql</I></B>. The actual database files are in <B><I>/usr/local/var</I>.</B></P> <LI><P>Before you can use MySQL, you need to run <BR><B>/usr/local/bin/mysql_install_db</B> <BR>as root to set up the system tables. To actually start the database, run <BR><B>/usr/local/bin/safe_mysqld &</B></P> <LI><P>MySQL comes with very extensive documentation. Refer to it for questions on compiling, installing and using MySQL. This is expecially true for permissions. If the permissions aren't correct, no interface will work.</P> </OL> </OL> <H4>Installing unixODBC</H4> <OL> <LI><P>As mentioned before, get the source tar file from <A HREF="http://www.unixodbc.org/">http://www.unixodbc.org</A> . As root, move the tar file to /op or /usr/local or where ever you want the source to reside. Untar the file and run the following commands from the command line in the unixODBC source directories:<BR><B>./configure</B><BR><B>./make</B><BR><B>./make install</B></P> <LI><P>Assuming that you have all the libraries and tools that it needs, you should be breezing through this compile. Certainly after all that practice with Qt and MySQL this should be old hat. UnixODBC takes quite a while to compile, actually all of these packages do. Relax and enjoy it. </P> </OL> <H4>Installing a Driver</H4> <P STYLE="margin-left: 0.79in">UnixODBC by itself isn't a whole lot of good without a driver. MySQL has an ODBC driver named MyODBC but it isn't included with the current edition of unixODBC, so you have to get it and compile it yourself. I'll be referring to version 2.50.24, the latest as of this writing. The installation is much the same as the other packages, but you need to give configure some options. It will prompt you for the path to the MySQL sources if you don't specify the path, but you also have to supply the <I>--with-unixODBC=</I><your unixODBC directory here> flag. The following is from the MyODBC INSTALL file: </P> <P STYLE="margin-left: 0.79in"><I> To make configure look for unixODBC instead of iODBC, use</I></P> <P STYLE="margin-left: 0.79in"><I> --with-unixODBC=DIR</I></P> <P STYLE="margin-left: 0.79in"><I> Where DIR is where unixODBC is installed.</I></P> <P STYLE="margin-left: 0.79in"><I> And (as usual), if the unixODBC headers and libraries aren't located</I></P> <P STYLE="margin-left: 0.79in"><I> in DIR/include and DIR/lib, use</I></P> <P STYLE="margin-left: 0.79in"><I> --with-unixODBC-libs=LIBDIR --with-unixODBC-includes=INCDIR</I></P> <P STYLE="margin-left: 0.79in"><I> You might want to specify a prefix other than /usr/local for installation,<BR> I, for example keep my ODBC drivers in /usr/local/odbc/lib, so I add</I></P> <P STYLE="margin-left: 0.79in"><I> --prefix=/usr/local/odbc</I></P> <P STYLE="margin-left: 0.79in">So here is my configure line:</P> <P STYLE="margin-left: 0.79in"><B>./configure <I>--with-unixodbc=/usr/local --with-mysql-sources=/usr/local/mysql</I></B></P> <P STYLE="margin-left: 0.79in">Running <B>make</B> and then <B>make install</B> puts the resulting library: <B>libmyodbc-2.50.23.so</B> into /usr/local/lib. WAIT A MINUTE ! Didn't I say it was version 2.50.24 ? Yes, I did. However, unless you want to go in and change the version info in the source code, it will create the library with that name. I don't consider this a big deal and so I didn't mess with it.</P> <P STYLE="margin-left: 0.79in">If you omit the <I>--with-mysql-sources</I> flag, configure will fail. If you omit the <SPAN STYLE="font-weight: medium"><I>--with-unixodbc</I></SPAN> flag, configure will complete and MyODBC will compile. However, it will not work correctly when using it with unixODBC. The problems described below occurred when I omitted this flag: <BR><BR>1) If the DSN (Data Source Name) you create is also the name of a database, the driver points to that database no matter what you specify the database to be.<BR>2) If the DSN is not the name of an existing database, it will fail, not allowing you to login to the database. The trace log file will tell you that it couldn't find a database with the name of the DSN. This is confusing if you specified a valid database name in the .odbc.ini file . </P> <P STYLE="margin-left: 0.79in">When using the <I>--with-unixodbc</I> flag, These problems dissappear and it works the way it should. </P> <P STYLE="margin-left: 0.79in">A note: MyODBC does not support ODBC version 3 as of version 2.50.24 . When writing programs that utilize this driver, I have had success with specifying V_OD_ODBC2 when calling SQLSetEnvAttr(...) .</P> <H4>Setting up unixODBC</H4> <P STYLE="margin-left: 0.79in">At long last we come to actually setting up unixODBC and using it. While most of this information exists on the unixODBC web pages and user's guide, I found it difficult to find and follow, so I repeat it here in hopes that it will be made clearer.</P> <P STYLE="margin-left: 0.79in">UnixODBC consists of a lot of libraries, installed in <B>/usr/local/lib</B>, and a few executable files (binaries) installed into <B>/usr/local/bin</B>. These executable files are <I>ODBCConfig</I>, <I>DataManager</I>, and <SPAN STYLE="font-weight: medium"><I>odbcinst</I></SPAN>. </P> <P><B>In order to get unixODBC running, do these things in this order:</B></P> <P><B>Do this as root...</B></P> <P STYLE="margin-left: 0.79in">In an xterm, type ODBCConfig . This is a GUI program and must be run in an X session. At the very least you need to set up a driver to use. The drivers will be specific to one database application, like MyODBC is specific to MySQL. In addition to this, you need to specify a setup file to use for this drive. The setup files are the <B>/usr/local/lib/libodbc*S.so</B> libraries where * signifies the database application, so <B>/usr/local/lib/libodbcmyS.so</B> is the "setup file" for MyODBC. The driver (not the setup file) is <B>/usr/local/lib/libmyodbc-2.50.23.so. </B> </P> <P STYLE="margin-left: 0.79in; font-weight: medium">To set up the driver, run ODBCConfig as root, go to the drivers tab and click on "New". The following are the settings I use...</P> <P STYLE="margin-left: 0.79in"><B>Name: myodbc<BR>Description: MySQL driver.<BR>Driver: /usr/local/lib/libmyodbc-2.50.23.so<BR>Setup: /usr/local/lib/libodbcmyS.so</B><BR><B>FileUsage: 1</B></P> <P STYLE="margin-left: 0.79in; font-weight: medium">You should have a driver set up before setting up a DSN. After having done so, you may want to set up a system DSN. You do this by selecting the "System DSN" tab, clicking on 'New', specifying the driver to use and filling in the required information. You will want to select the driver name you just defined as the Driver in the first screen that displays, and click OK.</P> <P STYLE="margin-left: 0.79in; font-weight: medium">Doing this as root will create and edit the <B>/usr/local/etc/odbcinst.ini</B> (for the driver info) and <B>/usr/local/etc/odbc.ini</B> (for the system DSN) files. Early versions of unixODBC would put these files in /etc, and you can still use a configure option : <I>--sysconfdir=/etc</I> to put those files in that location.</P> <P STYLE="font-weight: medium"><B>Do this as a normal user:</B> </P> <P STYLE="margin-left: 0.79in">The process for setting up a user DSN is identical to setting up a system DSN. You simply select the "User DSN" tab in ODBCConfig and fill out the required fields. The following is how I filled out a User DSN.</P> <P STYLE="margin-left: 0.79in"><B>Name: mysqltest<BR>Description: myodbc<BR>Driver: myodbc<BR>Trace: Yes<BR>TraceFile: mysql.log<BR>Host: localhost<BR>Port: 3306<BR>Socket:<BR>Database: test</B></P> <P STYLE="margin-left: 0.79in">This will create and edit a file named ~/.odbc.ini . Since the test database comes without any tables, you may want to specify mysql as the database instead, so you can see the tables when running DataManager.</P> <P><B>Run DataManager</B></P> <P STYLE="margin-left: 0.79in">Now you should be able to run DataManager and see your drivers, DSNs and tables for each DSN. See the unixODBC web site for screen shots of what it should look like. </P> <P><B>OK, Now What ?</B></P> <P STYLE="margin-left: 0.79in">UnixODBC is not so much an end user program, but rather an intermediary between a program and one or more databases. There is information in the unixODBC documentation for example, about setting up StarOffice to use an ODBC connection. I am in the process of writing a <A HREF="http://www.info2000.net/~cmorrison/databuilder.html">program</A> that makes use of unixODBC and numerous others are as well. It may well be that in time unixODBC will be included in numerous Linux distributions and installed by default. Until that time I hope that this document helps you get this sofware up and running.</P> <P ALIGN=RIGHT STYLE="margin-left: 0.79in">Charles Morrison<BR>cmorrison@info2000.net</P> </BODY> </HTML>PK㰐\v8��(doc/ProgrammerManual/Tutorial/close.htmlnu�[���<HTML> <HEAD> <META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1"> <TITLE>Closing a connection</TITLE> <LINK REL="Stylesheet" href="odbc.css"> </HEAD> <BODY bgcolor="white"> <table width="90%" cols="3" border="0"> <TR> <TD colspan="3" class="big">Closing a connection</TD> </TR> <TR> <TD colspan="3"><P>Before your program terminates you need to free all resources you have allocated. If you checked the source on the previous page, you certainly spotted <CODE><A HREF="gloss.html#free">SQLFreeHandle</A></CODE>. This function must be used to free each allocated handle. It expects a parameter which states the type of the handle to be freed and the handle itself. So if you want to free an environment handle you should call (in our example program):</P> <CODE> SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); </CODE> <P> Before you free any handle make sure that it is no longer needed, wouldn't be funny, if you released to connection handle but forgot to close the connection ;)</P> <P> And if you want to close a connection you need <CODE><A HREF="gloss.html#clos">SQLDisconnect</A></CODE>. This closes the connection associated with the connection handle offered as argument to <CODE>SQLDisconnect</CODE>. In our programm we need to call:</P> <CODE> SQLDisconnect(V_OD_hdbc); </CODE> <P> If you need source code, please have a look <A HREF="conne.html#list">here</A>.</P> </TD> </TR> </TABLE> </BODY> </HTML> PK㰐\�����(doc/ProgrammerManual/Tutorial/conne.htmlnu�[���<HTML> <HEAD> <META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1"> <TITLE>Connecting </TITLE> <LINK REL="StyleSheet" Href="odbc.css"> </HEAD> <BODY bgcolor="white"> <table width="90%" cols="3" border="0"> <TR> <TD colspan="3" class="big">Connecting to a Datasource</TD> </TR> <TR> <TD colspan="3"><P>First thing you will need is a variable of type <CODE>SQLHENV</CODE>. This is a handle (pointer) to an internal ODBC structure which holds all informationen about the ODBC environment. Without a handle of that kind you won't be able do to very much. To get this handle you call <CODE><A HREF="gloss.html#alloc">SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &V_OD_Env)</A></CODE>. <CODE>V_OD_Erg</CODE> is a variable of type <CODE>SQLHENV</CODE> which holds the allocated environment handle.</P> <P> If you have allocated the handle you need to define which version of ODBC to use. Therefore you should call <CODE><A HREF="gloss.html#envattr">SQLSetEnvAttr(V_OD_Env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0)</A></CODE>. The constant <CODE>SQL_ATTR_ODBC_VERSION</CODE> defines that the needed version of ODBC will be defined and <CODE>SQL_OV_ODBC3</CODE> says that the program will need ODBC 3.0. </P> <P>Next thing to do is to create a handle for the database connection which is of the type <CODE>SQLHDBC</CODE>. Once again you call <CODE>SQLAllocHandle</CODE> this time with <CODE>SQL_HANDLE_DBC</CODE> and the variable to the environment returned by the first call to <CODE>SQLAllocHandle</CODE>. </P><P> Then you may choose to modify the connection attributes, mainly the timeout for any given action on the connection. You do this by calling <CODE><A HREF="gloss.html#conattr">SQLSetConnectAttr</A></CODE> with the connection handle, attribute and value pointer and the string length (if available).</P> <P> Finally we are able to connect to the database via <CODE><A href="gloss.html#conn">SQLConnect</A></CODE>, which needs the name of the data source, the username and password as parameters. For each parameter you need to specify how long the string is or just gib <COde>SQL_NTS</CODE> which says that it is a string which length has to be determined by <CODE>SQLConnect</CODE> </P> That's it, we are connected to the database. Please note, that all functions mentioned on this page return either <CODE>SQL_SUCCESS</CODE>, <CODE>SQL_SUCCESS_WITH_INFO</CODE> if all went smoothly or <CODE>SQL_ERROR</CODE> or <CODE>SQL_INVALID_HANDLE</CODE> in case of an error. We will have a look on how to get diagnostic messages a little later. <P> So let's have a look at the code: </TD> </TR> </TABLE> <TABLE> <TR> <TD> <PRE><CODE class="list"> <A NAME="list"></A> /* odbc.c testing unixODBC */ #include <stdlib.h> #include <stdio.h> #include <odbc/sql.h> #include <odbc/sqlext.h> #include <odbc/sqltypes.h> SQLHENV V_OD_Env; <FONT COLOR="green">// Handle ODBC environment</FONT> long V_OD_erg; <FONT COLOR="green">// result of functions</FONT> SQLHDBC V_OD_hdbc; <FONT COLOR="green">// Handle connection</FONT> char V_OD_stat[10]; <FONT COLOR="green">// Status SQL</FONT> SQLINTEGER V_OD_err,V_OD_rowanz,V_OD_id; SQLSMALLINT V_OD_mlen; char V_OD_msg[200],V_OD_buffer[200]; int main(int argc,char *argv[]) { <FONT COLOR="green">// 1. allocate Environment handle and register version </FONT> V_OD_erg=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&V_OD_Env); if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) { printf("Error AllocHandle\n"); exit(0); } V_OD_erg=SQLSetEnvAttr(V_OD_Env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) { printf("Error SetEnv\n"); SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); exit(0); } <FONT COLOR="green">// 2. allocate connection handle, set timeout</FONT> V_OD_erg = SQLAllocHandle(SQL_HANDLE_DBC, V_OD_Env, &V_OD_hdbc); if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) { printf("Error AllocHDB %d\n",V_OD_erg); SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); exit(0); } SQLSetConnectAttr(V_OD_hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER *)5, 0); <FONT COLOR="green">// 3. Connect to the datasource "web" </FONT> V_OD_erg = SQLConnect(V_OD_hdbc, (SQLCHAR*) "web", SQL_NTS, (SQLCHAR*) "christa", SQL_NTS, (SQLCHAR*) "", SQL_NTS); if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) { printf("Error SQLConnect %d\n",V_OD_erg); SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, V_OD_stat, &V_OD_err,V_OD_msg,100,&V_OD_mlen); printf("%s (%d)\n",V_OD_msg,V_OD_err); SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); exit(0); } printf("Connected !\n"); <FONT COLOR="green">/* continued on next page */</FONT> </CODE> </PRE> </TD> </TR> </TABLE> </BODY> </HTML> PK㰐\�W��\ \ &doc/ProgrammerManual/Tutorial/dsn.htmlnu�[���<HTML> <HEAD> <META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1"> <TITLE>Obtainign Datasources</TITLE> <LINK REL="Stylesheet" href="odbc.css"> </HEAD> <BODY bgcolor="white"> <table width="90%" cols="3" border="0"> <TR> <TD colspan="3" class="big">Obtaining a Datasourcename</TD> </TR> <TR> <TD colspan="3"><P>A simple query should be a nobrainer right now. But what if your programm runs on a system where you can't be sure which datasource names are configured?</P> <P>Then you should use <A hrEF="gloss.html#dsn"><CODE>SQLDataSources()</CODE></a>. After allocating a environment handle you may use this to find out about the DSN and the supplied description for the datasource.</P> <P>As ODBC knows systemwide and userwide datasources, you need to give a direction which datasource types you are looking for. There you may specify either of the following values:</P> <TABLE COLS="2" border="0" width="90%"> <TR> <TD valign="top"><CODE>SQL_FETCH_FIRST</CODE></TD> <TD>Sets up <CODE>SQLDataSources()</CODE> to lookup the first of all available datasources (either user or systemwide). </TR> <TR> <TD valign="top"><CODE>SQL_FETCH_FIRST_USER</CODE></TD> <TD>Sets up <CODE>SQLDataSources()</CODE> to lookup the first of the available user datasources. </TR> <TR> <TD valign="top"><CODE>SQL_FETCH_FIRST_SYSTEM</CODE></TD> <TD>Sets up <CODE>SQLDataSources()</CODE> to lookup the first of the available system datasources. </TR> <TR> <TD valign="top"><CODE>SQL_FETCH_NEXT</CODE></TD> <TD>Fetches the next datasource. Depending on <CODE>SQL_FETCH_FIRST_USER</CODE>, <CODE>SQL_FETCH_FIRST_SYSTEM</CODE> or <CODE>SQL_FETCH_FIRST</CODE> this may only be a user datasource, only a system datasource or one of either. </TR> </TABLE> <P>So let's have a look on a small function, which will return all available datasource names. You may insert this code into the program which you built before and call it somewhere after you've obtained an environment handle.</P> <CODE class="list"><PRE> void OD_ListDSN(void) { char l_dsn[100],l_desc[100]; short int l_len1,l_len2,l_next; l_next=SQL_FETCH_FIRST; while( SQLDataSources(V_OD_Env,l_next,l_dsn, sizeof(l_dsn), &l_len1, l_desc, sizeof(l_desc), &l_len2) == SQL_SUCCESS) { printf("Server=(%s) Beschreibung=(%s)\n",l_dsn,l_desc); l_next=SQL_FETCH_NEXT; } } </PRE></CODE> </TD> </TR> </TABLE> </BODY> </HTML> PK㰐\C��N�N(doc/ProgrammerManual/Tutorial/gloss.htmlnu�[���<HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Developer Studio"> <META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1"> <TITLE>Glossary </TITLE> <LINK REL="StyleSheet" Href="odbc.css"> </HEAD> <BODY bgcolor="white"> <table width="90%" cols="3" border="0" cellspacing="0"> <TR> <TD colspan="3" class="big">Index / Glossary</TD> </TR> <TR> <TD colspan="3"> <TABLE Cols="13" width=90% bgcolor="black"> <TR> <TH class="head"><a href="#A">A</A></TH> <TH CLASS="head"><a href="#B">B</A></TH> <TH CLASS="head"><a href="#C">C</A></TH> <TH CLASS="head"><a href="#D">D</A></TH> <TH CLASS="head"><a href="#E">E</A></TH> <TH CLASS="head"><a href="#F">F</A></TH> <TH CLASS="head"><a href="#G">G</A></TH> <TH CLASS="head"><a href="#H">H</A></TH> <TH CLASS="head"><a href="#I">I</A></TH> <TH CLASS="head"><a href="#J">J</A></TH> <TH CLASS="head"><a href="#K">K</A></TH> <TH CLASS="head"><a href="#L">L</A></TH> <TH CLASS="head"><a href="#M">M</A></TH> </TR> <TR> <TH CLASS="head"><a href="#N">N</A></TH> <TH CLASS="head"><a href="#O">O</A></TH> <TH CLASS="head"><a href="#P">P</A></TH> <TH CLASS="head"><a href="#Q">Q</A></TH> <TH CLASS="head"><a href="#R">R</A></TH> <TH CLASS="head"><a href="#S">S</A></TH> <TH CLASS="head"><a href="#T">T</A></TH> <TH CLASS="head"><a href="#U">U</A></TH> <TH CLASS="head"><a href="#V">V</A></TH> <TH CLASS="head"><a href="#W">W</A></TH> <TH CLASS="head"><a href="#X">X</A></TH> <TH CLASS="head"><a href="#Y">Y</A></TH> <TH CLASS="head"><a href="#Z">Z</A></TH> </TR> </TABLE> </TD> </TR> </TABLE> <table width="90%" cols="3" border="0" cellspacing="0"> <TR> <TD class="head" width="60"><a name="C"><B>C</B></A></TD> <TD width="20" class="head"> </TD> <TD class="head"><A Name="col">Column</A></TD> </TR> <TR><TD Colspan="2"> </TD> <TD><P>A column is another name for field in a SQL table. It has a data type (Integer, Char, Money etc) and a name by which it is addressed.</P> <P>You specify the name of a column in a query (either DELETE, UPDATE, SELECT or INSERT)</P> </TD> </TR> <TR> <TD class="head" width="60"><a name="D"><B>D</B></A></TD> <TD width="20" class="head"> </TD> <TD class="head"><A Name="dsrc">data source</A></TD> </TR> <TR><TD Colspan="2"> </TD> <TD>A data source defines all informationen needed by ODBC to connect to a database. This includes the name of the driver to use (Postgres, mySQL etc.), the name of the user, his password, the server name on which the database resides and of course the name of the database. There are a lot more options available. </TD> </TR> <TR> <TD colspan="2"> </TD> <TD class="head"><A NAME="dtyp">Data Types</A></TD> </TR> <TR> <TD colspan="2"> </TD> <TD><P> The following table show some ODBC data types and how the relate to standard C data types:</P> <TABLE COLS="3" border="0" cellspacing="1"> <TR> <TH CLASS="head">Type identifier</TH> <TH CLASS="head">ODBC typedef</TH> <TH CLASS="head">C typedef</TH> </TR> <TR> <TD class="small">SQL_C_CHAR</TD> <TD class="small">SQLCHAR * </TD> <TD class="small">unsigned char * </TD> </TR> <TR> <TD class="small">SQL_C_SSHORT</TD> <TD class="small">SQLSMALLINT</TD> <TD class="small">short int </TD> </TR> <TR> <TD class="small">SQL_C_USHORT </TD> <TD class="small">SQLUSMALLINT </TD> <TD class="small">unsigned short int </TD> </TR> <TR> <TD class="small">SQL_C_SLONG </TD> <TD class="small">SQLINTEGER</TD> <TD class="small">long int</TD> </TR> <TR> <TD class="small">SQL_C_FLOAT</TD> <TD class="small">SQLREAL</TD> <TD class="small">float </TD> </TR> <TR> <TD class="small">SQL_C_DOUBLE</TD> <TD class="small">SQLDOUBLE, SQLFLOAT</TD> <TD class="small">double </TD> </TR> <TR> <TD class="small">SQL_C_BINARY </TD> <TD class="small">SQLCHAR *</TD> <TD class="small">unsigned char </TD> </TR> <TR> <TD class="small">SQL_C_TYPE_DATE</TD> <TD class="small">SQL_DATE_STRUCT</TD> <TD class="small"> struct <BR>tagDATE_STRUCT {<BR> SQLSMALLINT year; <BR> SQLUSMALLINT month; <BR> SQLUSMALLINT day; <BR> } DATE_STRUCT; </TD> </TR> <TR> <TD class="small">SQL_C_TYPE_TIME </TD> <TD class="small">SQL_TIME_STRUCT </TD> <TD class="small">struct<BR>tagTIME_STRUCT {<BR> SQLUSMALLINT hour; <BR> SQLUSMALLINT minute; <BR> SQLUSMALLINT second; <BR> } TIME_STRUCT; </TD> </TR> </TABLE> <P>You will need the type identifier in calls to <A HREF="#bind">SQLBindCol</A>. </TD> </TR> <TR> <TD colspan="2"> </TD> <TD > </TD> </TR> <TR> <TD class="head" width="60"><a name="O"><B>O</B></A></TD> <TD width="20" class="head"> </TD> <TD class="head"><A Name="oini">odbc.ini</A></TD> </TR> <TR><TD Colspan="2"> </TD> <TD><CODE>/etc/odbc.ini</CODE> is the configuration file for system <A HREF="#dsrc">data sources</A>. It contains information which will be needed when connecting to a database. It is modified by a graphical utility ODBCConfig. </TD> </TR> <TR> <TD class="head" width="60"><a name="R"><B>R</B></A></TD> <TD width="20" class="head"> </TD> <TD class="head"><A Name="row">Row</A></TD> </TR> <TR><TD Colspan="2"> </TD> <TD>A row is a set of <A HREF="#col">columns</A> in a query. For example in our <A HREF="intro.html#tab">table</A> there are two users. Each user makes up a row in the table or in the result of our query. </TD> </TR> <TR> <TD class="head" width="60"><a name="S"><B>S</B></A></TD> <TD width="20" class="head"> </TD> <TD class="head"><A Name="alloc">SQLAllocHandle</A></TD> </TR> <TR><TD Colspan="2"> </TD> <TD>allocates needed handles. <CODE><PRE> SQLRETURN SQLAllocHandle(SQLSMALLINT HandleType, SQLHANDLE InputHandle, SQLHANDLE *OutputHandlePtr); </PRE></CODE> <H4>Arguments</H4> <h5>HandleType</h5> <P> Defines the type of handle to be allocated by <CODE>SQLAllocHandle</CODE>. There are four possible values:</P> <CODE> SQL_HANDLE_ENV<BR> SQL_HANDLE_DBC<BR> SQL_HANDLE_STMT<BR> SQL_HANDLE_DESC </CODE> <H5>InputHandle</H5> This is the input handle in whose context the new handle will be allocated. If <CODE>HandleType</CODE> is <CODE>SQL_HANDLE_ENV</CODE>, this is <CODE>SQL_NULL_HANDLE</CODE>. For a handle of type <CODE>SQL_HANDLE_DBC</CODE>, this has to be an environment handle, and if it is <CODE>SQL_HANDLE_STMT</CODE> or <CODE>SQL_HANDLE_DESC</CODE>, it must be a connection handle. <H5>OutputHandlePtr</H5> Pointer to a buffer in which to return the allocated handle. <H4>Returns</H4> <CODE>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_INVALID_HANDLE,</CODE> or <CODE>SQL_ERROR</CODE>. <HR width="20%" align="center"> </TD> </TR> <TR> <TD colspan="2"> </TD> <TD class="head"><A NAME="bind">SQLBindCol</A></TD> </TR> <TR> <TD colspan="2"> </TD> <TD > binds a variable to a column in the result. <CODE><PRE> SQLRETURN SQLBindCol(SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType, SQLPOINTER TargetValuePtr, SQLINTEGER BufferLength, SQLINTEGER *StrLen_or_IndPtr); </PRE></CODE> <H4>Arguments</H4> <H5>StatementHandle</H5> <CODE>StatementHandle</CODE> must have been allocated by <CODE>SQLAllocHandle</CODE> and will hold all information and the result set of the statement. <H5>ColumnNumber</H5> Number of the column in the result set. Starts with 1. <H5>TargetType</H5> Type identifier of the <A href="#dtyp">data type</A> <H5>TargetValuePtr</H5> The pointer to the variable in which the data will be stored. <H5>BufferLength</H5> The size of the buffer <CODE>TargetValuePtr</CODE> points at in bytes. <H5>StrLen_or_IndPtr</H5> When data is fetched, returns either <UL> <LI>The length of the data available to return <LI>SQL_NO_TOTAL <LI>SQL_NULL_DATA </UL> <H4>Returns</H4> <CODE>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR</CODE> or <CODE>SQL_INVALID_HANDLE</CODE>. <HR align="center" width="20%"> </TD> </TR> <TR> <TD colspan="2"> </TD> <TD class="head"><A NAME="conn">SQLConnect</A></TD> </TR> <TR> <TD colspan="2"> </TD> <TD > connects to a datasource <CODE><PRE> SQLRETURN SQLConnect(SQLHDBC ConnectionHandle, SQLCHAR *ServerName, SQLSMALLINT NameLength1, SQLCHAR *UserName, SQLSMALLINT NameLength2, SQLCHAR *Authentication, SQLSMALLINT NameLength3); </PRE></CODE> <H4>Arguments</H4> <H5>ConnectionHandle</H5> <CODE>ConnectionHandle</CODE> must have been allocated by <CODE>SQLAllocHandle</CODE> and will hold all information about the connection. <H5>ServerName</H5> Name of the database server <H5>NameLength1</H5> The length of <CODE>ServerName</CODE> or <CODE>SQL_NTS</CODE> <H5>UserName</H5> The name of the user who connects to the database. <H5>NameLength2</H5> The length of <CODE>UserName</CODE> or <CODE>SQL_NTS</CODE> <H5>Authentication</H5> Password of the user <H5>NameLength3</H5> The length of <CODE>Authentication</CODE> or <CODE>SQL_NTS</CODE> <H4>Returns</H4> <CODE>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR</CODE> or <CODE>SQL_INVALID_HANDLE</CODE>. <HR align="center" width="20%"> </TD> </TR> <TR> <TD colspan="2"> </TD> <TD class="head"><A NAME="dsn">SQLDataSources</A></TD> </TR> <TR> <TD colspan="2"> </TD> <TD > fetches avaible datasource names either user, system or both. <CODE><PRE> SQLRETURN SQLDataSources(SQLHENV EnvironmentHandle, SQLUSMALLINT Direction, SQLCHAR *ServerName, SQLSMALLINT BufferLength1, SQLSMALLINT *NameLength1Ptr, SQLCHAR *Description, SQLSMALLINT BufferLength2, SQLSMALLINT *NameLength2Ptr); </PRE></CODE> <H4>Arguments</H4> <H5>EnvironmentHandle</H5> <CODE>EnvironmentHandle</CODE> must have been allocated by <CODE>SQLAllocHandle</CODE>. <H5>Direction</H5> Which DSN we are looking for. May be on of: <TABLE COLS="2" border="0"> <TR> <TD valign="top"><CODE>SQL_FETCH_FIRST</CODE></TD> <TD>Sets up <CODE>SQLDataSources()</CODE> to lookup the first of all available datasources (either user or systemwide). </TR> <TR> <TD valign="top"><CODE>SQL_FETCH_FIRST_USER</CODE></TD> <TD>Sets up <CODE>SQLDataSources()</CODE> to lookup the first of the available user datasources. </TR> <TR> <TD valign="top"><CODE>SQL_FETCH_FIRST_SYSTEM</CODE></TD> <TD>Sets up <CODE>SQLDataSources()</CODE> to lookup the first of the available system datasources. </TR> <TR> <TD valign="top"><CODE>SQL_FETCH_NEXT</CODE></TD> <TD>Fetches the next datasource. Depending on <CODE>SQL_FETCH_FIRST_USER</CODE>, <CODE>SQL_FETCH_FIRST_SYSTEM</CODE> or <CODE>SQL_FETCH_FIRST</CODE> this may only be a user datasource, only a system datasource or one of either. </TR> </TABLE> <H5>ServerName</H5> The name of the datasource is returned herein. <H5>BufferLength1</H5> Defines how many chars <I>Servername</I> may contain at most. <H5>NameLength1Ptr</H5> The pointer to the variable in which the actual length of the datasource name is stored. If <I>NameLength1Ptr</I> is greater than <I>BufferLength1</I>, then the DSN in <I>ServerName</I> is truncated to fit. <H5>BufferLength</H5> The size of the buffer <CODE>TargetValuePtr</CODE> points at in bytes. <H5>Description</H5> The description supplied with the datasource, giving more information on the datasource in human readable form. <H5>BufferLength2</H5> Defines how many chars <I>Description</I> may contain at most. <H5>NameLength2Ptr</H5> The pointer to the variable in which the actual length of the description is stored. If <I>NameLength2Ptr</I> is greater than <I>BufferLength2</I>, then the description in <I>Description</I> is truncated to fit. <H4>Returns</H4> <CODE>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR</CODE>, <CODE>SQL_NO_DATA></CODE> or <CODE>SQL_INVALID_HANDLE</CODE>. <HR align="center" width="20%"> </TD> </TR> <TR> <TD colspan="2"> </TD> <TD class="head"><A NAME="exec">SQLExecDirect</A></TD> </TR> <TR> <TD colspan="2"> </TD> <TD > Executes a SQL statement <CODE><PRE> SQLRETURN SQLExecDirect(SQLHSTMT StatementHandle, SQLCHAR *StatementText, SQLINTEGER TextLength); </PRE></CODE> <H4>Arguments</H4> <H5>StatementHandle</H5> <CODE>StatementHandle</CODE> must have been allocated by <CODE>SQLAllocHandle</CODE> and will hold all information and the result set of the statement. <H5>StatementText</H5> The SQL statement to be executed <H5>TextLength</H5> The length of <CODE>StatementText</CODE> or <CODE>SQL_NTS</CODE> <H4>Returns</H4> <CODE>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR</CODE> or <CODE>SQL_INVALID_HANDLE</CODE>. <HR align="center" width="20%"> </TD> </TR> <TR> <TD width="20" colspan="2"> </TD> <TD class="head"><A Name="clos">SQLDisconnect</A></TD> </TR> <TR><TD Colspan="2"> </TD> <TD>disconnects the specified connection <CODE><PRE> SQLRETURN SQLDisconnect(SQLHDBC ConnectionHandle); </PRE></CODE> <H4>Arguments</H4> <H5>ConnectionHandle</H5> The handle of the connection to be closed. <H4>Returns</H4> <CODE>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_INVALID_HANDLE,</CODE> or <CODE>SQL_ERROR</CODE>. <HR width="20%" align="center"> </TD> </TR> <TR> <TD width="20" colspan="2"> </TD> <TD class="head"><A Name="fetc">SQLFetch</A></TD> </TR> <TR><TD Colspan="2"> </TD> <TD>Fetches the next row of the result set. <CODE><PRE> SQLRETURN SQLFetch(SQLHDBC StatementHandle); </PRE></CODE> <H4>Arguments</H4> <H5>StatementHandle</H5> The handle of the statement to be closed fromwhich the data should be fetched. <H4>Returns</H4> <P><CODE>SQL_SUCCESS, SQL_NO_DATA, SQL_STILL_EXECUTING, SQL_SUCCESS_WITH_INFO, SQL_INVALID_HANDLE,</CODE> or <CODE>SQL_ERROR</CODE>.</P> <HR width="20%" align="center"> </TD> </TR> <TR> <TD width="20" colspan="2"> </TD> <TD class="head"><A Name="free">SQLFreeHandle</A></TD> </TR> <TR><TD Colspan="2"> </TD> <TD> frees allocated handles. <CODE><PRE> SQLRETURN SQLFreeHandle(SQLSMALLINT HandleType, SQLHANDLE InputHandle); </PRE></CODE> <H4>Arguments</H4> <h5>HandleType</h5> <P> Defines the type of handle to be freed. There are four possible values:</P> <CODE> SQL_HANDLE_ENV<BR> SQL_HANDLE_DBC<BR> SQL_HANDLE_STMT<BR> SQL_HANDLE_DESC </CODE> <H5>InputHandle</H5> The handle to be freed. Should match the type stated by <CODE>HandleType</CODE> <H4>Returns</H4> <CODE>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_INVALID_HANDLE,</CODE> or <CODE>SQL_ERROR</CODE>. <HR width="20%" align="center"> </TD> </TR> <TR> <TD width="20" colspan="2"> </TD> <TD class="head"><A Name="ccol">SQLNumResultCols</A></TD> </TR> <TR><TD Colspan="2"> </TD> <TD>returns the number of columns in the result set. <CODE><PRE> SQLRETURN SQLNumResultCols(SQLHSTMT StatementHandle, SQLSMALLINT *ColumnCountPtr); </PRE></CODE> <H4>Arguments</H4> <H5>StatementHandle</H5> <CODE>StatementHandle</CODE> must have been allocated by <CODE>SQLAllocHandle</CODE> and holds all information and the result set of the statement. <h5>ColumnCountPtr</H5> A pointer to a variable to hold the result value. <H4>Returns</H4> <P><CODE>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_INVALID_HANDLE,</CODE> or <CODE>SQL_ERROR</CODE>.</P> <HR width="20%" align="center"> </TD> </TR> <TR> <TD width="20" colspan="2"> </TD> <TD class="head"><A Name="crow">SQLRowCount</A></TD> </TR> <TR><TD Colspan="2"> </TD> <TD>returns the number of rows affected by INSERT, UPDATE or DELETE. Many drivers (but not all) return the number of rows returned by the last executed SELECT statement too. <CODE><PRE> SQLRETURN SQLSQLRowCount(SQLHSTMT StatementHandle, SQLSMALLINT *RowCountPtr); </PRE></CODE> <H4>Arguments</H4> <H5>StatementHandle</H5> <CODE>StatementHandle</CODE> must have been allocated by <CODE>SQLAllocHandle</CODE> and holds all information and the result set of the statement. <h5>RowCountPtr</H5> A pointer to a variable to hold the result value. <H4>Returns</H4> <P><CODE>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_INVALID_HANDLE,</CODE> or <CODE>SQL_ERROR</CODE>.</P> <HR width="20%" align="center"> </TD> </TR> <TR> <TD colspan="2"> </TD> <TD class="head"><A NAME="conattr">SQLSetConnectAttr</A></TD> </TR> <TR> <TD colspan="2"> </TD> <TD > modifies attributes of connections. <CODE><PRE> SQLRETURN SQLSetConnectAttr(SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength); </PRE></CODE> <H4>Arguments</H4> <H5>ConnectionHandle</H5> <CODE>ConnectionHandle</CODE> must have been allocated by <CODE>SQLAllocHandle</CODE> and defines the connection which will be modified. <H5>Attribute</H5> which attribute to set <H5>ValuePtr</H5> Pointer to the value for <CODE>Attribute</CODE>. Depending on <CODE>Attribute</CODE>, <CODE>ValuePtr</CODE> will be a 32-bit integer value or a pointer to a null-terminated string. <H5>StringLength</H5> If <CODE>ValuePtr</CODE> points to a character string or a binary buffer, this argument should be the length of <CODE>*ValuePtr</CODE>. Otherwise, for <CODE>ValuePtr</CODE> of type integer <CODE>StringLength</CODE> is ignored. <H4>Returns</H4> <P><CODE>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR</CODE> or <CODE>SQL_INVALID_HANDLE</CODE>.</P> <HR align="center" width="20%"> </TD> </TR> <TR> <TD colspan="2"> </TD> <TD class="head"><A NAME="envattr">SQLSetEnvAttr</A></TD> </TR> <TR> <TD colspan="2"> </TD> <TD > sets attributes of environments. <CODE><PRE> SQLRETURN SQLSetEnvAttr(SQLHENV EnvironmentHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength); </PRE></CODE> <H4>Arguments</H4> <H5>EnvironmentHandle</H5> <CODE>EnvironmentHandle</CODE> must have been allocated by <CODE>SQLAllocHandle</CODE> <H5>Attribute</H5> which attribute to set <H5>ValuePtr</H5> Pointer to the value for <CODE>Attribute</CODE>. Depending on <CODE>Attribute</CODE>, <CODE>ValuePtr</CODE> will be a 32-bit integer value or a pointer to a null-terminated string. <H5>StringLength</H5> If <CODE>ValuePtr</CODE> points to a character string or a binary buffer, this argument should be the length of <CODE>*ValuePtr</CODE>. Otherwise, for <CODE>ValuePtr</CODE> of type integer <CODE>StringLength</CODE> is ignored. <H4>Returns</H4> <CODE>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR</CODE> or <CODE>SQL_INVALID_HANDLE</CODE>. <HR width="20%" align="center"> </TD> </TR> </TABLE> </BODY> </HTML> PK㰐\J��(doc/ProgrammerManual/Tutorial/index.htmlnu�[���<HTML> <HEAD> <META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1"> <TITLE>Dokumenttitel </TITLE> </HEAD> <frameset Cols="25%,75%" noresize frameborder="0" > <frame Name="navi" src="navi.html"> <frame Name="inha" src="intro.html"> </FRAMESET> </HTML> PK㰐\=PߪF F (doc/ProgrammerManual/Tutorial/intro.htmlnu�[���<HTML> <HEAD> <LINK REL="stylesheet" href="odbc.css"> <TITLE>Introduction</TITLE> </HEAD> <BODY bgcolor="white"> <table width="90%" cols="3" border="0"> <TR> <TD colspan="3" class="big">Introduction</TD> </TR> <TR> <TD colspan="3">Welcome to a short tutorial on ODBC programming. The goal of this tutorial is to introduce a C-Programmer to ODBC programming. During this tutorial we will code a simple program which connects to a database via ODBC and reads some data. There won't be any information on how to program ODBC Drivers or about <EM>unixODBC</EM> internals. Configuration won't be covered too. The program developed throughout this tutorial was originally coded under WinNT and later ported without any adjustments to Linux and <EM>unixODBC</EM>. This is how compatibility should work :) <P> The information given within this tutorial are brief at best. Please take it as a pointer where and how to start. </P><BR> </TD> </TR> </TABLE> <TABLE COLS="3" Width="90%" border="0"> <TR><TD class="head" width="25%">Requirements</TD> <TD width="2%"> </TD> <TD width="73%">I assume that you have</TD> </TR> <TR> <TD colspan="2"> </TD> <TD><UL> <LI>a system with unixODBC installed and with at least one working datasource configured. <LI>the include files installed under <CODE>/usr/include/odbc</CODE> <LI>a compiler installed and that you know how to use it ;) </UL> </TD> </TR> <TR><TD class="head" width="25%">Compiling</TD> <TD width="2%"> </TD> <TD>If gcc is installed type:</TD> </TR> <TR> <TD colspan="2"> </TD> <TD><CODE>gcc odbc.c -o odbc -lodbc</CODE><BR> which will result in an executable named "odbc". </TD> </TR> <TR><TD class="head"><A nAME="tab">Database</A></TD> <TD width="20"> </TD> <TD>Our database will have a single table:</TD> </TR> <TR> <TD colspan="2"> </TD> <TD><TABLE COLS=2 Border="0" bgcolor="#efefef"> <TR> <TH colspan=2 class="head">tkeyuser</TH> </TR> <TR> <TD>iduser</TD> <TD>sequence</TD> </TR> <TR> <TD>dtname</TD> <TD>char(40)</TD> </TR> <TR> <TD>dtmaxSize</TD> <TD>Integer</TD> </TR> </TABLE> <BR> Our datasource will be named "web" and access is granted to the user "christa" with no password. </TD> </TR> </table> </BODY> </HTML> PK㰐\�r#8��'doc/ProgrammerManual/Tutorial/navi.htmlnu�[���<HTML> <HEAD> <META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1"> <TITLE>Navigation </TITLE> <LINK REL="stylesheet" href="odbc.css"> </HEAD> <BODY bgcolor="white"> <TABLE Width="90%" cellspacing="1" bgcolor="black"> <TR> <TD class="center">ODBC Programming Tutorial</TD> </TR> </TABLE> <TABLE Width="90%"> <TR> <TD> </TD> </TR> <TR> <TD><a href="intro.html" target="inha">Introduction</A> </TD> </TR> <TR> <TD><a href="conne.html" target="inha">Connection</A> </TD> </TR> <TR> <TD><a href="close.html" target="inha">Closing</A> </TD> </TR> <TR> <TD><a href="query.html" target="inha">Queries</A> </TD> </TR> <TR> <TD><A href="resul.html" target="inha">Results</A> </TD> </TR> <TR> <TD><A href="dsn.html" target="inha">Obtaining DSN</A> </TD> </TR> <TR> <TD> <A Href="gloss.html" target="inha">Index / Glossary</A> </TD> </TR> <TR> <TD> <A Href="http://genix.net/unixODBC/" target="_top">unixODBC Home</A> </TD> </TR> </TABLE> </BODY> </HTML> PK㰐\l÷���&doc/ProgrammerManual/Tutorial/odbc.cssnuȯ��/* Style Sheet for odbc documentation =20 M.Rathmann */ BODY {background-color: white; color: black; font-family: Arial; font-style: normal; font-size: medium; background-attachment: fixed; } /*=20 2. Die Verweise: Standard: Text unterstrichen link: #008080=20 vlink=3D"#800000" alink=3D"#008080" */ a:link {color: #2222ff; text-decoration: none; } a:visited {color: #3333ee; text-decoration: none; } a:active {color: #4444dd; text-decoration: none; } TH {border-style: none; background-color: #dddddd; font-family: Arial; font-size: normal; color: white; vertical-align: top; text-align: center; } TD {border-style: none; background-color: white; font-family: Arial; font-size: normal; color: black; border-width: 3px; border-color: white; vertical-align: top; text-align: justify; } TD.center {border-style: none; background-color: #ddddff; text-align: center; font-family: Arial; font-size: medium; color: black; border-width: 3px; border-color: white; vertical-align: top; } TD.head {border-style: none; background-color: #ddddff; text-align: left; font-family: Arial; font-size: medium; color: black; font-weight: bold; vertical-align: top; } Th.head {border-style: none; background-color: #dddddd;=09 text-align: center; font-family: Arial; font-size: medium; color: black; font-weight: bold; vertical-align: top; } TD.big { font-family: Arial; font-size: x-large; } TD.small { font-family: Arial; font-size: x-small; } /* 5. =DCberschriften immer in Rot, Zeichensatz Arial */ H4 { color: black; font-family: Arial; font-size: small; font-weight: bold; } H5 { color: black; font-size: x-small; font-family: courier; } /* 6. Blockquote St=E4rkere Einr=FCckung=20 */ Blockquote {margin-left: 10pt; } CODE.list {margin-left: 10 pt; font-size: xx-small; } } /* 7. Listen */ UL {color: black; font-family: Arial } OL {color: black; list-style-type: decimal} LI {color: black} P {font-family: Arial; font-size: normal; } TD P {font-family: Arial; font-size: normal; } small {font-family: Arial; font-size: x-small } From - Sun Jun 6 14:11:04 1999 Return-path: <M.Rathmann@ping.de> Envelope-to: pharvey@interlog.com Delivery-date: Sun, 6 Jun 1999 03:55:51 -0400 Received: from plus.interlog.com ([207.34.202.21] ident=root) by mailhub4.interlog.com with esmtp (Exim 2.05 #1) id 10qXmY-0002kw-00 for pharvey@interlog.com; Sun, 6 Jun 1999 03:55:50 -0400 Received: from lilly.ping.de (qmailr@lilly.ping.de [195.37.120.2]) by plus.interlog.com (8.9.3/8.9.3) with SMTP id DAA23367 for <pharvey@codebydesign.com>; Sun, 6 Jun 1999 03:55:48 -0400 (EDT) Received: (qmail 26070 invoked by alias); 6 Jun 1999 07:55:45 -0000 Received: (qmail 26063 invoked from network); 6 Jun 1999 07:55:37 -0000 Received: from suprimo-54.ping.de (HELO koala) (195.37.122.54) by lilly.ping.de with SMTP; 6 Jun 1999 07:55:37 -0000 Message-ID: <001a01beaff2$66b90320$030aa8c0@koala> From: "Markus Rathmann" <M.Rathmann@ping.de> To: "Peter Harvey" <pharvey@codebydesign.com> Subject: The newest docu, to be sure :) Date: Sun, 6 Jun 1999 09:58:43 +0200 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0017_01BEB003.29819060" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 4.72.3110.1 X-MimeOLE: Produced By Microsoft MimeOLE V4.72.3110.3 X-Mozilla-Status: 8001 X-Mozilla-Status2: 00000000 X-UIDL: ea3859ca9b1d73dac919ee5e69391b0b This is a multi-part message in MIME format. ------=_NextPart_000_0017_01BEB003.29819060 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Hi Peter, I'm sorry, but I think that you haven't got the newest version. Therefore I'm sending it to you again. It has one more page (Obtaining Datasource names) and a few display glitches (mainly Netscape) solved. Furthermore I've added a link to the unixODBC Homepage, so that you may use the complete browser window (if you like). Bye Markus ------=_NextPart_000_0017_01BEB003.29819060 Content-Type: text/css; name="ODBC.CSS" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="ODBC.CSS" /* Style Sheet for odbc documentation =20 M.Rathmann */ BODY {background-color: white; color: black; font-family: Arial; font-style: normal; font-size: medium; background-attachment: fixed; } /*=20 2. Die Verweise: Standard: Text unterstrichen link: #008080=20 vlink=3D"#800000" alink=3D"#008080" */ a:link {color: #2222ff; text-decoration: none; } a:visited {color: #3333ee; text-decoration: none; } a:active {color: #4444dd; text-decoration: none; } TH {border-style: none; background-color: #dddddd; font-family: Arial; font-size: normal; color: white; vertical-align: top; text-align: center; } TD {border-style: none; background-color: white; font-family: Arial; font-size: normal; color: black; border-width: 3px; border-color: white; vertical-align: top; text-align: justify; } TD.center {border-style: none; background-color: #ddddff; text-align: center; font-family: Arial; font-size: medium; color: black; border-width: 3px; border-color: white; vertical-align: top; } TD.head {border-style: none; background-color: #ddddff; text-align: left; font-family: Arial; font-size: medium; color: black; font-weight: bold; vertical-align: top; } Th.head {border-style: none; background-color: #dddddd;=09 text-align: center; font-family: Arial; font-size: medium; color: black; font-weight: bold; vertical-align: top; } TD.big { font-family: Arial; font-size: x-large; } TD.small { font-family: Arial; font-size: x-small; } /* 5. =DCberschriften immer in Rot, Zeichensatz Arial */ H4 { color: black; font-family: Arial; font-size: small; font-weight: bold; } H5 { color: black; font-size: x-small; font-family: courier; } /* 6. Blockquote St=E4rkere Einr=FCckung=20 */ Blockquote {margin-left: 10pt; } CODE.list {margin-left: 10 pt; font-size: xx-small; } } /* 7. Listen */ UL {color: black; font-family: Arial } OL {color: black; list-style-type: decimal} LI {color: black} P {font-family: Arial; font-size: normal; } TD P {font-family: Arial; font-size: normal; } small {font-family: Arial; font-size: x-small } PK㰐\��Q�(doc/ProgrammerManual/Tutorial/query.htmlnu�[���<HTML> <HEAD> <META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1"> <TITLE>executing a query</TITLE> <link rel="stylesheet" Href="odbc.css"> </HEAD> <BODY bgcolor="white"> <table width="90%" cols="3" border="0"> <TR> <TD colspan="3" class="big">Executing a query</TD> </TR> <TR> <TD colspan="3"><P>If you want to execute a query you will need to specify a handle (<CODE>SQL_HANDLE_STMT</CODE>) for a SQL-statement. In order to get one you have to allocate one with <CODE><A HREF="gloss.html#alloc">SQLAllocHandle</A></CODE>. </P> Then you have to think about the SQL statement you want to execute. As I mentioned in the introduction I assume that we have a table <CODE><A HREF="intro.html#tab">tkeyuser</A></CODE> which contains the following data:</P> <TABLE COLS=3 cellspacing="1" border="0" bgcolor="#eeeeee" cellpadding=2 width="50%"> <TR> <TH class="head">iduser</TH> <TH class="head">dtname</TH> <TH class="head">dtmaxSize</TH> </TR> <TR> <TD>1</TD> <TD>Christa</TD> <TD>10000</TD> </TR> <TR> <TD>2</TD> <TD>Nicole</TD> <TD>9000</TD> </TR> </TABLE> <P> In this example, we want to execute a query which returns all the rows for the fields <CODE>iduser</CODE> and <CODE>dtname</CODE> in this table ordered by <code>iduser</CODE>. So the SQL statement would be:</P> <CODE> SELECT iduser,dtname FROM tkeydata ORDER BY iduser </CODE> <P> If you execute this statement you would get two rows each with two <A HREF="gloss.html#col">columns</A> of data. This data has to be stored somewhere so that your programm can actually use it, so you need to define a variable for each of the columns. So you need to bind a column to variable in your program. Binding a variable automatically stores the data of the column in the variable when you retrieve a result <A HREF="gloss.html#row">row</A> from the connection. It is important that your variables match the <A HREF="gloss.html#dtyp">type</A> of the column in the table within the database.</P> <P> So we need to bin column #1 to a variable of type <CODE>SQLINTEGER</CODE> and the second column to a variable of type <CODE>char</CODE>. This is done by <CODE><A HREF="gloss.html#bind">SQLBindCol</A></CODE>. Therefore we add the variables:</P> <CODE class="list"> SQLHSTMT V_OD_hstmt; <FONT COLOR="blue">// Handle for a statement</FONT><BR> SQLINTEGER V_OD_err,V_OD_id;<BR> char V_OD_buffer[200]; </CODE> <P> Now we can bind the variables:</P> <CODE class="list"><PRE> SQLBindCol(V_OD_hstmt,1,SQL_C_CHAR, &V_OD_buffer,200,&V_OD_err); SQLBindCol(V_OD_hstmt,2,SQL_C_ULONG,&V_OD_id,sizeof(V_OD_id),&V_OD_err); </PRE> </CODE> <P> Yes you should check for the return code of the function call. I'm to lazy to code it here once again :( </P> Now we can execute the query by calling <A HREF="gloss.html#exec"><CODE>SQLExecDirect</CODE></A>: </P> <CODE class="list"><PRE> V_OD_erg=SQLExecDirect(V_OD_hstmt, "SELECT dtname,iduser FROM tkeyuser order by iduser",SQL_NTS); if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) { printf("Error Select %d\n",V_OD_erg); SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, V_OD_stat, &V_OD_err, V_OD_msg,100,&V_OD_mlen); printf("%s (%d)\n",V_OD_msg,V_OD_err); SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc); SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt); SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); exit(0); } </PRE> </CODE> </TD> </TR> </TABLE> </BODY> </HTML> PK㰐\���;,,(doc/ProgrammerManual/Tutorial/resul.htmlnu�[���<HTML> <HEAD> <META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1"> <TITLE>Fetching Data</TITLE> <LINK REL="StyleSheet" Href="odbc.css"> </HEAD> <BODY bgcolor="white"> <table width="90%" cols="3" border="0"> <TR> <TD colspan="3" class="big">Fetching data from a result set</TD> </TR> <TR> <TD colspan="3"><P>If the execution of the statement went fine you are now able to fetch the data <A Href="gloss.html#col">column</A> by column. May be you would first like to know how many columns there are in the result set (if you use a <CODE> SELECT * FROM tkeyuser</CODE> you wouldn't know in your program). A call to <a href="gloss.html#ccol"><CODE>SQLNumResultCols</CODE></A>. This function takes the statement handle and a pointer to an integer variable which will yield the number of columns after the call.</P> Knowing that much we can add this to our program: <CODE><PRE> <FONT COLOR="green">// At the beginning add:</FONT> SQLSMALLINT V_OD_colanz; <FONT COLOR="green">// Num of columns</FONT> <FONT COLOR="green">// At the end add:</FONT> V_OD_erg=SQLNumResultCols(V_OD_hstmt,&V_OD_colanz); if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) { printf("Fehler im ResultCols %d\n",V_OD_erg); SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt); SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc); SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); exit(0); } printf("Number of Columns %d\n",V_OD_colanz); </PRE></CODE> <P> The next thing you need to know is how many <A href="gloss.html#row">rows</A> have been returned by the query. A call to <A HREF="gloss.html#crow"><CODE>SQLRowCount</CODE></A> should quench your thirst for knowledge. </P> <P> The last thing to do is to fetch the data itself from the result set. You should call <A HREF="gloss.html#fetc"><CODE>SQLFetch</CODE></A> with a statement handle (which has been allocated and <CODE>SQLBind</CODE> has been called for all columns). <CODE>SQLFetch</CODE> returns <CODE>SQL_NO_DATA</CODE> if there is no more data in the result set. </P> <P>So here is the complete source code. Real C-programmers will moan in disgust how inefficient the program is coded, but I prefer it that way (doesn't it look a little bit like PASCAL?). Take it as a starting point for your own endeavors with ODBC.</P> <CODE class="list"><PRE> /* odbc.c testing unixODBC */ #include <stdlib.h> #include <stdio.h> #include <odbc/sql.h> #include <odbc/sqlext.h> #include <odbc/sqltypes.h> SQLHENV V_OD_Env; <FONT COLOR="green">// Handle ODBC environment</FONT> long V_OD_erg; <FONT COLOR="green">// result of functions</FONT> SQLHDBC V_OD_hdbc; <FONT COLOR="green">// Handle connection</FONT> char V_OD_stat[10]; <FONT COLOR="green">// Status SQL</FONT> SQLINTEGER V_OD_err,V_OD_rowanz,V_OD_id; SQLSMALLINT V_OD_mlen,V_OD_colanz; char V_OD_msg[200],V_OD_buffer[200]; int main(int argc,char *argv[]) { <FONT COLOR="green">// 1. allocate Environment handle and register version </FONT> V_OD_erg=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&V_OD_Env); if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) { printf("Error AllocHandle\n"); exit(0); } V_OD_erg=SQLSetEnvAttr(V_OD_Env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) { printf("Error SetEnv\n"); SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); exit(0); } <FONT COLOR="green">// 2. allocate connection handle, set timeout</FONT> V_OD_erg = SQLAllocHandle(SQL_HANDLE_DBC, V_OD_Env, &V_OD_hdbc); if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) { printf("Error AllocHDB %d\n",V_OD_erg); SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); exit(0); } SQLSetConnectAttr(V_OD_hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER *)5, 0); <FONT COLOR="green">// 3. Connect to the datasource "web" </FONT> V_OD_erg = SQLConnect(V_OD_hdbc, (SQLCHAR*) "web", SQL_NTS, (SQLCHAR*) "christa", SQL_NTS, (SQLCHAR*) "", SQL_NTS); if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) { printf("Error SQLConnect %d\n",V_OD_erg); SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, V_OD_stat, &V_OD_err,V_OD_msg,100,&V_OD_mlen); printf("%s (%d)\n",V_OD_msg,V_OD_err); SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); exit(0); } printf("Connected !\n"); V_OD_erg=SQLAllocHandle(SQL_HANDLE_STMT, V_OD_hdbc, &V_OD_hstmt); if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) { printf("Fehler im AllocStatement %d\n",V_OD_erg); SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, V_OD_stat,&V_OD_err,V_OD_msg,100,&V_OD_mlen); printf("%s (%d)\n",V_OD_msg,V_OD_err); SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); exit(0); } SQLBindCol(V_OD_hstmt,1,SQL_C_CHAR, &V_OD_buffer,150,&V_OD_err); SQLBindCol(V_OD_hstmt,2,SQL_C_ULONG,&V_OD_id,150,&V_OD_err); V_OD_erg=SQLExecDirect(V_OD_hstmt,"SELECT dtname,iduser FROM tkeyuser order by iduser",SQL_NTS); if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) { printf("Error in Select %d\n",V_OD_erg); SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, V_OD_stat,&V_OD_err,V_OD_msg,100,&V_OD_mlen); printf("%s (%d)\n",V_OD_msg,V_OD_err); SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt); SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc); SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); exit(0); } V_OD_erg=SQLNumResultCols(V_OD_hstmt,&V_OD_colanz); if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) { SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt); SQLDisconnect(V_OD_hdbc); SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc); SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); exit(0); } printf("Number of Columns %d\n",V_OD_colanz); V_OD_erg=SQLRowCount(V_OD_hstmt,&V_OD_rowanz); if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) { printf("Number ofRowCount %d\n",V_OD_erg); SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt); SQLDisconnect(V_OD_hdbc); SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc); SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); exit(0); } printf("Number of Rows %d\n",V_OD_rowanz); V_OD_erg=SQLFetch(V_OD_hstmt); while(V_OD_erg != SQL_NO_DATA) { printf("Result: %d %s\n",V_OD_id,V_OD_buffer); V_OD_erg=SQLFetch(V_OD_hstmt); } ; SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt); SQLDisconnect(V_OD_hdbc); SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc); SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); return(0); } </PRE> </CODE> If I find some more time I will add something about diagnostics, cursor positioning updating and and and... </TD> </TR> </TABLE> </BODY> </HTML> PK㰐\h���doc/ProgrammerManual/index.htmlnuȯ��<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta name="Author" content="Peter Harvey"> <meta name="GENERATOR" content="Mozilla/4.77C-CCK-MCD Caldera Systems OpenLinux [en] (X11; U; Linux 2.4.2 i686) [Netscape]"> </head> <body text="#000000" bgcolor="#FFFFFF" link="#0000EF" vlink="#51188E" alink="#FF0000"> <img SRC="unixODBC.gif" height=32 width=32><font face="Arial,Helvetica"><font size=+4>unixODBC</font></font> <br> <hr WIDTH="100%"> <center><b><font face="Arial,Helvetica"><font size=+3>PROGRAMMER MANUAL</font></font></b> <br><b><font face="Arial,Helvetica">Peter Harvey</font></b> <br><b><font face="Arial,Helvetica">19.DEC.01</font></b></center> <p><b><font face="Arial,Helvetica">Introduction</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">Welcome to the unixODBC Programmer Manual. This manual is a starting point for a programmer who is interested in developing an application which *uses* ODBC. This manual does not address Driver development or any other development which is internal to the ODBC sub-system.</font><font face="Arial,Helvetica"></font> <p><b><font face="Arial,Helvetica">Why Use ODBC?</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">ODBC provides a portable Application Programmers Interface (API) with which to access data. This means that your data access code will recompile without changes on all popular platforms. In practice; portability is sometimes hampered by incomplete drivers. However; the core ODBC functionality (the most used functionality) is always supported any working driver. Other advantages to developing with ODBC include;</font> <ul> <li> <font face="Arial,Helvetica">most popular API of its kind</font></li> <li> <font face="Arial,Helvetica">most mature API of its kind</font></li> <li> <font face="Arial,Helvetica">skills more reusable/easily found</font></li> <li> <font face="Arial,Helvetica">hundreds, if not thousands, of applications use it</font></li> <li> <font face="Arial,Helvetica">availible on all majour platforms</font></li> <li> <font face="Arial,Helvetica">easy to change data storage solution/vendor (ah; freedom)</font></li> <li> <font face="Arial,Helvetica">easy to upscale data storage (developer and end-user)</font></li> <li> <font face="Arial,Helvetica">arguably the most complete API of its kind</font></li> <li> <font face="Arial,Helvetica">many books on the subject</font></li> <li> <font face="Arial,Helvetica">greater support base</font></li> </ul> <b><font face="Arial,Helvetica">Languages Supported</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">ODBC is based upon a C API. C++ programmers will find a number of C++ class libraries for using the ODBC API. These are wrappers - using the C API internally but can provide a much nicer way to use ODBC for C++ programmers.</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">Any language which can call a C API should be able to use the ODBC API and most languages, such as PHP and Perl, provide an interface to work with ODBC but these are not covered in this manual.</font><font face="Arial,Helvetica"></font> <p><b><font face="Arial,Helvetica">Architecture</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">Client Libraries</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">These are client libraries which are specific to the particular database being used. These, often, provide a C API of their own which is used by Driver developers. In some cases these exist inside of the Driver itself or are staticly linked into the Driver. Any Client Libraries required by a Driver will be a part of the installation of your Driver or will simply be a requirement for the installation of your Driver. Sometimes Client Libraries must be configured before any ODBC configuration.</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">Driver</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">Driver Manager</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">The Driver Manager acts as a gateway to the ODBC drivers. The main advantage to having a Driver Manager is that the end-user can configure the Driver Manager to use a different Driver than the one original conceived of by the programmer.</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">It as virtualy identical functions declarations as a Driver which means that one *could* create an application</font> <br><font face="Arial,Helvetica"></font> <p> <hr WIDTH="100%"> <br> <br> </body> </html> PK㰐\Bv3~��!doc/ProgrammerManual/unixODBC.gifnuȯ��GIF89a ��������l����������!�NETSCAPE2.0!�Made with GIMP!� , ����Ig���ͷ��ԍ�$Y}R����/L�w��[������JB�CŒ�]�C�F�5��PK㰐\n�����doc/UserManual/Figure1.gifnuȯ��GIF87a�}����2b�666LLL����m��������������������g�u�r�e`�1�.�g�i)�f�'�*?*^xZ�[�*~��[R� ��R�����*�����R�����������؈����*W�*����*0�Y����\c�*� ���X��*�0��Y��)c��**���XY��*0 0Y�Y�\8���z������***0�4YR��D�*�R��*z ���R����@X����0(*Y���*\�R�T`��a��@��[�) ��*�,nZ �T|�������*غ@�[�**��R��� �R�T���*�@��2��*��I�J��ί**�ڪ��@���*M����}�������*Over�wJr�i*tpe� ��ex�i�s�t*i��n��g� f�i\l e �'�/�hod�m�e�/p�h�arv�e�yu�n�ixOn�D��B�C/,�}�H����*\Ȱ�Ç#J�H��ŋ3j�ȱ�Ǐ ,`@��ɓ(S�\ɲ�˗0cʜI��͛8s��ɳ�ϟ@��, ����H�*]ʴ�ӧP�J�J��իX�j�ʵ�ׯ`ÊKv)ёe�X˶�۷p�ʝK��ݻx���˷�߿�L��Ѵe�F���ǐ#K�L���˘3k�̹��ϠC�M���Ө//fV1�Ʃc˞M���۸s�6���W�N$ ���ȓ+_μ�s�}s���سo���������=�����;��@�f�2}p=���Q �O�?���(�&WV�����T��}g�vR�Q*�_d��"�Y�!JV�d(b��f-"���&^6#����b���Ȣ�������فWm���NA���ʗ�u g�}�� �G}�؋3�Yc�c����6��j�F�m��㚞�I"�80�x�eHZ��Q�2�$�QJ����w�p�g�PJiHyy��z�Yf��� ����)j�v���B�y�lv�'��ʺj�>�xk�@�ꩬA��)����H�7U�������(~G]���f;i��b�坱�Ƃz븿�K"�h���������k��;*����k���o��{���*�m�+Ь�6E�Q�*Eq ,����N�Y�+o�q�kp��k���;��x�Z/��ۦ�1+p���Ȯ��<^�7�,U 6����V�P@mSo��"g�r���c�熝��_��+��⛳�.��+�:��5�X�L��Z��J?�l��NX�QD-u~���?��5�=���˟�|o��n�v�4����i�nw搇��A� ��H7�pR�*�%ӄO+��PO��{ ��&Nj���G������v�+����=� w���\��C՞z�d��ήh��5q_������j�@�<��d�����V�����_�Tf?�kd��ߎ\�=�nY��S�W��!�8P���z� ᑤð��vSҠ�#���| �bA�]�80̡w �*�5$ayH�"�6>��S�(�8�P���H�*Zq'J� ���.z�`��Hƨ0��hL����6�1���H�:��x� ��>Nd�y� I�4���bq��H�(��6y$$O"�I>���L�o��D6|�(3��P�r#�<�CR��V���� ��IO.Q$�� Q��:a�e's%^Ӑ�ԣ��I̥��4\�3�(�1V��3�wɘZb�|ߌ�6})Mk���D&k� $ŝ[A�RJ�x��*g� ��I�t�џ�(� G)1�)�T@B��P{6�(!z'>q�zRe�V��;EtO�VE��(S0�M~"T� E�V@��Bt�.��8��И���l�A�ٔ�B��}iM�Җ���8�G�J�x.էAe�8JԎz��V=jLm�ϙ�ԥ\KX�IՑU���:w*�ա?5�S� W��S�r=kPE�Rw�C=�D�J� V�)��U��ձ�U�K��^'�W�.ͫ==lD�T�FU��E)h�ղ����*\E�ȵ.�U}�kl9[��V�v��Ig�[�Vv� �h�թ�V�qE,n�\������+g-����U���lr��R���5kg��Q骵��m�\%�W�w�~��q%�X�jW����p���FV��.a�kږ����.o�{��ռhmm�����Z��9� [�Z\ھ����w�;_�z���m/�;,����ѭ�C- ԉ��3�+}�:����@�qs�b�J���!�\���L%�ݫ��~ֹ0~*i�l�WխB}qE�,����3��#,� �X��p^)���x��e��2�v�S��m��k��F3�eF0�=嬞����i�C|����0��<�.��y�3~!����5�L���'�2�w\�M'��&�������M��E��Q����n�m|}�8z��ns��l����>���5�.�:��4,�=Cr��\$hZ��oϓ�z�#V�}��{���s�3��`�{��^�����s�6�����wm�R� 8�~p}2�_�xA'np����ZLo8��m���Q��v��U�m��t��x��rsz|�5$�q.q(�|$��$Ѓ>���$F?zP��t�T�茥ԧN��[��X��ӓ8�{��`/��N�����:=�����ݙ\���Nw�/��xϻ�u>�����g�O��>1�?���x����>��[��Al��7��{>���<PV�yћ��O��OR�G�]ݔ_ I C�����Ͻ�w���`����3{����O���|�3`-����IL�����\�I��E�_ޖŏ�ק_���]+D9����{=�IQ��/>������8(���)��w�x�d}�a�q x^�Wr��m�Gz�g��~|��uրh}��u�7��W��w�����[5g!��w�S�qk]���I3p�fc&�O(��DV,XR���m�~#�h��mK3�;�a=�i�l֖�"X�La�5^.b�f��EdHh�a�X��W�5�Kb�v_)vO5}S~U�egە\<�]H�tXi��Yr8;�P�i��d�%e�hd�\���q���{Hg���#{��h�6�Q���X���i&U��f��f�e�Є�d�dL�Y�腉�c�F���e�k����8��&�X�Q$e��HH�(������FH�ˆ��Fs�8d�Ha�X��x�U��C^�HL�o&d��q��0er��������H����Fg����x�x}V(V�Ɔ�8���bsx�`9�Z�d_����V]Z�Rƌ�G������V@�iz���6��T��*�oY���x�8�xՒ%��$�%g��Ԑ%����oȉ>��y��w��(�F9�II�KYH@iqBh|��|����}W�FY�O[ ��w1lٖn��p�r9�tY�vy�x��rY�LI����YP��y��������٘������9��Y��y��������ٙ�Y�(���9����\x��������ٚ������I�(�v�G��������ٛ����Y�nw��Y��y�ș�ʩ���vĹ����9�ԙ���v�Y�����ٝ�i�v���Y��y����ڷ��������g9r�9��9�����Y��s����9�Z���ؔ��f}ڠ������v�\�z����)�E�ji��":��ɡĤ��$��,��&�K(Z|-:�4ڟ/jK1ʠ5��<z�7 ]��F9��=Z�FJ�?Je�(D��Dz�P�ƙ�s�c�(�|��/���R��`��TZ[����(h����lڦ�9�!�c�8��x�M��^�z��ڔ)X��Ec�x����E\��yʧ���� �yf�f�ƃ����z�����ʄ�x����٤�]���J�������֎�Js(����zz�x4��*�� ��Jomd����lJ��v�2 ����zrĪ��ڬ=���t�Nz��Z�$ �����j���?�ʧ��ڭ��~Z�蚮�*��ڮ�h7��:� �g'��i�f������ɯe�[��駶 ��j���깞9�� ;�߉�o����S�M�� +�KM�&��#۫%{�,��)�F۲2�/�Ҋ�3���Y�B��:��oʱx�� �Fۚ?��mŪbG��z�P��7*i�~>�X��/�UmXY����R(����f��[{��6��V^u�`N��g;��*�w]�8��v�MF��J��+�i�^���{���������F���oq����S����]�;���8{��{�I[�Yz��h�(N�[��+�<[�LZ����&Jo����X��Z��k�Y�VٺO뻘��w��{��;nʻ�Yۼe��K�� �cI��������u���;�Kv;�G[������:��Oɾ�˼;� ;�f��w��������ۿQ��&�����{�FK�3w�̲����Y�<�����-�h�� |�"l�\�!���I�*�'s)��&� ��4L�6<�3������>��,�8<��'z�H�J�L����8�RL�T�pV|�����\\�^LqB�S\� �f̭c�sF����v��p\�r,H\��z�|W�z,�hܯj�����y�DŽ\��\���ȹ����ǎ�ȁ<��<ɱ ��*ɘ|��LN������ʢ�ȕl��|ʗJ��ʬ���L��˥:�*[˶������˳���K������\̣|���ʬ�����{�=;���L������|��\��<μ\����|������Ȫ�������|�E��������<P�4:���]�m� ��3����͢-x]�ך�#��-�����WU�$�����Rj�-7�. �0�q2=�Z�5��8M�+-�-����7|�BM�:�D�|�-�� g�L͟N-vP�9�LZ�V-�X-�Z��K�<�`m�b�d]��s��j��g��_����r��t��v��s�����8��~͝�M��=��Y���� �q Ň��ө��枒��{m��}��I�[7���٭Wwx���U�٦����r���S��Z�ڰ��Ŵ]�4{�d�ֺ}ڙ����ۻ�ڈ7��m���Ơ��j�dQ��]ףMw�=���s���m�ڍ�<����}���m�Э��}ެMއ����������ތ\�-����߄�ߛ�����^�Hzड़� .�����}:�-<�~��MK������� ��">�ǹ�H��(.�%��,���t�2��4�v6~㽙��<Θ>�o@�9�!��F��n�E���Ҭ�P��R~�T^寉�/��Z��J��U�v*�PN� f�K����Z��W��n���湥�Fn�I5�t��z�x|���X�Ι�~h�~�h��茮����x䉾O��㗮H�~�I�.�~K��⣾g�������8��i���>�^��̾ػ����x�y�^��~�Ȟ�1�Ǘ��^ݱ�>��λ�~��^�پ��������ތ�g��^��~��N�ʾ����������N��7��|y�[���#��֮m��o���W�������y?|]8�*����$�Y�iS1b���e?T�U�(pX�����Yq�ԗ�0��Wa�o�5�0�TM���h�U!�M4�ľ���� mV:�No`J?eb�^@��f�3֊�%�M�X��cP���e��l��\ՖX�V`{���Wm��U��`�n�(d��2�$�f���eZ߹�x�nۋ}h����ok�ڶ�%��_����e �&/�z?�k���&�|H�U����W؍��k���j�of���(�{[i,h�����{������iOf��U�ʍ-jl�F���H���&�h�g_��?�C������Y�o��^�/W ��z���O�������F�nώ�/�\������xgg6���gA��$hp` >D��A�)Z��P�ŋ'>���G�#�ir���]B�ؒ�ȕ1Q��)�!ˑ8o�<�ѥN�@{ɠ��0H��T�5m�|�ӠJ�!�^���kP�/gz�(�lY�X�~5��Дt�v���ͼa�����T�`i��۲k՞J�:� �1c�T��(sۭ���<�9�f͋/��1�iĞ]�= ڳ��v��:�n�m��Zo�ن��mz�f̺��65�%WC�^���M�F�^�x��͟��^�z��ۿ���v|��7������'O1|o>��@����o�&��B/İB7d�7?�JA9q�TBɤR C8�g��M�1Gw�G�CQ�XtqB��1Id�I'��2��,�]D2K%-��K/�3L��nŅ�LRK�����M�<�+�ڴ+qN��<�<����=2�ێ��dTK65�3�B�����@B�䬽I9eoS�2CE�MU!ͫ8���m��>j.�,��&�54YI�.��P�T(Њ%eˌ6���5]��5XjcE���z���joU�ެ;.Wn� w=R͔��S�LR�U),V�>k -�B� _}��W�|�:�ٴ��X��͢�lخ��|�5�w�Ճo�5b��-K�O�Zw�3�EI.c�Fz}�W�M�ㅵ�8�;u.���*����i&:�sr�ᢏn5_��yߧ����N�d�*ٽ�Bx�GYe:�e�z`��M�f�v��+-j�c��m�^���Ef��i���� �b��"<q��+9ѓ�vTްž�&m!�����Ί��h�.�ǡ���=���YO/c�F��N�iu�^HH��:�SW�3�ks�p��}7�yb�M�^�:s^����}�0�+��j�Iw]j���7h��)�pk�����x�<y1'[�е��|KX�2���� Y���8��U�{�����fIL-��V�*88��ʂ@�KAp�o`)���4�Dn!�A��6��M���"/q�'�_��7���Oe;�\_&7&q�W�T����ٰA�*��6)6�gO2!�(��lq�8�p�"-�Qle4���G>�qTI� �X�T!o�x̣�HF6�*q���&;"ґ��d&��A�1Iv�59JR��I��\)YI�ҕ���P�?���kBd"c�K^�2>�l��`�Կ�ɗ�Df2k�% 2� @�b�H���f6� �@~���@�\�R��Dg)�y�p @�;��ؖ�Nz�S����NwF�r��<�iO�T����4���h�1j�@'dP�V����B��Q44�D-:R�~ ��&G7�P���%�iL�tR5T�u�Ke�S�ʒ�e�_0��S�ި�GE*���T�65JKujT��ş"j�S�jV?U�vի���W�:VCU�JdEkZ���2Q�o�+R�W��u�u�+Y��W�vu�}�T�X�&u��E�N�Xƒt����AY��s���l69��vֳ�mhE;ZҖִ�EmjU�Zֵֶ��mle;[��ֶ�ŭkͺ��ַ�np�;\��Enr��\�6υnt�;]�V��nv��V�fֻI��wŻ��$-�y�k���l�{���Ȭ�}��K�h�p�<`�Fp��+/7��p�%<a W���p�5�aw��q�E<b���;PK㰐\ą_nndoc/UserManual/Figure2.gifnuȯ��GIF87a���2b�666LLL����������������u@a�l/Fi�g�u�r�e`�2�.�g�i)�f�'�*?*^XZ�[�*~��[R� ��R�����*�����R�����������؈����*�W���*���0�Y��\��� ����*�����)(c�**���XY��0 )Y���*\���*����W���***0�4YR�D�*�R��*z ���R��*��@X����0(*Y�\�R�T`��a���� ��[���) ��*�,nZ �T|���������*ؚ0�[Ҷ**��R��� �R�T���*�0��2��*��I�J��ί**�ڪ��0����M����������*Over�wJr�i*tpe� ��ex�i�s�t*i��n��g� f�i\l e �'�/�hod�m�e�/p�h�arv�e�yu�n�ixO��D�B�C/,��H����*\Ȱ�Ç#J�H��E� �ȱ�Ǐ C�I��ɓ(S�\ɲ�˗%dD`��͛8s��ɳ�ϟ@� J��ѣH����Q��P�J�J��իX�j�ʵ�ׯ`��t��ؤ�]˶�۷p�ʝK��ݻx���{�,R�e� L���È�k�Ҵ�#K�L���Ō�:Fk���Ϡ�b6@�ti� �L�s��аc˦��t�ۧ��V�sw뙁�*>|nq�ď�N�|���z��-�\�p�sڮ�]w�7}̶�\�p�����s����\��ѷ�H�:wx��&��V�{�%�]r�!� qj�G�uF�[�M(@�Z(!s>�!|^�^�(V��\��d���9��o7Af�u+��#����!�8��9�܇6�#�>Id�< ��U��"i��#�:��id�i`��M)d�Sv8��HJ�d�q:y�J)%�h�Y���J�&���!�F�禝���$�x�W���tb�d�zJ*j[��W�m3�$fck>Z'���B*+�i�Wi���蟞ii���)(O�!����?� ��Q��*���꧆���,��F�*�Z�x�w`"kӪE�Xd}�J{ �*b�)�� +)���K��&���ˢ�^e����l�e�g���ŚN�,g wl�ˁ��e��Ưy�r�GLW�[���G����8���<)<L@-��D-��Ҍ��L7���P�s�TWm��X#���\w�5c�-vK|m��`+�3�C���pK��M Pw�R�����]Mv?�wOnn8�a����^'���{ �Nd���w���θ�㤹����U�.z�] �M���y����T�;�.�N��$<�۔|M���ɼO��t|�`��5-o��χ�Y�5<��ۤ��ܣN��Ӌ/c~������췯������6���.~���w9������'ض��x�[�P�?�\/}� G8�*Nz�=�@ �����NH�>ł�3��6���yP��B�� GH��Ѕ�{�K���k�P� '�B�0�V���'C�Eq�ED����~�a|[[sF0Ⰺh[#��H�4�N�t�=��<:tTa]��;Љo��������F:2��Z�I�JZ�̤X��4��䃠�(GI�R��L�*W��T�G�p�IfI�Z��̥.w��^���0�I����{�e1���f:�Ќ�,�9��)S��̦6���[Rsmo�f7�I�r�3�ߴ�p��X�� f<�I�z��c���pn��p�s���e@�IЂ�3�5Yg?�τ���|hC��L�t8��h,jЎzT�}�H:ґ��$-)Ϯ9π��0��LgZ̐B4��$�MKQ��4��PiJԢⓓ�\(O��S�&�i?�hr��R�Z����iNwjҦ����Xq�R����ZU'Ww�֜R4�ekYzֺ4�n��B��Ԟ��-��E�j��4���a�U�N���,Z�L�AV����cw��z����dX?KZ�R�����jW��ֺ��9�-8�6����� Rg�ޚ �� n�*�7M���M�r�"[�}��Ѝ�t�K��ZWv�M�hK�]sfײ��x����w��is���6}*c��V��K��.��^��H��O��]���o_�Q�:t�"m(S�ԉ�Жt��@��`�*x�^U�D��B���(<c��w�_q�s"�{��%M�*����N�|G�S��6N��/�Q���� 2��Kc*���G������C���1��\��X�Z�r�U7<�/���a���<Q��z�k?��d��S�n&myM&���G�!j�Vh͜сtf]AH[z�0N�/�cI��Ӑ�4��R��Ԩ>u� ��V��հޭpg=I���W��^���W�5{aM�bh¶&oq��Usv��v��= �h+;ى���;�dj{���6��=��)�,q� ��fn��'�&7�̭O~3�Ϋ�#gv>��j��J�-g��{�_���zz�����#�����)<��ƲƓ<�*O\��x�.����w�$.dy�"o]�����di���j昏|�Yn0�q�S�cY�*�yѓ��,Ǹ�5z�U�Ф+lݶ췯�oq?��#���>�s����z�ўv���m�5����������$j����.x���xO����������'O�P�q��d�H[�S� 6�c��̃~��S�S/�ӗ���Bh~�{�����טc�����Ƿ�hj���� ��_k?V�:��]��i�|2[�9�}�y�}��g����=��O�r�~��pO��o���� �?�q��ˉZ����C�q�R��g���~�~ �ׇf�|��}���z �s(5u�V�dMV��u��w6�%�F5|������vł�\��3�(�4XW�7�^3���J�K�V�Fx�H�C�6ׄNxl�WxhGzR�oThq���Z�wh�y�Ty`�by,x_e8j?���*<W�5'��ņ�G|8(�4E�rc�>��yH�%|~N�$7�h�~X��X��V<Qh���xNz�؈�vbɷ��V�7Ci8��T�ȇh}Wd�n�(���{�����e�r=NJ���D� ���S�8�&�H�n=����M��V��T�q�q&��3��3u�n�s���x�����M�؋}��g��|��`�8�#�o�o�5���T��茜%���L��z��z�H����]i���n�h���E��������y[���� �)хgX�"W�&m(�9[ؒ.�����7�4Y�6iJ%�z9�[�(��Ć)�;Yz>�����X=Y������ǔ�u���t��q�;�e��T`�'M\)P�5T�Ȉۘ�X��o�amM^IOa�K�ee������Ɖ�pr�e�a=�~T�f��f��f(UU�}�{��a\����tӸ���p�x��9W]F���,���~�٘���,ƖN��_9�G���9t�獙�q�x����� ��e�I��ٚ��eĉ�����H�'��Eah6dw��8���r��a�ٛ��ba�Ǚ���mY�m��T�`�y�� �r�x_�ٛ��_��lj�ɟ�IVC������)g�X�Aי��x�m&��9��9���g� ���e�5X�IO�qΙT�8aDF�Uǎ �� 8�٩a*�͇Qqy�ϧ�� ���|�|kX��)�9rKYL�LG dz��甤���e�Ӥ�VORJLY�YTz�IُR)�t�Bz�a���JVJ�٦nj�1 �h#�tZ��w2C���&�z:k|ڧ�����[`�:��T���G���t���zF���Q���FyZ��E��ZGr��¥��I���:��z��z�����ڨ�ڪ����:��:���������w7٫������;PK㰐\'���))doc/UserManual/Figure3.gifnuȯ��GIF87a�Y�PH�PTPPX`Pl�P��`d`ppp�l��������������������������������9�P���@@�|�d�5��@�|�'`����@���/��x�H�l>� �@���\�6�@��!� 7�|�H`5>{6`�@�D/| �@|�A`/�8l�7 �a�����Bj@�66/�@\D�� l/ @�,A�������@��7@@��57���@�t6�j��\�/���ll @@@�H�/>���D�/�\5>@�B6����!�f@/�\�G������6�q@|<�7_���#�@�����l� ��@��=�/e@x��/\|\(�>��������#�@�0c|f���/#(���(�L/���n��������@#�(6�|,�������'�@�4�9�l� �@'0�@@���l/�H>D<a'����@@@,�Y�H����*\Ȱ�Ç#J�H��ŋ3j�ȱ�ǃ"�I��ɓ(S�\ɲ�˗0cʜI��͛8s��ɳ�O� ~ J��ѣH�*]�th��J�J��իX�j�ʵ�ׯ`ÊK��ٳhӪ]˶�ԠP�ʝK��ݻx���˷�Ӿ�L���Â�� ����K�L���˘�X<��ϠC?�����ӨS�ƺ9�T� b˖=z��۸s�ۚ*lȍ'��z�U�X�76��k��УK��� @x,�t���;(��^��ӫ_/���ʻo�x���<��ܱ�����k� �ށ&�Wu���|TM �00�����sF�� 蟀���(�8��9�S1 �^h���y��!�b�>v�a~*i�T�f�h�9^qPV�@�T�G�~)��X:��`"��k�����M%�We雎\��&�i�Ѝy�rhG^Tj妜?��>։碌��" �(�V�Y���Y�6�駙�Gv��j�u5�Yg�*����z��o'뭸ު盹�ꫩ��*찟K��~)���6�l�ա4@S�Vk��f��E1��kSM����&*�R�[��f��k�����m�Q�[��P�o��ֹRŋ��7<ֻ����W�տ�;��wm��n���C�n�"3,ϵ߆-�,�mg�W}��rg0��3�߂�2�V�xeZNݡ�G�l��?GM'KL4c-�Vқf��^K-�]���s�eq���jk���c�]Q)|��oY���s�-���m8[&�;�sE���ۃ;N7�9n�W5��7�p��4� �y�_n:Y�}3��Y9X~������[un��v{�����}X�����A���j�//}Y��������g�x;����#�{ս��~��k��� ��>��'?��?�����H����:����? X�̠7�z� �GH���(L� W����0��%P���8̡w����@|a �H�"�HL���C2�P���H�*�PT� d@�(>f�]�`]8F �1����5��iL!pT���ъ-Ģ�(�;1�~a ��G��q�#�x�5r�����!!�HJ��x<��h�b��e��EY�=^R9>d$$��FR�Еj\e'9��2� ��Y9F^Rr���c(��I��i�e,{��I2����3 Mb�2�����Lcns����(ei��s���7?(�g���D�;�yMkBs���&9���~���ɢ?�)Nl����f?�Nm�ҡ-�>M�N�z��Ҕ(A�Њ�ӛu�:c�GRf� �(;:͐�ӣ0(jјԥ(�h�(ӆvt��$M1JT��T��l�>E�N�.Ւu�Q�:S�����<�U��R�FԨA��J��Ҡ�3��ku բ�U�g����̑�� �&\��T}�s�}�"]��Y��T�^�Z˸2v�.Ul8���֔�ݢZq�����u+Zg*ҭ"մy�jjA{Q�S��}��h�*[�:V����Y��TE��f�c K[�������Z����X��PY*[��Ը�4)uq:��"5�O�+3���rb����,e#�ݗ���M/Y7j���>�iK+�R�vT�m-�w�zN�V����0�H�b�T�gf��[7���ԫ,�a��>if�_� ֺ��o:��B=���e1.g<��؊7Fccg���.�)���a<ds�@��&=��߶�Pfb��8�SNv�`n����.{��2\2��L�2�y�.>������6'1�n����L�.@ˮ�����*s�Ǭ峠-d?oY̆&����DC9˞�'x�J>i����l�7M�Nk��'u�C��R��ԣN5�W]OS��ըf��a��Y��Ҹ洓��|��v]dDY��N6�=d8Z�Ўv�-�Z��ζ�Whm�m���7�iq����&�����v[��v���gx��η��k_y���7��Mc~_��=�r.�s�xNx���c2���~8.�g癟��/>������x�S�G�����*B��T�z��5���Unn��㹍yy���� �����)�f��{�yFzh)�cI��Jϫ��x�\�({h�v��7���:���U�ʷ���Mm�^��}�j#ۙ�L�J]ŀy�!��g;�R� ������s��[��-�<�7�j��}?�xћ��t&��O�i��̪o��z3w{�A���O����6,=}��۱�e&��/�A+���/%����#|�{���i��{�o���>�ǯlœ���<�h����|����d��_�����e��_�Η}7���8�_��%`�HFL`�M�O��{�D�D h[3Wx�vQeT�Qs��Xq�r�Z��}��0(Uw��g�]���bXwXE�Fx��q4xD�D8�d-x}1�>wN(�C�G6�eGhb)�u�������U�Q�zsV�VR?xl}Wa"ȅvu�tZa��S�e��{qx�<4-*|s��~�A��h}���hAuX���(E�������bntc��W�%����`�DUxK�X_�Xur؈�xD�X{��d.��?6��7�FT�%&xCw^fr,5Y��L�hH�e`P��XD�Hw@�`P[�MJ%sWx]M�U�8��HD��� �p��ZI�Xjńe5��������aih[��\Twv-�#�f�a(�?T�Ax[�艨��,8[���H�>d��u��Hv95^���Y8v�ņ�%��'�<D��u�����w�M�`�ubk8O$Ɉ�C�hc�؈뗒�Ȓ09�z�J+���6��:��:ٓ3D�W�>9f'���(C6��V��w�*��K)�3�9QȔP9�R�Kd8s��Y�t[�I)v=��aɇݷ����i�fhiCei�b�r9�xԕ��u�x)�k�t` ����������|��<���ٓ� �����y�������@ٙ�6�?锠)o�)C�Y�x��V���yx�YE����v�14�� m� C���ɶ�/ԛ�)l��B�9��V��G�� n��B�ٜ:��i��Y�0y��وڹ��؝�Y�zؘ���(t�Y��IEǙ�t��+Ԟ�)g�B��k�&k��j��k�Fk���:��柵���Y����I�z�� ʠ�)g��u+8��V�)t�p����S� ��ơ(�&:�*��'آ.j�0��7�4�~6z�-qƑ�z"jB��DX7A�q�����v��U�艔HmIF�U:C���Q�tF֥m�hN��p����Z*FQ�X/���O?j����8�/8�dڣ�X�$������wH�%�M5��ԋ�xt�]�Xtǥ�jX�|:�nʤ�Vy5[ozv�Ȑ7���et���rP����P�����:q�zYnhZ:�sl�z39�$f�oi�楀Ƀ��=h��ux*�Ě��(våR�Ǝ\�Q���^븩�X�fW[ͺ�n��J�Cz��*�v��[j� �� �ch�t��sڕd�4v� ��8`;���ê�2�� H�"V��*gt�VY�[q���s��`n7����o'aOj�?U�yHI��[����U�e�옔r��*���tik��axr��=˨#�mh�"��J���o>���j��z�eȧ���:��Gl3D[;d9:oSv��&��w���yU������g�:��$��,��r~t[��'�x�}n��{����8x���������� �����{��;��{�����������˹���˖]+��6��Y���m������g�a(��K��{�~���{��ۻ����{���FƶRH��e�{��X�4�`�[fͫ������5�cV����Nh�_��b�j�5w�n���ɽ�x��:TkX��CK�����{D����۰�h����ƛ�8���b���%�N�W"UIj�F��(���l����K�>d�]e�� �<ZLs ����"LD$̫i��p���;����W1�D�{�Xz�?<��m �E\dA�u6��K�eM��7�Tl}V|�ї�Z�|3����`�{b<Ƴǻ�۹�[���Ɣ�ƌ��r��s��vǓ�t��w��}�����kƭWƄ�z�|Ȧ�Ŋ|�G�Ȳ�Ȑ�ȏ<ɧ'ɖ,z��ɠ���h���Ül�\�)[u�;�"T����IĪE�|`B��K���\���14�譁�� ����]����,�~�t��5��D���+����g�<�*�ʝʥ�بNJ��l���C�̏���x��k�~��;���ʳ�\é��<k�;L��\�Qf��lIfa�=C�\di����ц���u�̊�mĤ�w�̲�G ��@�(&���,�jd�Id� 볒&rBL� ��Q��<�0M�[�#x��������?�6��l�� � ��<�ܭ��W� L ��M�_"i���Mm�U���ؾ�U�V����g��.��������+,W=�Fk�u]�Ϋ�7\�9�N��l]Ѝ��&H���QIF˖���ٜMo՜�b8�$7��L�( ��Zx�}ӟ}Cg]N^:Ϋ�į]��̯!�Q�z�8���ط]B�-w8]���_���ݪ�Mܹ��d��̓-u���E��Pܾ�k�5ݶ6�1[�ڽ������o��K� V� ���v���W��[���ܡm�f��Èɑ^aj ����6��]���g�pz�� �Ҙ-��A������m ��6�$m�|�"~�*��,��+�ri��x<�l�5��u��n��<��>䁬�4.�8�)�(��JmI���f�P�hR>�V�V.hX��{��\^g^��s��]��ED.�h\�Tv��!>�h9�!,�u��Gb[Z��HK��k �M�~rw�ܫ����"}]�h�@F�~�M���26��J\� �.�;vʨ*ڨ$�V���5����������뿛��q^�l.�ۊα�܍��;w:��d����]��TW9r�-��>�b�������f�^��~화�Tc���<jؤ�E��V��[�?{��NE�>լ��h��U��F�.��~� k�B���n��~�O�R��=,� ��>��j�h���Ҷ��) ���6����_"D�lT�Lt��*�A,��e��:�4�K6�x;PK㰐\����) ) doc/UserManual/Figure4.gifnuȯ��GIF87a�[�PX`ppp����������������������H>�@���686�X�P����@��|d���@�|�'`l� @@���//��x�H�/>�\�\>6@̘!��7��|H`>{�6`/�@1���| �@|�.`/�8l�7 �@�a�����@@�Bj@�66/�@\1�� l/ @�,.�������@��7@@��57���@�t6�j��\�/���ll @@@�H�1�/�\5>@�/6����!�4@/�\�G������6�q@|<�7_����@�����l� ��@��=�/ex��/\|\(�>����������c/|H4�>��8�(l� �@��(���RL���)n9H>��#8(������|0�@@�8���9�8��H>��l�`�Da'���/,�[�H����*\Ȱ�Ç#J�H��ŋ3j�ȱ�Ǐ C�I��ɓ(S�\ɲ�˗0cʜISb��8s��ɳ�ϟ@� J��ѣH�*]ʴ�ӧP�J�J��իX�J���ׯ`ÊK��ٳhӪ��u�۷p�ʝK��ݻxs�� ��߿� L���È�{��ǐ#����˘3kޜ�q�B�=���ӨS�^ͺ�gЀ�*( T���}��˔�P߭�N�x��8p��l�?(�]��P�_��ν���=��+��<��鶧_���o����M�������ߴ����� @�H�O��_l��'�|N�^f��n�Gm9 �"h₺�GY}+��_}�#�4�h�T!'�dVgۏ`���X�:ha�Gj��PF)�M��feh=�4$�(���_2�`�c.9�h�ٟg���$O?�d]Pa�I�e�8��|��gkl0�Rs�Y��J���m��埐F*ial*7饘f�iP��榠�*j�l�⨨��*��Ƹ���*\���j뭜ъ뮼���+�r��P5%���6���F+-LT�,��f��V��fm�ۆ+�@��ג�����M�+���N�ҫᄆ�[-���+��ӽ�K��Cj/�7,��S��-�g�1�Ë�oG~��U�18��(����9)l�nV����*�l3R���:���S=�� |?��ݧ7'=p� |O>�L�RA3yr�R�w��\3��;����R�M�NXG�6�Xw�9�MT�j���l�m_�ޮ��7�L#�2�xg-U�e���|��_;M'�d�}��F�8�?�y�qK�l#���"��"����.z^��n;������A�����.�ġ'�]���������s[��Go��C?8��w�W��:�他{�-_���[�>��G�>���/|[������H��L��:���'H� Z�̠7(A�q� �GH���(L� W���/0��gH���8̡w����@��H�"�HL����&:�P�����)Z�X̢���.z�`����*��hL����6��p���H�:��x̣��G�0:���FA�АHDdE���4@�H(:����a&xI!Ɔ��<b(�8�'��<d*9�J#v��leO�EC��"%eY�K�R��d$$�xK_�R���d2q�LV�r��D�)�IJjZҚ24&6k�h�2����w9�h�3��䡛��V R���8�9�t.ҞI���*��I|�P�b�+繛 v���V�)�N�S����=m�Nh:���(<7*ˈj��|h)�ъ����|hF? C���,eh$1��a��ܨDI�L�Nt�@�g8;jSG�T��<):A�ѕ┙?m)GQiL�JU�=�9�Ϧ�t�*U)L�9U�fu�D�!8�zը*��U%)E�zհ���Z��ISJMrʕ���]��R�6��t�f` �R�S�bM�LJQ��՞G�kT%U�T���'b��V�֢f��a�xVՠ�E��W;֙�V���l�*S�����Ԭ_i Y��֫�lM�KV�N6�Ienm�N��t��EjnI�[����nk��S��U��ͫlU���Nֽ��b �������`����n7����p��L ��v+q��Ԉ��.(i!L_�z���40W�[R� ���o�k�c6����jo��b����Mo��{� �x��*t;cߒ8Ÿ�/�y;�������c��ƺ��tcW��~2wy�X&����51f�j�_v�F��GIe+���/�]+dϹ�Z�rZ�lC"��͑}�m��ZAֱ�-h/{^�6Z�1���%�g'�U�N-�E�<�ʮx���4�]�B�y�V�m|��RY�p����~>���Eu� �^>�0���4p�z�A�4�qmp�͚����4�ݼ��آ��iy��g�B��6�+)}k;o��Ͼv�E��v����,��<jx/U���px���j:��+�� �9⚍l�u�p.���nh�>E�/��O4�����/��i�.�)^O��7�6���}E�����g�E����V�8�qNLo�|�gt�χN���HO���(�;=��}�ԧNu9*t��<�}>F�����$��ͪ���h����]s�܉^ϯ�ٙa����iϻ��ĵ7����/�ok�O�u]3���;~�k/,Z�.XX�5����E����[��F�=z4��ޥ^d ��ֻ��i�}eS+��Fq%U�Q�6�R] j3�>�d���|����Q�{ۼ�n[߿�'u�S�?�:C�� ��q����H>��=�V� �<J�JyX����,0/)L������M�~X��~��fd�lm�z��aF^R�Y�w}�Q'��d�|{��~����fZ�6�'�hx5f�ւ�v{�udsWm�ui�H��:hu6_��}6�f�m�Vy��l1v��y�F���_�fm�wyGH~��X��Awu=6Hd��[�zW�dX�X�t_VK)�qfw؆p�E����p\�zr�O�|؇>D�~��8���x����|g��؈����Dž�8��X�4;PK㰐\�ǁ�.�.doc/UserManual/Figure6.gifnuȯ��GIF87a���������@@PX`ppppt��������l������Ȩ������������������X������ܨ��������@@���//��x�H�/>�\�\>6@̘!��7��|H`>{�6`/�@D���| �@|�A`/�8l�7 �@�a�����@@�Bj@�66/�@\D�� l/ @�,A�������@��7@@��57���@�t6�j��\�/���ll @@@�H�D�/�\5>@�B6����!�f@/�\�G������6�q@|<�7_��0�%�@�����l� ��@��=�/ex��/\|\(�>������0�%�@��c/|Hf�>�08%�(l� �@��(���RL���)n49H>��#8(������|0�@@*���9�7��H>��l�`�Da'���/,���+H����*\Ȱ�Ç#J�H��ŋ3j�ȱ�� C�I��ɓ(S�<���0cʜI��͛8s��ɳ�ϟ@� J��ѣH�����ӧP�J�J��ի/���ʵ�ׯ`ÊKS+ٳhӪ]��ٚ4����ݻx��Vfܹr�K����d= ��xf_��m�`�M��qZ�[7�f��;��<34�Ө�*^,s��~%ϥLY4M˟K��=,�ݿ{Cȝ��q��a&����hS�����Φ_�~]{��ۡ�c'-��p�w_�~h���a�Yz�ˢ�s��?�����݀� 蟀��m���;�_|L�G�g�5؟�m��� p��v� z���L��V�c`��e�߇���y� w�i�8$���Ơ�L���1��܍6z��y�x䑙�ȥ�'��$�"j��J����U�8�&uZb�e���`�昞��'��B�ޚ3��7FW�(vYgyy����h�u�ev���|f�袌�8�q,���8�Zjsڥ�*j�ª�45�+���Y�f*��&���)�쳮2��*m��f���v��i�~+�w���覫������+��`���AL���,�l�'���7���|L�Fl��g���p@ �,��R\�K����,��p��n5��4�l��x<r|<����sЊ@t�w��$�;4�L�vt�TW���!�k��R���և]���d��5�^C�v�ʍ�6af����s���_w 7�x�W�2�ͩm�۬�9���C�6�tO3d�#Q�S��}����E8�''��"n]�A ���Z�k����.��~{i>�t�<��u*��O�>s�����C�Y�Y��o���Tl��%�������U��<��/����<\� ���[��ݻ����8��O;������dE�K�{r��O��'�3�}�{ ��A�M�,����X� @��B�8P'd�N�� ��2�<��FCɅ��s���?�� ��cb�8�o~7l\ (A)�ć@1!eXEљLl�ۢ���>��O!# ͘���1,T����>��� I�B�O�����@tݑ(�3�$'I�JZ�D$sYG4>�+>,��pF�R�r`��'�f�Ov%��)gIK���b��']�7p�@-�IL��2+�l%/�K�1��*�4�y��ё��\fU�)0Y�2��4�Y�jq���&3}Y8��`��@8Q����Ȟ��X>�9Ns&3�� 7�)1x�S�����Ѕ�L����D�YL^S���F7�юzT�N�e��vO���>��D%�Ї���0�(E- 4�"�8ͩNw:Ȑ�����&���)�}iLz���T�4��f9.��u# ���w�xL�Nm�>�*T�>u�QE�Tg�n���X-(RMꁢ 0+]�X�*ֳ���s��2_IWi�E�C���:W��`x5�^��T����M�E�{=��gA�P;��:ӱ��T+��"��fm��k/kʴv��_9�@;ѦHJW]�H߉��F.�,+Y��O�֓���-6qJޞE����tBZ�F̸���x!&]�f���%v{���夻;�x�۰�r��mY�X|k$���� �)����3bĥnv�.R0�`�x*5��zW��ef7��?�z���z5'�D�a�wJ�E����0����opY�%�v?�^��VM�&|b��kn��9�tb)�7~p��Ds��� �WD��9eHv�`(@��.�Ve��i(�%�naC\�k�+NN�{d�5��e>3��WF�zX�|�� �:�$�MB�ZT�|�ca �)NS@���e��eɽv�������u��n�lx9�bl�IV�?M0��{ 5�F}?[�9�`���UK:-��4���ӌѕ����=�i��U�,#6ގ"�Z��^���<-��\�6/}1�2��&3�=�_�U�J��K��۞i�嚝\��+�.r�\�)פ�ֶPy�m���� �����pd.���t��?Jo��4�\��7�ڽ���8�,�� X����h�#��b�G��w�;>ف|��9� X��O�6����}�攝h�-V����<M����њf�ֱL��u�����G~v������O�§�n魉�O�̝ӱU2�[Jp|J=g%����u��{b���7f�>ޥ�����zջa�:��o����c=�wϰ�O��+=������a��;l�7ջ�D~�_K�S;��/�S��__����O~�OO�Jߘ���f�˔�d3�m���*Y�� ����z����}7���\Bu��WV�WJ�v�0�u�{�wN��D�7� �H��J�V��bp(~��b��8�%�~)Ӏ��1�~�7�Hu��y��淂'H�*�0Ȃ.8��>���xA��&�32Xm��|��t8�1��#h�Qx0J/X~O�o$�k�W�ghJS�}4�|چ�Y�1[�⇂C(�D��dh�fȆB��džJ��G���x�o�s1�gL}��W���yIx�L��d�1~X���4��W"��xJohkwZ�'ss'p!H��w�F{��2[h�����u�ȇP����������Ԋ�r['w�7� ��ODž�G��惿}Syz��h(f�xrHS��n���df\�x.t(�z7Y!�� v��m��ty�M�q�ȃ����wp�}%�/9CP6"����is9Ǎ�Vv!�|xw�d��)U,��c���q�r�Y����|r��t�O����s;Iv�x�&�z*�u-�u��x�[ő)r�6�P��7�`����f����7��wo�4����J� �M�Z{�te��T�M5�j��\�{^�� �d�o˸��U�g ~yx�'8v�W�$yjh�X�fZY�ui���Zg���O�@�Rw�qhLb9�DșWy?8]=H��癕y���g��Pry���ǚ_i�5���yf�����a��p��I[�)��G}ǩO����ٜ���D�|p��i������E��雓銟I�؉��ɛ�I_� 15�3��߉��9^�0�&���ɇ��e�:��:9`�I5�9�1V� sm� �l� �V�����6��a�K�� StB�u�֠�yw��\�P�砀ل ~bg�*Z��(�������թ��(� Z���ɓNY�y(�h�=I{3��5`�A\�U� ��'ʓ ��L���wI�y�K�M��7���ht-)���#*���jY�8i�^��Ç�D8��Y��y��R�FI% ��~�\��z�yZ��Y�I� ��*z���`y�sx�W�Ȩ��=ɖ�z�آ�J|�i���s��y.�z�&�% }���ّ���c��0��9�&W��:_�j|�YfhZ����㴬vج���\��*M�*���ں��ԭ�2�Z��D�}�犮�(�҄d��~����$���گ� ��:���2��~�� ����;�2U�Uh�00��+l��6�x)��0�Hg��i��8S ���ı�j�Z��"k � K�q:�'�O��.ò�Y�ï0�33K������*��e��G�˳��&EfC�z���wN����V)K��d��ׅ�/�;�����*�[*�Ok��Ȥf[}��VX{0Vz. ����vZ�wKDyK�{��}{J��A�5K�t��7YQe۸����IJ Z0q˵��H{��[�aK�P{��Y�����+��$���i��i�Ky������mHL;�U���fk0"��K���-�겝�����Rh��Ԟ�ټ�1Л����0�{�캹廱��۽껾4s�i����[����۳��b0 �S+h�ۿ C���������Ȋ�5��ʈ0�]�I�9+����2���\[+�Fk� |釨�+�R;��7�r%���E[��pK��9y�.:Ĥ��Z(�4�1%�+0Z�"۵,̂p9�pF���K^J�����s�L�r+�������6��x���#Ƣ�Ģ�.��ɸ�k��m����tl1vw@+��[�X��~��iYpW��2<��[��k�6�3��̵H�Ʃ[��(�G��vHȘl��\3�+����)z��(�w�J�q<��\�����k0L0�KJs�2��p�N,���3_���6��ƭ�3�+�ĊY�L��{ͬ��,����0�L������{�|�|�����wl��+��{�L0�w;��v��̿<�'<���,�����k���#�Ô%y��d ����(,�9��>�� �1Ҙ<�Ӹ�;l�����I�-=�]���2E���Sܯ7m����;�ί[�`� ɶ�r� �0��]������4��z,��l�;��=��?�28<T����\�W�յ�҅� ˟l�e��t]�\}�i-��<L�0������c��#h�h��-��|0�,сM����kM3����ּ����o��vMǓ-�e��Om�@�ڑMѫ�����е�3��������K��� ���%�_ �l��}Ә-ږ���;��P�i ��+�Х�#�כjq)<�)=[�I�����-�4m�U��y��Fl��ݧ����]0`��PL[K�m��l��jʃ&��|�]��͐d,�f��V�iL߁9�b˺����>]�Njǝ<֢��$�����+�"~0�M��ȡQ)���6̀��M���I�]�F>� ~�J�����l�yy⋭��K��y�4�����N�0������N���}����^�/i��>��o>0q>�g.�w~�m�@��\ڛ�M�����=�Y8�\�eл����������]��^�Bnm4��x�8[���!��M�Q�+\�:������3-����j��eߧ��|��\>�u�>{ϕ�N���@�Tm��8��N�؋��^�T��V���ȍ��s.��n�`>�������?:�{H����.��>�p}㴼��ޑ�+�̜ꬭ�G�}=�V<��^����ޱe|�S���������=y���^�#.{��m�A �� /�?�қ.S�K=�放��.c'��)ߚ|�n.�9���}�w��9�������nؽ����<��N�����i���B��To�M����[��KoJ�����N����.�o�%�� ��*`���3>���u?�zʧW������O�9������g���K�J�ێ���I���%�ߋ�r�(��x?���/ӝl�_��n�_�o�}�{m�?���ۇ��]��{� ,˱��~u����_�3��#��ݝ���j�.�?����~� ��-__/?�ӝ�J�f/��_�3ox����O��� ��/�����@T�@�� >�Q�ć&X�F�bR�H�%M�D�R�� �Y��@�c��S�N�=}�T�P�h4�P!Q�/fdȀ�T�,\�U�V�]�<zs&L�d�6E�V�Z�i��U:�l[�%bl��ի��x%ؘ5��[p.]ƍ?���r!S<�Y��x,��+�/V������+��2]�M���lڵKFJy�m�v�:��ChH�Hz$j��U?�ʺp�o.�]�v��Dž���E�|�(<���2� �yÐ�+�]?H�b�#�M<�$�6,<�����J=�:r�>�仏����P���돬���@O��@�,ێA���L���j���{�A�2���}��� ���QD2I�TO��|���"I��:����1H��DjD#KT�L3�b2A'!��!)�*��PC:���N/ӵ�ʚ�LA�)�ݴ{�����F�C��1K;�L�O�<�PO?��P��3���TWUU���J���2OL��TL@s�WAEUPЅ�HU.oEV�\��U1_�U�5�$���W�#�S2��@i�v�l��jYo� ���]y�ܶ5?a��]}k��D�E�z[�_vF�~��7�~�`];u��%�\1X�*�]�� �Y�-&���}m�.�:x���-غ�K�y��{M��b��g_��X�|k&���-�T��ꀾcu�9�$��n⡋ƚ���7�{�H��F�j�� 4k��ƸI��4o����n*���l��ym��L3��;h�i��v�%�<#���[����P�V��K]Yq���l�,�r�/g+������7�ME;�`&@���]'~V�%����d�Wf�m_�2u�[g��`� �^���~��S�Vw�ڡ��C?�R?�E巜��)�6�c&1p������0�q���Tf��h�u{S���������Lg@�l��{���}a�tD۟�'B��`t�ǴB�̅5$��%���Z�^�Ñ��b7�KHī1aHܗ��B��ЉO�a�%E�1��W���E~���s+&F p'z�����@��&'g4_ՈE���h���Ӻ���g����.62,�[���#�aǁ��Y���:��jU��"��ȷA-g��$�g��=2?�k�&�:�%2��l)q7��ǀ��h�y���|���m�G\22�E#O�f�έi��1g�JB��~�\&���g��3 ���3"�eO�=��S��L�.AH�, ����+��Ma6��xd==y�<����'��x��|�Y�L�Qu̱�C���A�'Y6���m�T���NzO��K� ��'��З�*��K�G 2��>-g��.���G%�O��B�B�$͠Ik��*Ҫg�*���п픦_�NX=�Tpqu�gE�m�J(���Sn-b\�4���M4���;S-�TU�`M*���UR|��2����"��<�_�4LZ�Z�4�iE�Z�UsE�ie-�ؒE3Ju\� �IK��m%<%gX�擵$s-^z��_>���m�K��J���E�e��Z7�i�\�J�+5�n��]�d�]II�Mg�[�~ӻݽm6I���W\���b�c�_����o��`Y�d�s�Q�{_���~��ۣ�APyR�19�\�ή�p]p[�;������0����ogĘ� s�b���X�-v1~;֜2�'�1Z^<]��o 2�'�6��Ճ4V�W��/���0�2��l�*��A3떹3��~Y�s��do3�qYќ�va�"�i7C2�{�����Ĉ(1#��[mOZSpB�7�c�L��.D�����Y�W�Y��5}�HSy�Z��)c��챒�CE^���\Q�� Nm�o3�(�v�+îC�`�����,&�uM�I�z�T'v�>����r��e_���t:��^y�֛�����n����*�;+�^� 8���m��;Ov�[ȼ#��i� kZ۟��?�����Lyw�Ȉ� C������m����Bu�I�q�D��䒱�G=g���w6��q��7�������q-��f/'4Pt��C��?�xsޫ���%z����?}'7���A�t���-� �',��n����1�=�@$ ��Ħ@��7�d?v�'��D �̝�/;'���lc;�z�۷�vS ���{�5���:������lt���눢|}�;��o^��ܩ�o�&{�?.=QN�2Rww�����}�.`Az����|/)�w��JD��/~�i_�t��h�|�z�����G�� j��'��M���c�n�-,�m�t�O��q��ӎ��?��p @��?$+@�9@pI��{����ڈ@3�@����X: \��j@�{���:�@� A��ٸ����[�'�@�5ýԉd�t�/��t�������#���z��z�t>|���P�8B��,?s�܃B����B`�+D�3DB�b��aCNÊ.,�/l�0�&��2�+��=�C5�7<�5�CƠ��;,C>T؋�+4�D���zC̸A,D�8�ꃈ;���KB,��kC.��A|�Ll�0L/��DP��$<7RܾSD� L:��>��EY|,xz���[��\�>�;��IW10,{4��D!���P�T14�T�F�� ̎b�EUd�$rDEs\t�3ћƮ�9vTw8�<zL{<u�Fd��~l� Ȃ4H�\|�;}D�d�H�HHK����JF���T������G dȦ����������Ya4�QH�I���VH���D��yI��I�`������I������J��#Ac�ɡ���s��X�ʭc˦����C�yH����,�r�����J� ߃��$K�\�bڨ� ��|��,Ae̬��K��&c;���ˣ��p�H�|Ȅ����sF�8L���6��"�H��J�-���O[�LLl�˓���J��l��\LӜ���͂T̀��y�L�:��Z�,@�;�|Gi$�n$��\+�G�$=�� &�;��;ylB�F�DN�RNCr��M �N��N�a��H9�N O�O� (O0O �N�$9��E"4�wzOѐ��|$ؙ��4���D�x���O����PC�͖�O�N1����O�#�Ѱg��4��I������P�+6Y���Z�ѻή<Q�P�K`�| �Oc���7X*Q��зL�͏m�Qˁ��ɃC��ɿ�G��F�ܱeLk�]�YL��F0c9/=Ƌt���^���������%}�&�S���;J��ܮ�M�C�-���tS?��T�M��SsT��TC:O�ش5=�t�7}ξS��䘶XB}��1�EmS/�T: N�RF�UV%2S����v��)lϋ�N��X5�`S���,V���nSV�t�:�!-R�t�բ��2T��O��*5қ��;��e�V(�S�Ĉ m�5S u3 ��nmW��tR ]��P"=ׂZ�NK�kYW]���:����!%T�R4W���#Nd�ƅKK�Qy}�lU�4%�QU/�V�J�E )uя0W{���D�N:VPmԔ=��tW2͈z]��DRaL�R�X��:�Ӂ�7a���)�H;�p���BM��Q���@��j�8IE���Z:�Z���M=U -�4;[�]�ބ���C�5�LE��G���a������U���| U��O7{V�����W�=9^ �!]\��-C\f���V�}�]H��9�U���O��&��M��Y0����V R]�E�]�ݬ�EuO� ���:-�,��U��U��U�߅ؗ�݉ ZɊ�Yˏ˝�̍�� Ґ��H�+E�M2���3 ���<�+�D�����;1�]���0����B� S�1���^�5 `+��(B����Z� sC�h�{`Z�Z#���K�E=ɵ;���� ֦�V�e���nU�MG^0^V3a�a��[y+���?���֙�`�/�ߧpV>�NV#����bb���e�Pr����M��L��/�M�x�]z�P: 9&�V!��֍��٤��;m�MC�g<^O��!�VQ�R�E�d_�mP���(´��⍵bLѰ��>��e�a���u/4�M5���mcp_��ߒ}�R��.��/�K�l%�-(K>6T��M�@��ٻ@`tS��fUe�)�@��A�Q��0h��[f&fDby�����>�f$�7��մ��r�b�Wh�d��,�}�r��(��f gK�g0�g�4��u����9�g�=�)�㦴�fN���l%b�Hg�Z�W-�`˭�u,hC���r��kg�eS�b��9b�cP�X8��3;��ԁ��Q����<x��?�Aƨ�c�v�E��0�]��䈝�i�Lη}.b���Fď _Q��%6��֏��'}�W����X�5��[Ê�,\�ݵ��8�^>#�u3j�j�K�'��cL�sZ�^h��n;�%���s�̬%j8r�úh?K�����QĞ<�LhFk�v�U$:�m��s�1<cJ�>jI�ץ�a����Θ�VٱJ����m\]�<n2�������l�3n�m����F�����un�nx�n��`��3]6駨��~n��n����-V��4��f�o|%��6�F���f�,�1�`�w�㽋�����n��i�\�G�Tj�`�ӎƋ%�m-��&��*�W� ������E&��)�P�g�w������������qe�Kh�.kj��+_dCK��G�Dv� ����_���������G��-��.��/�0�1'�.Om��`����Fۚ�$�T����F{��;��<��=��>��?�@��3���V��ϔ -��G�QA��I��J��K�tB���8N�hӢ�:��Q'�R7�S/MoH�e�O��P�)T��Y��Z�sUG��^��u[�`vK�u�4��_�eg�f��b��掘dWvg��kvh�Ji� j�ul�p�um����j�vqW�u�tr?�'{n��b�z�w@w�y���n_�oԺ���[g���m*7�^BpV�~?�o����|�kv�D3�Q����r�����,���'yt� z��g�*�w������y �R��w�����������/�>�y�Gzk�����fY$�����Gn�p������zf�v��n�f����7��w��>�<?��w{[� 8���z7��`G�������x����|Z���O�_r���S�{�w������?o���|R/|�7����7���Ч������ʿ�ԯ��?�9���{��ُz[K{ӿs�W��t�o�ͨ�/uЧ��W��s����s�G �~�~R'~��~�d�};g~��'��|�0��Q���g��/o@������@�^����w��z�`� Dx@!Ĉ'R�h�"ƌ7r���`�*<0�*�l��%̘2U��i�&Μ:w����J�52\��(ҤJ�2mjphȑ%uάj��I�Z�r���Ρ�:tj�,ڴj!BI�`V�r�ҭk�.O����/�.l�0�Ċ3n�_�Q�B�l�2�̚77��w-�ТGo�L�4�ԪW�n�Z��ײgӮm��Ӑc���7��uc���8��ʗ3o�9��ҧS�n���ڷs �;���Ǔ/o�<���׳o�=����ӯo�>��!�;PK㰐\���doc/UserManual/My.sqlnuȯ��select * from tbSysInfo PK㰐\�l?��%doc/UserManual/StarOfficeDataGrid.gifnuȯ��GIF87a�����x4 4x<(PP\\8d ||x H4 8X\8hphhHpppx|x������p���������������������(��������,����8����\�l>6@̘,��7��|H`>{�6`/�@����| @|��`/�@|�7 �@�a�����@@�Bj@�66/�@\��� |/ @�,��������H��7@@��57���@�t6�j��\�/���|| �@@�H�/>����/�\5>@��6����!�f@/�\�G������6�q@|<�7_���!�@�����|� ��@��=/ex��/\|\(�>�������!�@��c|| <f�����!@@�(5���$(������L���� @nXzp�#(�|$0���@��97H>�|�FDa'���/,���GH����*\Ȱ�Ç#J�H��ŋ3j�ȱ�Ǐ C�I��ɓ(3~Xɲ�˗0cʜI��͛8s��ɳ�ϟ@� J�(�F�*]ʴ�ӧP�J� )իX�j�ʵ�ף-��J��ٳh�b��R��,��K��ݻ_�~p�҂��xL��M�|WZ8q⯄�*��L�e�,1���啜;���3�Т�jn��sgͰSEM����u֖��u�؛o���x�Ō8�Y���+���:��Gg-z���M��o���in�i��z�I۳WO��[�K��fs�9']z��f��ib'o�e���R�`�ץ'_��!h!��e�L �����^y �� jx��61#w��"��(�}4�� � @. �X��d��AH�����!�ʷ�Wr�"y�����X��!�e���MVb#��Yg��9���i"�;� �*�x�Gc0��d��.u �L:ii�$�x&v{^YayqN)��bF(ۧk�i"�}�J�n��nG諮q�'�j (���go��I�|�d�ǀxpBv�E��LV[���ު�7�*���m�������n��8��f�e��� �/u� "��'�}ګ�+�G�������ׁ��e�k��b0��k/��6��iv:1� o8���Ӊ���n��뱯i�0z,XhXb� � � ���E�fR�����٪�N?�q�)W�nּ�ʱ�L&�I����Ok�n�v��fg�� ��EO6_�~Yk���襁��1����{�c��'�ά2^��2���,��r�v�>n߲n!�� ���>���`��X ȝ ��'���,��>�|�7�z��G_��`@X��K���W��o>^㟯���o�~���/�QV�`���������H��L��:�`�"H� Z�̠7�z��GH���(L!C@�υ��d�@�p�1� I����d!�8��""04���u8D#R�6�a{�DJ��M�����.�O�NLb��C��1��;��h�#�рl< �G/��`Lc��F�01��1"[�F%�����c�h�C"2�Stbq��>VґT��#/Y�J��x\ �vX�I�/���)��E�2�Y,� 8�Z°��t�*�7�V��� �8CH��-4&2_��E��τ#)KD2х�d�/��KnZ�˔�0�)Bb�R��$���^Ә��&-�)O>2��t';�9�x���'9�As�ӛ��&2a��L�s�a�'?w��|*� �hB*Pg�4h"s�ъ���e#}�ЄNԛ+�dLىRg2�����MA����T�2�hʠjq��l���Ȇ����fm�T�nR���VH̭z��.�X�(�D�f�g� mIK(fp�I-!\a9ֺ ��vͫ^��W�� ,A�*����*$,b���^�*��d'K��Z���ͬf7���z��� �hGK�Қ���M�jW�Y�(鵰���lgK�����ͭnw������ �p�K��W��M�r�K@�2��Ѕ�s���Z���ͮv����z��� �x�K^��@���!k�������|Ep���~C%��������{�����c̸�;�����%L��b����e��gqf�/l�GL����J�//��;b��Cz1-�Z�y�i�e�����Cr�y`!���Frlw� +ٸO�m�};e߶�,�pX (c����_��x���8?2�q�V�`#�ʯE����*�ٿoVp��<�ۢ&�Q�qhv��;�V��-��ܿ,Ñ������a���(sY�����Ӡ�2g.=�6/�s�h �Yի�3�Ok>�Y�q�2�kMk�2���b }?ɮ�җs3��<�:��~��&W[ֻ�5���d3��7ε�o n=�z��6���\hk#�ۀvr��|k[s������=����6�� ���������J7̙����l8��L��M-k'�����5�����z�n���U~�tә� o��c�jy���>��ō�\�w���se#��җ>l/'����_X�\ԟκ��]��x�;�v�S=t��]�`�ڃ^�\�o'��َ���fO{��>wU3:��n!ә�ƈ☕�(p_\�/��=�⍧���5��v�W{�u�{�G����2�|��M�����7���y����D��/��7=����ģ�_-*���:�+��ڋ]�|}��������y�C�p�|�<��؟��w>�}�W�p*�� �,���_���Q�������'}!}ԧ~��yBw~x�w�sxy?�yxv��r�F���׆t��~�ihY�G�|�7J�gq�i'���|��q�o�}8{�F�� &h�6p6Ho��}�&p�h��oFn��g;8�JnN(�v��:Dlb�`�fi�f�F)��'y�Ay1\ �`�dž6�bo�j?�_aiX�eą�����_�Kc���ւe�i~�u�i�xa�����yV�W(�d���_1F���td�.�|9���8��X�)�Yw�Ef���|�y�Xj�8��X���]�xC�u@�Y3]�(X�V�]�c�Ș��Xb�%������X��X�[5�֘��(L�%_�����8��X��(Y���긎�؎�[�([϶��X�\��f����?��7�u�[%��X������_��U�S i��E+�����9��� ��x���t�{�@�e9F�@^7�ْ���i����t�?#i?JA%�po�BZhl"�eiIZ�?5�v�� �9����<�AO��}��S�o4Y��ZHYWi��v�"5i�d�@�#��v�E] ԇ$�Dqf�0&iG��b� i��#��i�@l9��wdp�@a֖�hy8���zI�9��l`�Ŧ��Qi��T�Y�RN燤���&he�t�6f"�+9�^��b��� �%����BA�V����,H�ܶ��I�\Y ���S�Y�>�S�ϢA�ecB��)�g�scW�Cٜ���� 4�>IF��?�9D�1F� [ɘf�fՉ�8��^i� �')�v���?�ypف�q���b��dtag9��i��)�N�������U�(��3�7yO�#�>YL��c�נq�Mu䚔����{��[h�:X�y^<*�Z�j���f�T�F٠�i@,F�V)i���4x�ɟ�%�9�S���2��ii�����y�:E-Z�^z��W�����ƕ�WJN��jV�i�L�p z��yACz�|؞�,��_�&�s�EY��%H])�xx A��@�����qY��ʨ;�b/�b��I�����@r���Ԩ�W�.��^t���\u*C��a����Z����4���ګ@D���X�hC�z��j���{���H�bV^�z�ؚ�ں��ڭ����ʧ�X��z�蚮꺮����f�ua�8�hfh�z��(���h���c�*��JN���0�-����K�E�WK�� ���{��yZX��h��ڱ�@[� kX)��;ė K���'TT�ID�M�tI���D��e���M9��v����췲X�R�4U�$U)�E�%U-K�/+���W�(KR��$�S$d�|%KӴMF[WH��1ɧb�pu�@�DJX�H8�N[�&+Xy;R�kS%Xq��t˱w�;E�Q[�U��5�m�P%X�+| ˸�)�:�MX{Bj{��[U�X�l2�@��CL��M��<;��۸���CkM5uX��Y���K��[�;P�[���K�ژ�z���ʴ�鼟�Z�[�]��=����f�����[����+�} ��ھ����;��k�K�ƥ���0���k���z�ԋe�������p��0[��������|��Z�˫Ry8z@�f6wdCe�U�&c���s��.l[̽H�G���jvw��wb>�s)�v>���D\[1��1[�i�hw�v9g�6oS8�C<���z���~B~E�Ź��2,�4�xK܁����grڇ����'�=�o�z����nP�g�|��Zƀd�v�o�v�5�}j,r|<��ĉ�@��:��~��ya~$ȱ�՚k }?�Ȑhv�<sQ���´�r�gɖ��X�l���7\zrW��ˇ��r�s�\�w����~�Vʰ�²�b���fe� ��rv�+\�Rl�Ȅ9<��<��r�Ř��͌�����|[��j� ������F�Z�(�.���l\�<�ͣb̅�̧ۚ�=N�����+�-\}�,˒5j��ѿ��"����uk�%�-}�'=Y�Q�L\��'[���Km7�}/���c���cP��Ǽ�G��ԥ6Ԍ;v��r�\�! �IM��LݎN�����q*��9]�YMr���]��_�ea}@,�ָ��-��i�v]��m��o �*[~���WMΔ,�G����vHӬ�X։��Y��T���N�Dm��r�|�=��;���|י����؝���k���� �3[ر�bF}�M�2<�߫��E��Ǽ�������Iŭ�ZA�=�ҿ��\��J�ӝ�}��� ���]}��D�]�-=��A�m��轧j������� ���뜎�t߇����-m��^��_~�~� �D��� >��]���������������� �&��"�q~�,^�)b+��2N�/.��=�8^�5��7��>�;�k��D�AN�cZ�J>bG�K��;PK㰐\�.��kIkIdoc/UserManual/index.htmlnuȯ��<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8"> <TITLE></TITLE> <META NAME="GENERATOR" CONTENT="OpenOffice.org 2.0 (Linux)"> <META NAME="AUTHOR" CONTENT="Peter Harvey"> <META NAME="CREATED" CONTENT="20070322;14575800"> <META NAME="CHANGED" CONTENT="16010101;0"> <STYLE> <!-- TD P { color: #000000 } P { color: #000000 } A:link { color: #0000ef } A:visited { color: #51188e } --> </STYLE> </HEAD> <BODY LANG="en-US" TEXT="#000000" LINK="#0000ef" VLINK="#51188e" BGCOLOR="#ffffff" DIR="LTR"> <P STYLE="margin-bottom: 0in"><IMG SRC="unixODBC.gif" NAME="graphics1" ALIGN=BOTTOM WIDTH=32 HEIGHT=32 BORDER=0><FONT SIZE=7><FONT FACE="Arial, Helvetica">unixODBC</FONT></FONT> </P> <HR> <P ALIGN=CENTER><FONT FACE="Arial, Helvetica"><FONT SIZE=5><B>USER MANUAL</B></FONT></FONT></P> <P><BR><BR> </P> <P><FONT FACE="Arial, Helvetica">Welcome to the unixODBC User Manual. This manual is targeted toward people who will be using unixODBC to access data sources from tools and applications which have been developed by others. This manual compliments the <A HREF="../AdministratorManual">Administrator Manual</A> and the <A HREF="../ProgrammerManual">Programmer Manual</A>, each of which is geared for a more technical audience.</FONT> </P> <P><B><FONT SIZE=4><FONT FACE="Arial, Helvetica">Getting Started</FONT></FONT></B> </P> <P><FONT FACE="Arial, Helvetica">At this point unixODBC has been installed by your System Administrator. Your System Administrator should have installed and registered at least one ODBC Driver (we will assume that the ODBC Text File Driver has been installed). Your System Administrator accomplished this by following the directions laid out in the Administrator Manual.</FONT> </P> <P><FONT FACE="Arial, Helvetica">You will need an account on the UNIX/Linux machine; this is also provided by your System Administrator. In fact, if you run into problems at any point in this manual then you should refer to your System Administrator to ensure that all required software is installed, accounts given and privileges granted. You may also want to talk to your Database Administrator (DBA) to ensure that you have access to your database and to resolve any questions about which driver to use and what options to set.</FONT> </P> <P><FONT FACE="Arial, Helvetica">UNIX users can be given a wide variety of methods to access their account resources and these access methods usually fall into one of two categories.</FONT> </P> <P><FONT FACE="Arial, Helvetica">1. shell account (telnet and terminal sessions)</FONT> <BR><FONT FACE="Arial, Helvetica">2. graphical desktop</FONT> </P> <P><FONT FACE="Arial, Helvetica">If you are limited to a shell account then you will not be able to use the ODBCConfig and the DataManager tools.</FONT> </P> <P><FONT FACE="Arial, Helvetica">We are now ready to start using the unixODBC tools. The first thing you should do is verify that you have a working System DSN. If you do not; then you should create a User DSN. These tasks can be accomplished using the ODBCConfig tool.</FONT> </P> <P><B><FONT SIZE=4><FONT FACE="Arial, Helvetica">Using ODBCConfig</FONT></FONT></B> </P> <P><FONT FACE="Arial, Helvetica">The ODBCConfig tool is designed to allow you to easily setup a Data Source (DSN). DSN's act as an access point for getting to your data. In many cases; creating a DSN is as simple as picking a Driver to use, selecting a Server, and entering a Name for the DSN. In fact; DSN stands for Data Source Name.</FONT> </P> <P><FONT FACE="Arial, Helvetica">You should find using the ODBCConfig tool to be quite intuitive because of the simple Graphical User Interface (see Figure 1) but you must understand a few terms before getting started.</FONT> <BR> </P> <CENTER> <TABLE BORDER=1 CELLPADDING=2 CELLSPACING=2> <TR> <TD> <P><BR> </P> </TD> </TR> <TR> <TD> <P ALIGN=CENTER>Figure 1</P> </TD> </TR> </TABLE> </CENTER> <P><B><I><FONT FACE="Arial, Helvetica">User DSN</FONT></I></B> </P> <P><FONT FACE="Arial, Helvetica">These are your personal Data Sources. You are able to; Add new ones, Remove existing ones, and Configure existing ones. User DSN information is stored in a secret location where only you can access them. Keeping your User DSN's separate from other User DSN's allows you a great deal of flexibility and control over creating and working with Data Sources which are only important to you.</FONT> </P> <P><B><I><FONT FACE="Arial, Helvetica">System DSN</FONT></I></B> </P> <P><FONT FACE="Arial, Helvetica">These are created by the System Administrator. They act very much like the User DSN's but with three important differences.</FONT> </P> <P><FONT FACE="Arial, Helvetica">1. ONLY the System Administrator can; Add, Remove and Configure System DSN's.</FONT> <BR><FONT FACE="Arial, Helvetica">2. System DSN's will be used only if the DSN does not exist as a User DSN. In other words; your User DSN has precedence over the System DSN.</FONT> <BR><FONT FACE="Arial, Helvetica">3. Everyone, logged into the ODBC enabled computer, shares the same list of System DSN's.</FONT> </P> <P><B><I><FONT FACE="Arial, Helvetica">Drivers</FONT></I></B> </P> <P><FONT FACE="Arial, Helvetica">Drivers contain the special code required to talk to the specific type of database you will work with. The Drivers often come from the vendor of the database but may also be found in the unixODBC package. Your System Administrator is the only user who can install and register a Driver. You will select a Driver to use when adding a new DSN.</FONT> </P> <P><B><I><FONT FACE="Arial, Helvetica">Add a DSN</FONT></I></B> </P> <P><FONT FACE="Arial, Helvetica">You will want to ensure that you have at least one working DSN. Here is a quick step-by-step guide to creating your first User DSN. We will not actually use it yet because that will involve using other tools and we have not talked about them yet.</FONT> </P> <P><FONT FACE="Arial, Helvetica">1. Execute ODBCConfig</FONT> </P> <P><FONT FACE="Arial, Helvetica">This can be done in a variety of ways. If you know that you have an icon or menu item for ODBCConfig on your desktop then execute it using one of these methods. If you do not; then start a shell and enter the command <FONT COLOR="#cc33cc">ODBCConfig</FONT><FONT COLOR="#000000">. You should see a window popup (see Figure 1).</FONT></FONT> </P> <P><FONT FACE="Arial, Helvetica"><FONT COLOR="#000000">2. Add</FONT></FONT> </P> <P><FONT FACE="Arial, Helvetica"><FONT COLOR="#000000">Click on the User DSN tab to ensure that you are working with User DSNs. Click on the Add button. Select a Driver from the list. If the list is empty then contact your System Administrator; only the System Administrator can add Drivers. For this example we will try to use the Text File Driver. Select the Text File Driver if you have it available.</FONT></FONT> </P> <P><FONT FACE="Arial, Helvetica"><FONT COLOR="#000000">3. Edit Options</FONT></FONT> </P> <P><FONT FACE="Arial, Helvetica"><FONT COLOR="#000000">You should be presented with a list of DSN options which you can edit. Figure 2 shows the options for the Text File Driver but you may have a different set of options if you selected a different driver. Common options are; Name (a unique name must be entered). Description, Trace and TraceFile.</FONT></FONT> <BR> <BR> </P> <CENTER> <TABLE BORDER=1 CELLPADDING=2 CELLSPACING=2> <TR> <TD> <P><BR> </P> </TD> </TR> <TR> <TD> <P ALIGN=CENTER>Figure 2</P> </TD> </TR> </TABLE> </CENTER> <P><FONT FACE="Arial, Helvetica"><FONT COLOR="#000000">Enter a unique name, enter a comment, turn Trace off and click Ok to save it. You may click on Configure, at the main window, to come back to these options at any time in the future. Notice that the Database in Figure-2 is /home/pharvey/test.db. You should ensure that this points to something like; /home/YourLoginID/test.db where you replace YourLoginID with your ID. The test.db file should not already exist (for the purposes of this excercise); it will be created for you. This is how to create a new database using the ODBC Text File Driver.</FONT></FONT> </P> <P><FONT FACE="Arial, Helvetica"><FONT COLOR="#000000">4. Your Done</FONT></FONT> </P> <P><FONT FACE="Arial, Helvetica"><FONT COLOR="#000000">Notice that you now have your new DSN listed in the main form. This means that you can try to use it in any tool or application which uses ODBC DSNs for data access. This includes many applications such as Word Processors and Spread Sheets. You may want to test your DSN using the DataManager.</FONT></FONT> </P> <P><B><I><FONT FACE="Arial, Helvetica"><FONT COLOR="#000000">Summary</FONT></FONT></I></B> </P> <P><FONT FACE="Arial, Helvetica"><FONT COLOR="#000000">ODBCConfig is a useful tool for PowerUsers but it is simple enough for almost any user to use. ODBCConfig exposes the most important reason for using ODBC to access your data; the ability for you or your System Administrator to change the Data Source for your tools and applications. Please take some time to get familiar with ODBCConfig and your Driver options, perhaps sit with someone who is a bit more technical and talk about it for one or two minutes. You will be rewarded.</FONT></FONT> </P> <P><B><FONT SIZE=4><FONT FACE="Arial, Helvetica">Using DataManager</FONT></FONT></B> </P> <P><FONT FACE="Arial, Helvetica">The DataManager is a great, graphical, tool for exploring your Data Sources. It allows you to explore you Data Sources in a similar manner to exploring your file system. The DataManager ( see Figure 6 ) is split into two views. On the left hand side you have a Tree View'. The Tree View is where you can drill down to the information that interests you. On the right hand side you have a Detail View. The Detail View shows any details that may be available for the selected item in the Tree View.</FONT> </P> <P><FONT FACE="Arial, Helvetica">Just like ODBCConfig, you can execute the DataManager in a variety of ways. One way is to go to a shell and enter the command <FONT COLOR="#cc66cc">DataManager</FONT>. This should bring up a window that looks similar to Figure 6.</FONT> <BR> </P> <CENTER> <TABLE BORDER=1 CELLPADDING=2 CELLSPACING=2> <TR> <TD> <P><BR> </P> </TD> </TR> <TR> <TD> <P ALIGN=CENTER>Figure 6</P> </TD> </TR> </TABLE> </CENTER> <P><FONT FACE="Arial, Helvetica">Next; expand the nodes to drill down to the information that interests you. You will be asked to login if you try to drill past a Data Source. If this happens, enter the login ID and Password provided by your Database Administrator or System Administrator. You will know that you are logged in when the little computer screen changes from Red to Green.</FONT> </P> <P><FONT FACE="Arial, Helvetica">One of the interesting Detail Views occurs when you select a Data Source item in the Tree View when you are logged into it (the little computer screen is Green). The Detail View is an SQL editor. This is only useful if you know the SQL command language but for those that do... it can be very handy.</FONT> </P> <P><B><I><FONT FACE="Arial, Helvetica">Summary</FONT></I></B> </P> <P><FONT FACE="Arial, Helvetica">The DataManager tool is a good way to test a DSN and then to see what resources are available inside the Data Source. It is also very easy to use.</FONT> <BR> </P> <P><B><FONT SIZE=4><FONT FACE="Arial, Helvetica">Using isql</FONT></FONT></B> </P> <P><FONT FACE="Arial, Helvetica">This is a command line tool. This means that you can use it even if you are not working on a Graphical Desktop (for example; in a telnet session). This tool is designed for more advanced uses of unixODBC. You can use isql to test a connection but it is designed to be used by those experienced with the Structured Query Language (SQL). You probably will not want to use this tool if you are unfamiliar with SQL.</FONT> </P> <P><FONT FACE="Arial, Helvetica">isql allows you to;</FONT> </P> <P><FONT FACE="Arial, Helvetica">1. connect to your Data Source (using a DSN)</FONT> <BR><FONT FACE="Arial, Helvetica">2. send SQL commands to the Data Source</FONT> <BR><FONT FACE="Arial, Helvetica">3. receive results from the Data Source</FONT> </P> <P><FONT FACE="Arial, Helvetica">This tool can act in batch mode or interactive mode. Figure 3 shows a simple, interactive, session.</FONT> <BR> <BR> </P> <CENTER> <TABLE BORDER=1 CELLPADDING=2 CELLSPACING=2> <TR> <TD> <P><BR> </P> </TD> </TR> <TR> <TD> <P ALIGN=CENTER>Figure 3</P> </TD> </TR> </TABLE> </CENTER> <P><FONT FACE="Arial, Helvetica">Figure 4 shows an example of isql being used in batch mode. Notice that it is being told to run a similar query as above but this time it is coming from a file ( My.sql ).</FONT> <BR> <BR> </P> <CENTER> <TABLE BORDER=1 CELLPADDING=2 CELLSPACING=2> <TR> <TD> <P><BR> </P> </TD> </TR> <TR> <TD> <P ALIGN=CENTER>Figure 4</P> </TD> </TR> </TABLE> </CENTER> <P><FONT FACE="Arial, Helvetica">The example, in Figure 4, is also formatting the results into an HTML table and is sending them to a new file ( My.html ). Figure 5 shows the resulting html table.</FONT> <BR> </P> <CENTER> <TABLE WIDTH=679 BORDER=1 CELLPADDING=2 CELLSPACING=3 FRAME=VOID RULES=COLS> <COL WIDTH=0> <COL WIDTH=118> <COL WIDTH=118> <COL WIDTH=104> <COL WIDTH=136> <COL WIDTH=158> <COL WIDTH=0> <TBODY> <TR> <TD COLSPAN=7 WIDTH=669></TD> </TR> <TR> <TD ROWSPAN=4 WIDTH=0 VALIGN=TOP></TD> <TD WIDTH=118 BGCOLOR="#000099"> <P><FONT COLOR="#ffffff"><FONT FACE="Arial, Helvetica">vcCompanyName</FONT></FONT></P> </TD> <TD WIDTH=118 BGCOLOR="#000099"> <P><FONT COLOR="#ffffff"><FONT FACE="Arial, Helvetica">vcCompanyStreet</FONT></FONT></P> </TD> <TD WIDTH=104 BGCOLOR="#000099"> <P><FONT COLOR="#ffffff"><FONT FACE="Arial, Helvetica">vcCompanyCity</FONT></FONT></P> </TD> <TD WIDTH=136 BGCOLOR="#000099"> <P><FONT COLOR="#ffffff"><FONT FACE="Arial, Helvetica">vcCompanyProvince</FONT></FONT></P> </TD> <TD WIDTH=158 BGCOLOR="#000099"> <P><FONT COLOR="#ffffff"><FONT FACE="Arial, Helvetica">vcCompanyPostalCode</FONT></FONT></P> </TD> <TD ROWSPAN=4 WIDTH=0 VALIGN=TOP></TD> </TR> </TBODY> <TBODY> <TR> <TD WIDTH=118> <P><FONT FACE="Arial, Helvetica">XYZ Company</FONT></P> </TD> <TD WIDTH=118> <P><FONT FACE="Arial, Helvetica">XYZ Street</FONT></P> </TD> <TD WIDTH=104> <P><BR> </P> </TD> <TD WIDTH=136> <P><BR> </P> </TD> <TD WIDTH=158> <P><BR> </P> </TD> </TR> </TBODY> <TBODY> <TR> <TD WIDTH=118> <P><FONT FACE="Arial, Helvetica">Another Company</FONT></P> </TD> <TD WIDTH=118> <P><BR> </P> </TD> <TD WIDTH=104> <P><BR> </P> </TD> <TD WIDTH=136> <P><BR> </P> </TD> <TD WIDTH=158> <P><BR> </P> </TD> </TR> </TBODY> <TBODY> <TR> <TD WIDTH=118> <P><FONT FACE="Arial, Helvetica">CodeByDesign</FONT></P> </TD> <TD WIDTH=118> <P><BR> </P> </TD> <TD WIDTH=104> <P><BR> </P> </TD> <TD WIDTH=136> <P><BR> </P> </TD> <TD WIDTH=158> <P><BR> </P> </TD> </TR> <TR> <TD COLSPAN=7 WIDTH=669></TD> </TR> <TR> <TD COLSPAN=7 WIDTH=669> <P ALIGN=CENTER>Figure 5</P> </TD> </TR> </TBODY> </TABLE> </CENTER> <P><B><I><FONT FACE="Arial, Helvetica">Summary</FONT></I></B> </P> <P><FONT FACE="Arial, Helvetica">isql is a powerful tool for working SQL to access your Data Source but it is more for the advanced user.</FONT> </P> <P><B><FONT SIZE=4><FONT FACE="Arial, Helvetica">StarOffice 5</FONT></FONT></B> </P> <P><FONT FACE="Arial, Helvetica">StarOffice is an application similar in goals to MS Office. A free version, for non-commercial use, can be downloaded from <A HREF="http://www.stardivision.com/">StarDivisions web site</A>. Figure 7 shows a PostgreSQL table being browsed in StarOffice. StarOffice can use ODBC data but it can be tricky to get going. Here are some things to note about using StarOffice with unixODBC. Make sure that unixODBC is installed on your machine before trying to use StarOffice ODBC on UNIX.</FONT> <BR> </P> <CENTER> <TABLE BORDER=1 CELLPADDING=2 CELLSPACING=2> <TR> <TD> <P><BR> </P> </TD> </TR> <TR> <TD> <P ALIGN=CENTER>Figure 7</P> </TD> </TR> </TABLE> </CENTER> <P><FONT FACE="Arial, Helvetica">Q. StarOffice disappears when I try to load a list of ODBC DSNs and I get an error in my terminal window about some library file missing?</FONT> </P> <P>A. If you have StarOffice 5.0 you may want to try adding this to your soffice start script <I><B>export LD_PRELOAD=/usr/lib/libodbc.so</B> </I>Your soffice start script can be found in <B><I>Office50/bin/soffice</I></B>and can be edited with any text editor. If you are not sure of where libodbc.so is or where soffice is then you may want to use the UNIX <B><I>find </I></B>command. </P> <P>However with the release of StarOffice 5.1 and beyond all you need to do is to add the path to the libodbc.so to either /etc/ld.so.conf or to your LD_LIBRARY_PATH environment variable. </P> <P>Q. Do all ODBC drivers work with StarOffice? </P> <P>A. No. StarOffice is very demanding upon an ODBC driver. StarOffice needs many ODBC features in order to accept a driver. Two drivers which are known to work are; 1. PostgreSQL and 2. MySQL. People are actively working on other drivers. </P> <P><B><I><FONT FACE="Arial, Helvetica">Summary</FONT></I></B> </P> <P><FONT FACE="Arial, Helvetica">StarOffice is a rising 'star' in the UNIX world. You can combine StarOffice with unixODBC to get at your data. With StarOffice and unixODBC you can pull your data into a Spreadsheet, Word Processor or even create Web forms based upon your data.</FONT> </P> <P><B><FONT SIZE=4><FONT FACE="Arial, Helvetica">Conclusion</FONT></FONT></B> </P> <P><FONT FACE="Arial, Helvetica">unixODBC comes with a variety of useful and powerful tools to allow you to configure you ODBC access and to work with your ODBC data. Familiarity with these tools is a great start to using your ODBC in applications such as word processors, spreadsheets and even applications developed at your company of employ. I hope you enjoy them! Please email comments and/or suggestions to me, <A HREF="mailto:pharvey@codebydesign.com">Peter Harvey</A>.</FONT> </P> <HR> <P><BR> <BR> </P> </BODY> </HTML>PK㰐\Z��!ZZdoc/UserManual/unixODBC.gifnuȯ��GIF89a ��������l����������!�NETSCAPE2.0!�Made with GIMP!� , ����Ig���ͷ��ԍ�$Y}R����/L�w��[������JB�CŒ�]�C�F�5���O.ϫ"��1�3{��c�Jyゼ>ov[�{z}!vJ�{�[��|fDb��r+�;����W����Z=���p`��������u��a�n��1& g������ä�� !� , ����0�I�8�Z/�� J\�}���dy�B�����<�u��;��yy�tM�˘��R@���A����5'�Ëq�3�����-}�/����.�&siX�_f�Vc`BiP^��Y��7����2������I���{i����V���&��v_������������o�� !� , ����0J� Q+��&n�GUD0��������s����ݪF�łBQ�2�â(C�z�i��Y���BsU��˱�<���_�o���-�i���%q8[���\m������)����lv5��.������xv����)���F��D������[��������w&y%&�� !� , ��I��x��Y�Di�^X��颛*�o]�ag�~鼝�� �3����'20��F׀���>Q��`���Oo���N���j�o�ܜ�1T{}ux �s�~�8��"�dz����{|p��D�^p�[]�������^�y����M��w��������������IŗȬ�Ɯ2#md�2l#�;PK㰐\1��( ( doc/lst/InternalStructure.gifnu�[���GIF89a����@�� @ � �@@@@�@�``@`�`���@������@������@������@���� @ � � @ � � @ @@ @� @� ` `@ `� `� � �@ �� �� � �@ �� �� � �@ �� �� � �@ �� ��@@@@�@�@ @ @@ �@ �@@@@@@@�@@�@`@`@@`�@`�@�@�@@��@��@�@�@@��@��@�@�@@��@��@�@�@@��@��``@`�`�` ` @` �` �`@`@@`@�`@�````@``�``�`�`�@`��`��`�`�@`��`��`�`�@`��`��`�`�@`��`����@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@������!��,��@�� H����*\Ȱ�Ç#J�HQ ��3j�8�"� C���q�ɓ$?�\��ǖ03��I�̚U�,xs�O�% �t�Q�=W�\��)͙��*ujͪD�Z��ukˮ��,ٓf#�M{��[�k�ʝ���ݻlՎ5���ݿ#o �Ugݔ�o�˸q^Ő�ʍL�2O��3{}�����=74��NШ�X�#fĨcstL{���0'��-�5��e��>�4��|�5��bB���vN�z�밣kOY�����/�O^���vF�=�g�IS7������e�B�߀��'���!�Z*���A8�o\18����G�x�Iׅ��؇���bx����ȝV�7"{�H������a�����M�_���h"�∤ft-i�Nfb�F�"����#�C�g�I�]�TIFR�e�X�y�mj�hf�R��TXi¹����і>ڹ�u�i�����d����f��F���VihZv���CF ���i�iE�*�ީIhb�ޖ�_��֪]����!���ꖭL������O��z'OB�_�W"+��~���S����MM�gQ�j�nX�����ʙmt�.��2����V�U*���������o���+�TY(0�o:)���^`��f���m��}�n��� _�e�z�q�"�1��L���|�*��r�.�����SZ\>j�UZ�0�"C�����k9�I#�G�)$�|z�t�&�D��V�u�0n-�^��n�3_Mv�4�{v�>�f��l�s�A�94�D�4��J�����u�i 8�iw}8No/�#^s�CMN���o��ڗ�=گ e�~w8�y��Tޢ�*$�mz�Ou�o�����;��O3��"���6�2���θ��B����R���7j/l��/��ޯ�����<~��Z����~�ݷ��\c�8���_^�g���R�����@�XnC�z(������rMѾ�.�f������|����9*q.z,�͛^(>>J��1�M46��P)�X���>x:�i�b�����A&�^��B�C)�'^�2�s�����2��q�]鐲45z.>�u��5Α�k#�w8�U�G��Ha��$�5l>�t�Ƹ��]����� ɾB� t��0�1J��v�]��;�1x�<eS�EB�у�d,c9�(Ҳ���%��K\zn��e-] 8� �c�f�F̓qF\�,��:��5*�H�c��iȇ�.�$���&IՅ3��<Z)�IB�$�^�[��9n��[����ٷ2s��4�2�wL�4S��,h��PjV����%D�&ĉҎ���A'�}t��g�2����m`�%�H�ǀvS����K�l2lu� �V��J�u�cO$����ES�YOM�RL<��H7f�svI��s$V5%ЌZͫ�4)�* ֒b��$+X�V����K��A�ڻ����K�W�ZS\q,�T5jǽ����V��3p�4�*����1ٵ��$bU��`�e��Sk&�T���!�_=JՈ)����aA�L��6<;PK㰐\�����doc/lst/InternalStructure.htmlnu�[���<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta name="GENERATOR" content="Mozilla/4.5 [en] (X11; I; Linux 2.0.35 i586) [Netscape]"> <title>LST - Doubly Linked List</title> </head> <body bgcolor="#FFFFFF"> <center><b><font face="Arial,Helvetica"><font size=+1>LST</font></font></b> <br><b><font face="Arial,Helvetica"><font size=+1>Doubly Linked List</font></font></b> <hr WIDTH="100%"> <br><img SRC="InternalStructure.gif" ALT="LST - Doubly Linked List" BORDER=0 height=252 width=207> <br> <hr WIDTH="100%"></center> <b><font face="Arial,Helvetica">Description</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">This diagram depicts a single, doubly linked, list with 4 items. The actual data being stored in each item is pointed to by pData. Doubly Linked lists are great for storing things in memory. LST makes working with a linked list very easy. The following pages will describe more advanced features of LST such as cursors.</font><font face="Arial,Helvetica"></font> <p><b><font face="Arial,Helvetica">Related Functions</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">lstOpen, lstClose, lstAppend, lstFirst, lstEOL, lstNext, lstGet</font> <br> <hr> <center><a href="InternalStructure2.html"><img SRC="next.gif" ALT="[Next]" BORDER=0 height=32 width=32></a> <p>Page 1 of 9</center> </body> </html> PK㰐\n,��doc/lst/InternalStructure.vsdnu�[�����ࡱPK㰐\�w���doc/lst/InternalStructure2.gifnu�[���GIF89a����@�� @ � �@@@@�@�``@`�`���@������@������@������@���� @ � � @ � � @ @@ @� @� ` `@ `� `� � �@ �� �� � �@ �� �� � �@ �� �� � �@ �� ��@@@@�@�@ @ @@ �@ �@@@@@@@�@@�@`@`@@`�@`�@�@�@@��@��@�@�@@��@��@�@�@@��@��@�@�@@��@��``@`�`�` ` @` �` �`@`@@`@�`@�````@``�``�`�`�@`��`��`�`�@`��`��`�`�@`��`��`�`�@`��`����@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@������!��,��@�� H����*\Ȱ�Ç#J�H��ŋ3j�ȱ�? =� �ȓ(E6H���ʖ0=��I��̚8s|���N�@��s(ѣy"��t�Q�NYB�JbӪ'�b-PK㰐\����doc/lst/InternalStructure2.htmlnu�[���<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta name="GENERATOR" content="Mozilla/4.5 [en] (X11; I; Linux 2.0.35 i586) [Netscape]"> <title>LST - Cursor - Add B</title> </head> <body bgcolor="#FFFFFF"> <center><b><font face="Arial,Helvetica"><font size=+1>LST</font></font></b> <br><b><font face="Arial,Helvetica"><font size=+1>Cursor</font></font></b> <br><b><font face="Arial,Helvetica"><font size=+1>Add B</font></font></b> <hr WIDTH="100%"> <br><img SRC="InternalStructure2.gif" ALT="LST - Cursor - Add B" BORDER=0 height=247 width=431></center> <hr WIDTH="100%"> <br><b><font face="Arial,Helvetica">Description</font></b> <p><font face="Arial,Helvetica">This diagram depicts a cursor (B) which is based upon the root list (A). The cursor was created with a call to lstOpenCursor(). This cursor contains a subset of items from the base list because a filter function was provided. Cursors can be manipulated using the same functions as a normal list and they are closed with a simple call to lstClose().</font> <p><font face="Arial,Helvetica">The pData in cursor items refer directly to the corresponding item in the root list. Reference counters are increased in the base list (A) and in each item. This prevents underlying data from being deleted while a derived cursor is still in use.</font> <p><b><font face="Arial,Helvetica">Related Functions</font></b> <p><font face="Arial,Helvetica">lstOpenCursor</font> <br> <hr> <center><a href="InternalStructure.html"><img SRC="back.gif" ALT="[Back]" BORDER=0 height=32 width=32></a><a href="InternalStructure3.html"><img SRC="next.gif" ALT="[Next]" BORDER=0 height=32 width=32></a> <p>Page 2 of 9</center> </body> </html> PK㰐\��qdoc/lst/InternalStructure3.gifnu�[���GIF89a����@�� @ � �@@@@�@�``@`�`���@������@������@������@���� @ � � @ � � @ @@ @� @� ` `@ `� `� � �@ �� �� � �@ �� �� � �@ �� �� � �@ �� ��@@@@�@�@ @ @@ �@ �@@@@@@@�@@�@`@`@@`�@`�@�@�@@��@��@�@�@@��@��@�@�@@��@��@�@�@@��@��``@`�`�` ` @` �` �`@`@@`@�`@�````@``�``�`�`�@`��`��`�`�@`��`��`�`�@`��`��`�`�@`��`����@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@������!��,��@�� H����*\Ȱ�Ç#J�H��ŋ3j�ȱ�Ǐ C�i�I�()����� ^�ds�M�5o��s�ω+�*�(ĞF["M���Ҧ#�BeJt�ȪV�J��q+ן^�f+v�əXe�-+�,ȕ,u�e�r�Ǹ�ʴK�ڏU���{��߾o c�[��`�J�l@9'��x�,�����n]�4ƥ�MWL�� �ֆg�,�e��m������pa��H{���zu#�+�.k�NGǽ�����C�{���G�{��]uy��%�'}~}_��^�X|����7�?�~�1Uv߀���C�`Bsu�����|Fx_�ah����ᇮH�c��vQ� bb��F�}V�}+�W"����b�U�a�"cu8�$l3&���,�x$b�u��rQi�K^Y��SjI��`R�$�a�e�=�蝏?���vcnGVq ��&LjF5�����&& Տv�єlz�QX����mg����zg�D��cu�>Xh����CPK㰐\j��A{{doc/lst/InternalStructure3.htmlnu�[���<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta name="GENERATOR" content="Mozilla/4.5 [en] (X11; I; Linux 2.0.35 i586) [Netscape]"> <title>LST - Cursor On Cursor - Add C</title> </head> <body bgcolor="#FFFFFF"> <center><b><font face="Arial,Helvetica"><font size=+1>LST</font></font></b> <br><b><font face="Arial,Helvetica"><font size=+1>Cursor On Cursor</font></font></b> <br><b><font face="Arial,Helvetica"><font size=+1>Add C</font></font></b> <hr WIDTH="100%"> <br><img SRC="InternalStructure3.gif" ALT="LST - Cursor On Cursor - Add C" BORDER=0 height=247 width=647> <br> <hr WIDTH="100%"></center> <b><font face="Arial,Helvetica">Description</font></b> <p><font face="Arial,Helvetica">This diagram depicts a cursor (C) which is based upon another cursor (B). It shows how a list can be incrementally reduced using calls to lstOpenCursor() with a filter function.</font> <p><font face="Arial,Helvetica">Notice that the item (C1) is a direct reference to the root list (A) even though the cursor is based upon (B).</font> <p><b><font face="Arial,Helvetica">Symantics</font></b> <p><font face="Arial,Helvetica">(B) and (C) are cursors.</font> <p><font face="Arial,Helvetica">(C) is based upon (B).</font> <p><font face="Arial,Helvetica">(B) is the base list for (C).</font> <p><font face="Arial,Helvetica">(A) is the root list for (B) and (C).</font> <p><font face="Arial,Helvetica">(A) is the base list for (B).</font> <p><b><font face="Arial,Helvetica">Related Functions</font></b> <p><font face="Arial,Helvetica">lstOpenCursor()</font> <p> <hr> <center><a href="InternalStructure2.html"><img SRC="back.gif" ALT="[Back]" BORDER=0 height=32 width=32></a><a href="InternalStructure4.html"><img SRC="next.gif" ALT="[Next]" BORDER=0 height=32 width=32></a> <p>Page 3 of 9</center> </body> </html> PK㰐\Dq����doc/lst/InternalStructure4.gifnu�[���GIF89a�&��@�� @ � �@@@@�@�``@`�`���@������@������@������@���� @ � � @ � � @ @@ @� @� ` `@ `� `� � �@ �� �� � �@ �� �� � �@ �� �� � �@ �� ��@@@@�@�@ @ @@ �@ �@@@@@@@�@@�@`@`@@`�@`�@�@�@@��@��@�@�@@��@��@�@�@@��@��@�@�@@��@��``@`�`�` ` @` �` �`@`@@`@�`@�````@``�``�`�`�@`��`��`�`�@`��`��`�`�@`��`��`�`�@`��`����@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@������!��,�&@�� H����*\Ȱ�Ç#J�H��ŋ3j�ȱ�Ǐ C�y�ɓM�\��ʖ0��I��̚8o�ܙQ'ϖ> mt(ɢF�D��#ӦP]� �iԪSR�i�*Ϯ��ӫY�`�NL�h[�lߢ�+�!ݺs�rTyW/�:��]*P�`�� PK㰐\h�i�doc/lst/InternalStructure4.htmlnu�[���<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta name="GENERATOR" content="Mozilla/4.5 [en] (X11; I; Linux 2.0.35 i586) [Netscape]"> <title>LST - Cursor On Cursor - Add C2</title> </head> <body bgcolor="#FFFFFF"> <center><b><font face="Arial,Helvetica"><font size=+1>LST</font></font></b> <br><b><font face="Arial,Helvetica"><font size=+1>Cursor On Cursor</font></font></b> <br><b><font face="Arial,Helvetica"><font size=+1>Add C2</font></font></b> <br> <hr WIDTH="100%"> <br><img SRC="InternalStructure4.gif" ALT="LST - Cursor On Cursor - Add C2" BORDER=0 height=294 width=652> <br> <hr WIDTH="100%"></center> <b><font face="Arial,Helvetica">Description</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">This diagram depicts what happens when a new item (C2) is appended to a cursor list (C) using lstAppend().</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">Notice that the item is appended to the root list and a reference item is added to the cursor list. No intermediate lists are affected.</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">A call to lstGet on (C) while the current item is (C2) would return the pData in (A5).</font><font face="Arial,Helvetica"></font> <p><b><font face="Arial,Helvetica">Related Functions</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">lstAppend, lstInsert, lstGet</font> <br> <hr> <center><a href="InternalStructure3.html"><img SRC="back.gif" ALT="[Back]" BORDER=0 height=32 width=32></a><a href="InternalStructure5.html"><img SRC="next.gif" ALT="[Next]" BORDER=0 height=32 width=32></a> <p>Page 4 of 9</center> </body> </html> PK㰐\�''��doc/lst/InternalStructure5.gifnu�[���GIF89a�V��@�� @ � �@@@@�@�``@`�`���@������@������@������@���� @ � � @ � � @ @@ @� @� ` `@ `� `� � �@ �� �� � �@ �� �� � �@ �� �� � �@ �� ��@@@@�@�@ @ @@ �@ �@@@@@@@�@@�@`@`@@`�@`�@�@�@@��@��@�@�@@��@��@�@�@@��@��@�@�@@��@��``@`�`�` ` @` �` �`@`@@`@�`@�````@``�``�`�`�@`��`��`�`�@`��`��`�`�@`��`��`�`�@`��`����@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@������!��,�V@�� H����*\Ȱ�Ç#J�H��ŋ3j�ȱ�Ǐ C�I�ɓM�\�R�ʖ0��I��̚8o��yQ'O�> ut�ȢF�D��#ӦM���S*ԡV=R�5f֫;�v@�lM�`s�=�v-ڶ��E)w.úvI��{P�^�%u�<��`�q F�r1���3;�+W�e/�,٦BǏ:����d̜���th�#Uo����l�w_��]r��ǿ�� ��8\���&O�x9T�W]C:����<�'5�@;L�X�g˻wO���o��Y��������y���7:��툂u�߀ ��i�ԝ~�d`A�%�_��ڂ2�xfH݆�xׂ W��ۑ� �+V�⋞�x"����2�h#�<�c���Ռ��h�H�(�zR��ޒ)y\CN�e[$*�Ceіە.n!��)��}D�%&A�GP�`� �d�Ie�́���xZħ�1xf�o�I�9 �ޟv��Y�PK㰐\r%':HHdoc/lst/InternalStructure5.htmlnu�[���<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta name="GENERATOR" content="Mozilla/4.5 [en] (X11; I; Linux 2.0.35 i586) [Netscape]"> <title>LST - Cursor On Cursor - Add B3</title> </head> <body bgcolor="#FFFFFF"> <center><b><font face="Arial,Helvetica"><font size=+1>LST</font></font></b> <br><b><font face="Arial,Helvetica"><font size=+1>Cursor On Cursor</font></font></b> <br><b><font face="Arial,Helvetica"><font size=+1>Add B3</font></font></b> <br> <hr WIDTH="100%"> <br><img SRC="InternalStructure5.gif" ALT="LST - Cursor On Cursor - Add B3" BORDER=0 height=342 width=649> <br> <hr WIDTH="100%"></center> <b><font face="Arial,Helvetica">Description</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">This diagram depicts what happens when a new item (B3) is added to cursor list (B) which is also a base list (for C).</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">Notice that the addition of a new item in a base list has no immediate affect on the derived list (C).</font><font face="Arial,Helvetica"></font> <p><b><font face="Arial,Helvetica">Related Functions</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">lstAppend, lstInsert</font> <br> <hr> <center><a href="InternalStructure4.html"><img SRC="back.gif" ALT="[Back]" BORDER=0 height=32 width=32></a><a href="InternalStructure6.html"><img SRC="next.gif" ALT="[Next]" BORDER=0 height=32 width=32></a> <p>Page 5 of 9</center> </body> </html> PK㰐\N/�3��doc/lst/InternalStructure6.gifnu�[���GIF89a�Q��@�� @ � �@@@@�@�``@`�`���@������@������@������@���� @ � � @ � � @ @@ @� @� ` `@ `� `� � �@ �� �� � �@ �� �� � �@ �� �� � �@ �� ��@@@@�@�@ @ @@ �@ �@@@@@@@�@@�@`@`@@`�@`�@�@�@@��@��@�@�@@��@��@�@�@@��@��@�@�@@��@��``@`�`�` ` @` �` �`@`@@`@�`@�````@``�``�`�`�@`��`��`�`�@`��`��`�`�@`��`��`�`�@`��`����@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@������!��,�Q@�� H����*\Ȱ�Ç#J�H��ŋ3j�ȱ�Ǐ C�9�ɓM�\�R�ʖ0��I��̚8o��iQ'O�> ut�ȢF�D��#ӦJ���S*ԡV=R�5f֫;�v@�lM�`Ϧ=�v-ڶ��E)w.úv����ޔ:��%�W�`��k|iXqJ�]���̕+ղ�N�lSac�w!�\Y���]I�|���So����l��]����-oſ�� �[����)o�y9X�iyC7:����U�K\��Z��z_9>�E��_��yaz�v�����r��e��Zs���"4g(Sw�H�h����C�9�Wp�1h�!y�`��^�$z�!�% XbRea�߇+:�=��"��цc�PK㰐\��%��doc/lst/InternalStructure6.htmlnu�[���<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta name="GENERATOR" content="Mozilla/4.5 [en] (X11; I; Linux 2.0.35 i586) [Netscape]"> <title>LST - Cursor On Cursor - Del B2</title> </head> <body bgcolor="#FFFFFF"> <center><b><font face="Arial,Helvetica"><font size=+1>LST</font></font></b> <br><b><font face="Arial,Helvetica"><font size=+1>Cursor On Cursor</font></font></b> <br><b><font face="Arial,Helvetica"><font size=+1>Del B2</font></font></b> <br> <hr WIDTH="100%"> <br><img SRC="InternalStructure6.gif" ALT="LST - Cursor On Cursor - Del B2" BORDER=0 height=337 width=648> <br> <hr WIDTH="100%"></center> <b><font face="Arial,Helvetica">Description</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">This diagram depicts what happens when an item (B2) is deleted.</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">Notice that the reference item (B2) is removed immediatly. This causes the reference counter in (A4) to be reduced. A delete flag is set in (A4) because there are still references to it and deletion is delayed until all references are removed. (C) and (C1) are oblivious to the delete.</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">Navigation is affected by (A4) being flagged for delete. Navigation functions such as; lstFirst and lstNext will skip (hide) any items which are flagged for delete. This prevents deleted items from getting more references.</font><font face="Arial,Helvetica"></font> <p><b><font face="Arial,Helvetica">Related Functions</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">lstDelete</font> <br> <hr> <center><a href="InternalStructure5.html"><img SRC="back.gif" ALT="[Back]" BORDER=0 height=32 width=32></a><a href="InternalStructure7.html"><img SRC="next.gif" ALT="[Next]" BORDER=0 height=32 width=32></a> <p>Page 6 of 9</center> </body> </html> PK㰐\κ[���doc/lst/InternalStructure7.gifnu�[���GIF89a����@�� @ � �@@@@�@�``@`�`���@������@������@������@���� @ � � @ � � @ @@ @� @� ` `@ `� `� � �@ �� �� � �@ �� �� � �@ �� �� � �@ �� ��@@@@�@�@ @ @@ �@ �@@@@@@@�@@�@`@`@@`�@`�@�@�@@��@��@�@�@@��@��@�@�@@��@��@�@�@@��@��``@`�`�` ` @` �` �`@`@@`@�`@�````@``�``�`�`�@`��`��`�`�@`��`��`�`�@`��`��`�`�@`��`����@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@������!��,��@�� H����*\Ȱ�Ç#J�H��ŋ3j�ȱ�Ǐ C�9�ɓM�\�R�ʖ0��I��̚8o��iQ'O�> ut�ȢF�D��#ӦJ���S*ԡV=R�5f֫;�v@�lM�`Ϧ=�v-ڶ��E)w.úv����^�7���bY���XqJ�]���̕+ղ�N�X�c�� n�,��殣A>m���a�Qo����l��[����-oǿ�� ��0����M.\7E��FO�{:I��Kw������Q{���%/�or��;<�~��_�{��>u��!d�I���m�tހb%ZA&(��נ[f`}mx�_��Fᇁ���� �H�w���"D���/#s(�c����#_5��c��v�/�(�L6yԒN.eQ�Q��W!1Xe� yx����H^V�y�eNb2&%CT x�wBHPK㰐\�����doc/lst/InternalStructure7.htmlnu�[���<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta name="GENERATOR" content="Mozilla/4.5 [en] (X11; I; Linux 2.0.35 i586) [Netscape]"> <title>LST - Cursor On Cursor - Add D</title> </head> <body bgcolor="#FFFFFF"> <center><b><font face="Arial,Helvetica"><font size=+1>LST</font></font></b> <br><b><font face="Arial,Helvetica"><font size=+1>Cursor On Cursor</font></font></b> <br><b><font face="Arial,Helvetica"><font size=+1>Add D</font></font></b> <br> <hr WIDTH="100%"> <br><img SRC="InternalStructure7.gif" ALT="LST - Cursor On Cursor - Add D" BORDER=0 height=403 width=648> <br> <hr WIDTH="100%"></center> <b><font face="Arial,Helvetica">Description</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">This diagram depicts the creation of a new cursor list (D)... the second one based on the root list (A).</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">Reference counts are increased in (A), (A2), and (A6).</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">The filter function for (D) was never presented with (A4) as it is flagged for deletion.</font><font face="Arial,Helvetica"></font> <p><b><font face="Arial,Helvetica">Related Functions</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">lstOpenCursor</font> <br> <hr> <center><a href="InternalStructure6.html"><img SRC="back.gif" ALT="[Back]" BORDER=0 height=32 width=32></a><a href="InternalStructure8.html"><img SRC="next.gif" ALT="[Next]" BORDER=0 height=32 width=32></a> <p>Page 7 of 9</center> </body> </html> PK㰐\l 8% doc/lst/InternalStructure8.gifnu�[���GIF89a����@�� @ � �@@@@�@�``@`�`���@������@������@������@���� @ � � @ � � @ @@ @� @� ` `@ `� `� � �@ �� �� � �@ �� �� � �@ �� �� � �@ �� ��@@@@�@�@ @ @@ �@ �@@@@@@@�@@�@`@`@@`�@`�@�@�@@��@��@�@�@@��@��@�@�@@��@��@�@�@@��@��``@`�`�` ` @` �` �`@`@@`@�`@�````@``�``�`�`�@`��`��`�`�@`��`��`�`�@`��`��`�`�@`��`����@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@������!��,��@�� H����*\Ȱ�Ç#J�H��ŋ3j�ȱ�Ǐ C�9�ɓM�\����-c&| N�͏*o��s�O�=�*�hC�FY"M�T!Ѧ"�B�*ujǪV�.�q+צX�b+v'ٲ%�6���"۶f�r<+w%]��P0�_�'�֝۠����0Iă��)آb��17��g���~m2i�lG�v8��j�DU��(��c�|qc&�{���!�֞]дD࿓+��{��0{$r�ΕkN��Xfi��h||y�ӳbM?8��� �˕?�5|���O;Y�]�pZ���]��g��A��B:ŠQ>(�F�����!�<u�ԇ]��mz]f"A��RO��蛌!������8��aWcI7��cR:���^F�7�B E ��Q�P�d�X��[f�H]���Z�i�T�8��]Ue���&��5���d��ams���\v>� �ui�'����ʹ!w���o)"y'O�2�P�4v�ۣ6��7=%�����s���c���ƚҩfJ��B�*I����ʢ���lQ� �,N�I�6���Wٺ��Y;"�]z��i�h��r��.��x/�$.aC�)�'�U)n��.��z�oZ����v���ڿLr*������""��:�!�_Q���i,Ʊa<�ȁq�n���ջ�}�2J,�$����ܞ��Vs|4ˌ3A�m�P���:�L ������M^t��;�b*����T�|��r]�a=�E��hF��s�ؘ��[v�sϷ��eѤ���|7���{��$GqWT���b�7���m�����C>���3���u� hd�[>������w��Ў.���'��V�5���:Wv�껗%��=2�#���jh��Tv��S�n�ԷW��;����JV:���/>��+t��|����� Ij��Gj�>���/��� <���Z���5@3�,T�s�:Ѐ�"HAT �Q���8A"5p� aT�}P�(La�����pI�{�gH�PK㰐\��u��doc/lst/InternalStructure8.htmlnu�[���<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta name="GENERATOR" content="Mozilla/4.5 [en] (X11; I; Linux 2.0.35 i586) [Netscape]"> <title>LST - Cursor On Cursor - Del B</title> </head> <body bgcolor="#FFFFFF"> <center><b><font face="Arial,Helvetica"><font size=+1>LST</font></font></b> <br><b><font face="Arial,Helvetica"><font size=+1>Cursor On Cursor</font></font></b> <br><b><font face="Arial,Helvetica"><font size=+1>Del B</font></font></b> <br> <hr WIDTH="100%"> <br><img SRC="InternalStructure8.gif" ALT="LST - Cursor On Cursor - Del B" BORDER=0 height=403 width=648> <br> <hr WIDTH="100%"></center> <b><font face="Arial,Helvetica">Description</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">This diagram depicts the closing of list (B) using the lstClose function.</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">Notice that no lists or items are actually removed. The reference counter in (B) is decremented but it is not actually closed because its reference count is still greater than zero. It is, in effect, flagged for deletion.</font><font face="Arial,Helvetica"></font> <p><b><font face="Arial,Helvetica">Related Functions</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">lstClose</font> <br> <hr> <center><a href="InternalStructure7.html"><img SRC="back.gif" ALT="[Back]" BORDER=0 height=32 width=32></a><a href="InternalStructure9.html"><img SRC="next.gif" ALT="[Next]" BORDER=0 height=32 width=32></a> <p>Page 8 of 9</center> </body> </html> PK㰐\�Ykkdoc/lst/InternalStructure9.gifnu�[���GIF89a����@�� @ � �@@@@�@�``@`�`���@������@������@������@���� @ � � @ � � @ @@ @� @� ` `@ `� `� � �@ �� �� � �@ �� �� � �@ �� �� � �@ �� ��@@@@�@�@ @ @@ �@ �@@@@@@@�@@�@`@`@@`�@`�@�@�@@��@��@�@�@@��@��@�@�@@��@��@�@�@@��@��``@`�`�` ` @` �` �`@`@@`@�`@�````@``�``�`�`�@`��`��`�`�@`��`��`�`�@`��`��`�`�@`��`����@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@��������@����� � @� �� ��@�@@�@��@��`�`@�`��`�����@����������@����������@����������@������!��,��@�� H����*\Ȱ�Ç#J�H��ŋ3j�ȱ�Ǐ C�Ir"��%SJ< @�˔�b���0&8�8?6��s�Ξ@�PK㰐\�Jn2��doc/lst/InternalStructure9.htmlnu�[���<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta name="GENERATOR" content="Mozilla/4.5 [en] (X11; I; Linux 2.0.35 i586) [Netscape]"> <title>LST - Cursor On Cursor - Del C</title> </head> <body bgcolor="#FFFFFF"> <center><b><font face="Arial,Helvetica"><font size=+1>LST</font></font></b> <br><b><font face="Arial,Helvetica"><font size=+1>Cursor On Cursor</font></font></b> <br><b><font face="Arial,Helvetica"><font size=+1>Del C</font></font></b> <hr WIDTH="100%"> <br><img SRC="InternalStructure9.gif" ALT="LST - Cursor On Cursor - Del C" BORDER=0 height=966 width=680> <br> <hr WIDTH="100%"></center> <b><font face="Arial,Helvetica">Description</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">This diagram depicts the state Before a call to close list (C) and After it has been called.</font><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">Notice that lstClose on list (C) detected that list (B) could be closed. Item (A4) was removed because it was flagged for delete and had no more references to it.</font><font face="Arial,Helvetica"></font> <p><b><font face="Arial,Helvetica">Related Functions</font></b><font face="Arial,Helvetica"></font> <p><font face="Arial,Helvetica">lstClose</font> <p> <hr> <center><a href="InternalStructure8.html"><img SRC="back.gif" ALT="[Back]" BORDER=0 height=32 width=32></a> <p>Page 9 of 9</center> </body> </html> PK㰐\��T{��doc/lst/back.gifnu�[���GIF87a �������������, �8��p)@��8������mAi�hz "A�p\��l��K�w����r��� KM_�4E�Nd�Z�jU\�� K�y������罷�;�=�+Xyx�t�u&Rqr����g��0��)���~��!,�����B���� �� ;PK㰐\%{����doc/lst/next.gifnu�[���GIF87a �������������, �8��p)@��8������mAi�hz "A�p\��l��K�w��^ʷ+�Bu45yK`�)�:aT�ˮZ����r�Y3���°�����z�&��|b(8w}&�C���Z�H�0joBfI���������{.e,�����A���� �� ;PK㰐\0m�\� � doc/index.htmlnuȯ��<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTML XMLNS="http://www.w3.org/1999/xhtml"> <HEAD > <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"> <TITLE>unixODBC</TITLE> <META NAME="generator" CONTENT="SlickEdit"> <!-- leave this for stats --> <LINK REL="stylesheet" HREF="style.css" TYPE="text/css" MEDIA="screen"> <STYLE TYPE="text/css" MEDIA="screen"> body { background: url("background.jpg"); } #page { background: url("body.jpg") repeat-y top; border: none; } #header { background: url("header.gif") no-repeat bottom center; } #footer { background: url("footer.jpg") no-repeat bottom; border: none;} #header { padding: 22px 30px 0px 30px; height: 56px; width: 690px; } </STYLE> </HEAD> <BODY> <DIV ID="page"> <DIV ID="header"> <A HREF="http://www.unixodbc.org/"><IMG SRC="icon64.png" ALIGN="right" BORDER="0" HSPACE="0" VSPACE="0"></A> <H1>unixODBC</H1> <DIV CLASS="description"> Standards compliant, open source, database connectivity for everyone. </DIV> </DIV> <DIV ID="content" CLASS="widecolumn"> <DIV STYLE="text-align: center;"> <SPAN STYLE="font-weight: bold;"> Home </SPAN> | <A HREF="News.html">News</A> | <A HREF="Documentation.html">Documentation</A> | <A HREF="Drivers.html">Drivers</A> | <A HREF="Support.html">Support</A> | <A HREF="Downloads.html">Downloads</A> </DIV> <DIV CLASS="post" ID="post-68"> <DIV CLASS="entrytext"> <TABLE> <TR> <TD><H2>unixODBC is...</H2></TD> <TD><H2>News</H2></TD> </TR> <TR> <TD><BR>unixODBC is an implementation of the ODBC standard which is; <UL> <LI> open source </LI> <LI> licensed under LGPL/GPL </LI> <LI> community developed and community supported </LI> <LI> proven with over a decade of active use/development </LI> </UL> </TD> <TD> <HR STYLE="width: 100%; height: 2px;"> <SPAN STYLE="color: rgb(192, 192, 192);"> March 15th 2007 </SPAN> <BR> <DIV STYLE="margin-left: 40px;"> New look for unixodbc.org <DIV STYLE="margin-left: 40px;"> The old web site was serving the project fine but it seemed like it was about time to make it all 'fresh'. We hope you find it more pleasing to use. </DIV> </DIV> <SPAN STYLE="color: rgb(192, 192, 192);"> October 13th 2006 </SPAN> <BR> <DIV STYLE="margin-left: 40px;"> 2.2.12 Released<BR> </DIV> <A HREF="News.html"><SMALL>More...</A></TD> </TR> <TR> <TD><H2>Key features...</H2></TD> <TD><H2>Architecture</H2></TD> </TR> <TR> <TD STYLE="vertical-align: top;"><BR> <SPAN STYLE="font-weight: bold;"> Software Development Kit </SPAN> (SDK) - Develop ODBC applications and drivers using the C language and the unixODBC SDK.<BR> <BR> <SPAN STYLE="font-weight: bold;"> Driver Manager </SPAN> (DM) - The unixODBC DM allows the end-User to switch data sources without recompiling/linking application source code. The application does not have to be linked to a specific vendors product.<BR> <BR> <SPAN STYLE="font-weight: bold;"> Tools </SPAN> - unixODBC includes CrossPlatform command-line and GUI tools to make working with ODBC easy.<BR> </TD> <TD STYLE="vertical-align: top;"><IMG ALIGN="LEFT" STYLE="width: 200px; height: 175px;" ALT="" SRC="Splash.png"> <P>Applications typically link with the unixODBC Driver Manager (DM) which then uses the appropriate Driver to communicate with the data source. The DM understands ODBC but relies on the Driver to understand specifics of the data source.</P> <P>The Driver is typically provided by the data source Vendor. The Driver understands ODBC and the specifics of the data source.</P> </TD> </TR> </TABLE> <BR> <TABLE CLASS =codebox> <TR> <TD STYLE="vertical-align: top; background-color: rgb(102, 102, 102); width: 33%;"> <SPAN STYLE="font-weight: bold;"> CrossPlatform<BR> <BR> </SPAN> Applications built using unixODBC are compatible with the Microsoft implementation of ODBC. unixODBC is provided with all majour Linux distributions. unixODBC has been ported to all majour UNIX and UNIX-like platforms;<BR> <DIV STYLE="margin-left: 40px;"> - Linux, Solaris, SGI, etc<BR> - VMS, OS/2, etc<BR> </DIV> </TD> <TD STYLE="vertical-align: top; background-color: rgb(102, 102, 102); width: 33%;"> <SPAN STYLE="font-weight: bold;"> CrossDatabase </SPAN> <BR> <BR> unixODBC supports drivers from all majour database vendors including;<BR> <DIV STYLE="margin-left: 40px;"> - Oracle<BR> - DB2<BR> - Interbase<BR> - Mimer<BR> - MySQL<BR> - others<BR> </DIV> </TD> <TD STYLE="vertical-align: top; background-color: rgb(102, 102, 102); width: 33%;"> <SPAN STYLE="font-weight: bold;"> License </SPAN> <BR> <BR> unixODBC was developed by the open source community and is provided under the LGPL and GPL licenses. Commercial applications can be developed using unixODBC without paying for a license or royalty. Free support is provided by the community. </TD> </TR> <TR> <TD STYLE="vertical-align: top;"><A HREF="CrossPlatform.html">More...</A></TD> <TD STYLE="vertical-align: top;"><A HREF="CrossDatabase.html">More...</A></TD> <TD STYLE="vertical-align: top;"><A HREF="License.html">More...</A></TD> </TR> </TABLE> </TD> </TR> </TABLE> </P> </DIV> </DIV> </DIV> <DIV ID="footer"> <P> --<BR> <A HREF=mailto:pharvey@peterharvey.org>Peter Harvey</A> </P> </DIV> </DIV> </BODY> </HTML> PK㰐\~�؏�doc/smallbook.gifnuȯ��GIF89a���������������������!�Made with GIMP!� ,B8����^\3�z�ހ�x�Q%h�) <l�a�:�L�� �� ��t���:���)�*��E�^;PK㰐\Bv3~��doc/unixODBC.gifnuȯ��GIF89a ��������l����������!�NETSCAPE2.0!�Made with GIMP!� , ����Ig���ͷ��ԍ�$Y}R����/L�w��[������JB�CŒ�]�C�F�5��PK㰐\�T�//AUTHORSnu�[���Authors of unixODBC... Peter Harvey <pharvey@codebydesign.com> Nick Gorham <nick@easysoft.com> The PostgreSQL Driver was modified from the standard PostgreSQL ODBC driver (http://www.postgresql.org) The NNTP Driver as written by Ke Jin The MySQL driver is a mirror from the MySQL folks. Other contributors include Alex Hornby Axel Reinhold Alexander Mitin Artiom Morozov Arun K Desai Bard Hustveit Bill Bouma Bill Medland Bojnourdi Kaikavous Brian Harris Bruce A Mallett Charles Morrison Charles Overbeck Chris Friesen Christian Jullien Christian Werner Constantine Filin Craig A Berry Dave Berry David Brown Dmitriy Yusupov Donnie Pinkston Emile Heitor Erik Lundqvist Frediano Ziglio Gary Bunting Geoffrey Gowan Greg Bentz Heikki Linnakangas Holger Bischoff Holger Schurig Honza Horak Hristo Hristov Hugh McMaster Ian Ashley James Dugal Jan Cihlar Jan Stanek Jason Crummack Jay Cai Jay Q. Cai Jay Van Vark Jeff Garzik Jean Louis Charton Jens Schlegel Jess Balint Jim Ziegler Joel W. Reed John C. Rood John L Miller John Moreshead Jon Kåre Hellan Jon Pounder Jon Willeke Jürgen Pfeifer Keith Woodard Lars Doelle Manush Dodunekov Markus Beth Mark Chopping Mark Hessling Mark Vanderwiel Martin Edlman Martin Evans Martin Hobbs Martin Kittel Martin Lacko Max Khon Michael Koch Michael Vetter Miloslav Marik Mike Schultz Mikko Vierula Murad Nayal Murray Todd Williams Nikolai Afanasiev Ocke Janssen Oded Comay Ola Sundell Oren Nechushtan Patrice Favre Paul Richardson Per Bengtsson Per I. Mathisen Petr Vandrovec Pierangelo Masarati Rafi Einstein Ralf Fassel Rick Flower Richard Kettlewell Ron Norman Samuel Cote Scot Loach Scott Courtney Shandy J. Brown Simon Pepping Stefan Radman Steffen Dettmer Steve Gilbert Steve Langasek Steven M. Schultz Steven Reynolds Stuart Coupe Thomas Langen Tim Roepken Tomas Zellerin Trond Eivind Glomsrød Venu Anuganti Zoltan Boszormenyi If I have omitted anyone from this let me know and I will amend it ASAP. I have removed the email address of the people on this list. If someone wants to get in touch, mail me and I will pass it on. Nick Gorham PK㰐\��Ko_o_COPYINGnuȯ�� GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS PK㰐\+J���#�# ChangeLognu�[���10-Aug-2018 2.3.7 * Fix for pkg-config file update on no linux platforms * Add W entry for GUI work * Various fixes for SQLBrowseConnect/W, SQLGetConnectAttr/W,and SQLSetConnectAttr/W * Fix buffer overflows in SQLConnect/W and refine behaviour of SQLGet/WritePrivateProfileString * SQLBrowseConnect/W allow disconnecting a started browse session after error * Add --with-stats-ftok-name configure option to allow the selection of a file name used to generate the IPC id when collecting stats. Default is the system odbc.ini file * Improve diag record handling with the behavior of Windows DM and export SQLCancelHandle * bug fix when SQLGetPrivateProfileString() is called to get a list of sections or a list of keys * Connection pooling: Fix liveness check for Unicode drivers 19-March-2018 2.3.6 * Fix order of arguments in SQLWriteFileDSN.c, fix unwanted free() in iusql.c (CVE-2018-7485) * Add pkg-config files 2-Jan-2018 2.3.5 * Add configure option --enable-setlibversion set mark the libs with VERS_3.52 Linux only, so any driver built with the libs will work with closed source DM's * Add persistent storage of isql command line history if readline() is used (thanks Axel) * Rename some local mutex functions to avoid name clashes * Assorted fixes (Thanks Markus * 2) * Fix regression in ini caching * Make SQLDrivers look in user as well as system odbcinst.ini for driver attributes * If in use, clear the ini cache when a write is done via SQLWritePrivateProfileString() so the new value is read * Fix problem with pooling if the environment was released by the application * Add check for SQL_COLUMN_COUNT in SQLColAttribute * isql would not display long error messages. Fixed now. * Fix problem calling the driver to report errors if the error is from the DM and the driver has not been called * SQLSetConnectAttrW crashes when attempting to set SQL_ATTR_LOGIN_TIMEOUT * Buffer overflow in unicode_to_ansi_copy() (CVE-2018-7409) * SQLDriverConnect with not-found FILEDSN causes crash * SQLGetDescRec with null name pointer causes crash * Connection string escaping does not work * SQLDriverConnect/W with very long driver name causes crash * Connection string with trailing empty value causes crash * Freeing explicitly allocated descriptor results in writing to freed memory * Buffer overflows and missing null checks in SQLConfigDataSource, SQLInstallDriverEx, and SQLWriteFileDSN * Statement enters incorrect state upon SQLExecDirectW returning SQL_NO_DATA * SQLBulkOperations fails to exit async state after success * SQLFreeStmt causes prepared statements in S1 or S2 to erroneously transition to S3 * Buffer length fixes for SQLGetDiagField * SQLSetConnectAttrW and Unicode string pre-connect attributes do not work * SQLGetData and SQLSetPos async states are incorrect * Various string conversion and length issues in SQLColAttribute(s) * Missing buffer length check in SQLColAttribute(s)W * SQLGetStmtAttr state handling incorrect in S5, S6, and S7 (via SQLExtendedFetch) * SQLSetPos and SQLExtendedFetch state management fixes * SQLExecDirect/W erroneous transition to S1 upon error in S5 * Async SQLGetData and SQLExecDirect/W fails to restore state upon cancellation * SQLFetchScroll cannot move cursor back into the rowset * SQLSetDescField doesn't adjust the length of the buffer when converting to unicode * SQLGetDescField/W and SQLSetDescField/W do not check for negative buffer lengths * SQLSetStmtAttrW SQL_ATTR_APP_PARAM_DESC and SQL_ATTR_APP_ROW_DESC does not accept null * SQLGetData async state reentrancy issues * SQLDriversW off-by-one in enumerating driver list * SQLPrimaryKeys does not pass length in characters to driver * SQLGetConnectAttr with string attributes truncates to half buffer length * SQLTransact with autocommit enabled erroneously changes statement state * SQLDataSources/W fails to reset list position upon end * SQLGetEnvAttr successfully returns unset SQL_ATTR_ODBC_VERSION * Lack of SQL_HANDLE_SENV support * SQLAllocEnv fails to set environment version correctly * SQLMoreResults with streamed output parameters returns unexpected HY010 * Custom pre-connect pointer attributes are truncated to 32 bits * 08003 message should be "Connection not open" * SQL_ATTR_ACCESS_MODE set using SQLSetConnectOption/W before connecting does not persist after disconnecting * SQL_ATTR_AUTOCOMMIT incorrect default value before connecting * SQL_AUTOCOMMIT set using SQLSetConnectOption/W before connecting does not persist after disconnecting * SQLAllocHandle/SQLFreeHandle with invalid handle type should return SQL_INVALID_HANDLE * SQLAllocHandleStd not setting ODBC version correctly * SQLBindParameter does not ignore BufferLength for DAE parameters * SQLBindParameter does not ignore BufferLength for fixed-length parameters * SQLBindParameter returns "Invalid application buffer type" instead of " Program type out of range" * SQLCancel with 01S05 returned from driver should result in SQL_SUCCESS, not SQL_SUCCESS_WITH_INFO (see https://msdn.microsoft.com/en-us/library/aa392708(v=vs.85).aspx ) * SQLColAttribute/SQLColAttributes should return number of bytes needed for Unicode string when truncating * SQLColumnPrivileges/W differing error message precedence from Windows DM and order in ODBC spec * SQLColumns/W extraneous checks on null string's length * SQLCopyDesc does not copy descriptors across connections correctly * SQLDescribeParam extraneous checks for state * SQLDriverConnect/W adds extraneous DM prefix to diagnostic messages * SQLDriversW before ODBC version set returns incorrect SQLSTATE * SQLFetch in state S7 does not return error from DM * SQLFetchScroll missing check for SQL_FETCH_BOOKMARK * SQLForeignKeys/W missing check for null table names * SQLGetConnectAttr/W erroneously retrieves attributes with no default (SQL_ATTR_PACKET_SIZE, SQL_ATTR_QUIET_MODE) * SQLGetConnectAttr/W fails to get some set attributes before connecting * SQLGetConnectAttr/W fails to retrieve set attributes with no connection * SQLGetConnectAttrW returns incorrect value for SQL_ATTR_TRACE * SQLGetConnectOption/W cannot retrieve SQL_ODBC_CURSORS before connection * SQLGetConnectOption/W fails to retrieve SQL_LOGIN_TIMEOUT before connecting * SQLGetConnectOption/W fails to retrieve SQL_ATTR_ACCESS_MODE set with SQLSetConnectOption/W * SQLGetData and SQLSetPos async states are incorrect * SQLGetData missing check for cursor end indication; SQLSetCursorName/W fails to clear previous diagnostic records * SQLGetDiagField/W does not check record number for SQL_DIAG_ROW_COUNT and SQL_DIAG_DYNAMIC_FUNCTION_CODE * SQLGetDiagField/W missing check for negative buffer length for string fields * SQLGetDiagField/W inconsistent handling of statement-only diagnostic fields * SQLGetInstalledDrivers off-by-one length * SQLGetStmtOption various state handling issues * SQLSetConnectAttr/W SQL_ATTR_CURRENT_CATALOG extraneous check with error 24000 * SQLSetConnectAttr/W does not prevent attempts to set ODBC 3.x statement attributes * SQLSetConnectAttr/W with null string attributes causes crash * SQLSetConnectOption passes SQL_ATTR_TRACEFILE to the driver * SQLSetConnectOption/W or SQLSetConnectAttr/W missing validity checks for SQL_ATTR_TXN_ISOLATION * SQLSetConnectOption/W setting SQL_ATTR_TRACEFILE to null results in different error * SQLSetCursorName/W missing checks for negative name length * SQLSetDescField/W missing check for negative SQL_DESC_COUNT * SQLSetParam missing various error checks for invalid data types and buffer * SQLSetPos does not check for state S5 * SQLSetPos missing checks in state S7 * SQLSetScrollOptions various state handling issues * SQLSetStmtOption/W missing check for positive rowset sizes * SQLSpecialColumns/W error precedence differs from Windows DM * SQLSpecialColumns/W incorrect check for SQL_NTS string lengths * SQLStatisticsW uniqueness parameter missing validation * SQLTablePrivileges/W extraneous checks on null string's length * Various issues with SQLGetFunctions * Various string conversion and length issues in SQLColAttribute; missing buffer length check in SQLColAttributeW * As above, but for SQLColAttributes and SQLColAttributesW; incorrect check for SQL_COLUMN_COUNT * Setting SQL_ATTR_TRACEFILE to null value results in different error * check_target_type allows driver-specific C data types for ODBC < 3.8 * fix empty SQL_DIAG_SERVER_NAME field in DM-supplied diag recs * fix differing behaviour for an empty string DSN in SQLConnect/W * Alter isql to return errors from SQLMoreResults * Handle case of building on mingw-w64 3rd-Aug-2015 2.3.4 * Fix typo in the loading of the cursor lib, reports internal error, unexpected SHLIBEXT 2nd-Aug-2015 2.3.3 * Reporting of logging state was broken in SQLGetConnectAttr * Fix incorrect text against HY007 * Add -L option to isql to increase max column data display * Update automake toolset in svn * Add SQLFreeStmt( SQL_CLOSE ) function to SQLCancel * Allow SQL_NTS as a buffer length to SQLBindParameter * More manual pages for the tools * Fix buffer overrun returning long diagnostic from driver * Cross call between wide and ascii error reporting in the driver when needed * Fix some possible unchecked memory references after malloc * Prevent free( NULL ) in SQLGetDiagRecW * Add missing A->W conversion in SQLGetStmtOption * Allow iconv to convert strings into the driver with differing A and W lengthts (UTF) * SQLDataSourcesW takes buffer_lenghts as characters not bytes * Fix memory leak in SQLGetDiagRec * Allow setting custom non standard attributes via DMStmtAttr, format is: DMStmtAttr=[xxxx]=\yyy DMStmtAttr=[xxxx]={ssss} where xxxx = integer attribute to set, yyy is decimal numeric value and ssss is a string value * Add check in SQLGetData for null target value or negative buffer length * Fix memory leak when using the cursor lib * Catch incorrectly expanded SHLIBEXT * There was a bug in the ini caching, now fixed * More ODBC 3.80 additions (streaming parameters) * Check for NULL handle in __validate_xxx() * Avoid potential memory leak in SQLAllocStatement * Avoid buffer overflow via environment variamles * Fix some typos 8th-October-2013 2.3.2 * The logging of WStrings was using the incorrect length in some cases * Pass SQLDescribeCol call to driver when in state 2 (not a cursor spec). * Pass SQLMoreResults call to driver when in state 2 (not a cursor spec). Both the last two changes are not as per the original book state table but allign with the current MS driver manager * The -e option to isql got lost somewhere. Back in now * Update install-sh * SQLCancel assumed that the DM was being built with thread support * Try and speed up SQLTransact and SQLEndTran operation * Add missing \ in Postgres7.1 Makefile * Correct some potential buffer overflows * Handle SQL_NEED_DATA from a SQLMoreResults * Get the local charset via nl_langinfo(CODESET) when asking the DM to do ASCII-UNICODE conversions * Handle (and remove) leading spaces from ini entries * Fixed unicode conversion problems in SQLGetDiagField(W) * missing terminating null in iusql * add to the list of errno states that does not cause a create of the ini file * SQLSetConnactAttr() -> SQLSetConnectAttrW() was passing incorrect string length * Fix double free in SQLGetDiagFieldW * Fix Unicode/Ansi conversion problem in SQLGetDiagFieldW.c * Add support for Driver64 in SQLDriverConnectW * Add missing unicode setting when returning a connection to the pool * Tidy up leaking iconv handles if connect_part_one fails * Fix (and avoid) some out of memory problems * Wrap lt_dlinit and dlerror in the lib mutex * Add slencheck executable to try and find the sizeof(SQLLEN) from a installed driver * SQL_NO_DATA after SQL_STILL_EXECUTING in SQLExtendedFetch was not setting the state correctly * A little more 3.80 stuff being added * Added fixes found by coverity * Added man pages * Patches to update VMS build * Change mutex protection around release_env * Altered strlen to be count of bytes in SQLGetDiagFieldW * Add check for W function support in do_attr * Allow SQLDrivers to return attribute length with no supplied buffer 26th-November-2011 2.3.1 * Change type definition of a integer in SQLConnect.c, just to avoid confusion * Allow setting the DM overrive values in the connection string to SQLDriverConnect for example "DRIVER={Easysoft ODBC-SQL Server};Server=myserver;UID=user;PWD=pass;DMStmtAttr=SQL_QUERY_TIMEOUT=10;" * Error and info message order was being inverted by the driver manager * Fix memory leak in SQLDriverConnect.c (Thanks JM) * The keyword matching for DRIVER=, DSN= etc was case sensitive. Make it insensitive now * Avoid sprintf NULL pointer problem in SQLGetDiagRec * Fix typo affecting the pooling of connections, (thanks Chris) * Fix SunCC _mcount problem * Attempt to stamp version info on the libs generated. There are aps in use linked against other driver managers that expect VERS_3.52 * Fix potential buffer overrun when using SAFEFILE * Fix mutex problem in the exit from __SQLGetInfo (thanks Richard) * Allow getting SQL_DM_VER via SQLGetInfo before connecting to a driver * Generate unixodbc_conf.h using macros to allow cross compiling * Fix some libltdl problems * Fix some naming problems with the cursor lib * Fix odbcinst problems on systems without pwd.h * Change lib version to 2 to reflect SQLLEN changes in v2.3 * Fix threading problem (thanks Petr Vandrovec) * Allow use of lib name in a DRIVER= connection string * Change default threading protection to 0, most drivers should be thread safe by now. If the driver is at all thread safe, allow SQLCancel to bipass the interlock. * Performance change to handle large numbers of connection and statement handles better. Thanks for the change from the folks at Acision. * Add -k option to isql to treat the DSN as a connection string and use SQLDriverConnect isql -k "DSN=server;UID=test;PWD=test" * Couple of the SQLSetConnactAttr values are now SQLULEN instead of SQLUINTEGER * SQLSetConnectAttr was passing a char length instead of a byte length into the Driver SQLSetConnectAttr when converting from Ansi->Unicode * Driver version was not being held when a second connection was made to the driver 20th-April-2010 2.3.0 * Try and rationalise the way the connection process find the driver version and supported functions * Sort out problem in isql with blank lines * Stop libthread from being used under AIX * Move the GUI parts off into a new project http://sourceforge.net/projects/unixodbc-gui-qt/ * Strip out the GUI parts. I have also removed the spec files as they will need redoing, * Move the Test parts off into a new project http://sourceforge.net/projects/unixodbc-test/ * Add interface into odbcinstQ to allow for a dialog if SQLDriverConnect is called without a DSN= (as the MS spec) * Allow the setting of a default Threading level in the ODBC section of odbcinst.ini * Change double format string in Postgre7.1 driver * Add missing CR to output of odbcinst * add fixes to MiniSQL driver * Add missing .y in nn driver, now I need to get it to work * Assoured bux fixes and format problems, thanks Tom * SQLBindCol on metadata calls was incorrectly going via the cursor lib if it was enabled * fix isql problem with nested definitions. * Add configure option to enable building of driver config libs * Shift build to using config.h, the compile lines were so big it was hard to see warnings * Fix bug in isql when using -b option. * Check attribute values when setting connection and statement attrs * Check for valid pointers in SQLGetInfo(W) and SQLGetFunctions * Add extra checks for states in SQLCopyDesc * Add --enable-stricterror option to allow compliance with the error reporting definition, driver errors don't have the unixODBC prefix * Check for statements in the NEED_DATA state when calling SQLEndTran * Extra error check for SQLPutData * Check handle type in SQLEndTran * Prevent seg fault if there are no driver error functions * the -n option to isql was not working correctly * Stripped out all the bespoke LDTL configure stull, not just what libtoolize provides * Fix problem where ansi_to_unicode_alloc didn't leave space for the NULL and could cause memory corruption * Add the ODBC 3.80 additions that MS have produced. I am sure I remember the standard being given to XOpen, what do I know :-) * Change the file open mode for the ini file from w to w+ just in case the original open failed but the file did exist * Fix configure problem preventing the CHAR encoding from being passed * Remove white spave from ini write, not all drivers use unixODBC ini functions and can handle the spaces * Update config.guess to current GNU version including support for AIX6 * Create SVN repository at sourceforge * Add cast to fix problem in SQLSetConnectOption * Fix SQLINTEGER<->SQLLEN conversion broblem in SQLNativeSQL * Fix bug that stopped setting SQL_ATTR_CONCURRENCY to SQL_CONCUR_VALUES * Change minor version number because of the SQLLEN change * Remove unintended trailing white space from log generation 19th-Nov-2008 2.2.14 * missing protype in 2.2.13 made the build fail on some platforms 18th-Nov-2008 2.2.13 * There was a mutex around iconv that needed adding. Without this, there was a potential thread problem * Fix problem with SQLGetDiagRec/Field returning double driver errors * odbctest was using the wrong handle for SQLGetConnectOption * remove startup thread race condition * fix descriptor memory leak with UNICODE only drivers (thanks Ian) * Alter the default 64bit build mode, and change the flag to BUILD_LEGACY_64_BIT_MODE * Fix a couple of 64bit problems * create unixodbc_conf.h on install to contain compile settings * Allow the GUI parts to build with qt4 * try and deal with drivers that call internal W functions and end up in the driver manager (informix for example). Enabled by --enable-handlemap=yes when configuring * Fix leak of iconv handles * Allow the setup API to call through to the wide driver functions * Fix potential seg fault in SQLGetPrivateProfileString * Fix a couple of broken casts, and some MS 64bit changes * Add check for postgres driver getting into a spin wait * Fix logging that reported the setting of env attrs failing * Add isql option to wrap strings with quotes * Add isql option -3 to make isql use ODBC 3 calls instead of 2 * Add timestamp to logging output * Pull any errors from driver whern SQLBrowseConnect returns SQL_NEED_DATA * isql now displays any warnings from SQLMoreResults * Add include path to odbc_config --cflags output * Fix some SQLLEN/SQLINTEGER conflicts in the cursor lib * isql now checks if the driver has SQLMoreResults before calling it * A couple of tweeks in the txt driver * Fix More than 1 log msg relevant in odbcinst now * Changed UI plugin technique for odbcinst see... ODBCConfig > main.cpp, and odbcinst > SQLManageDataSources.c and odbcinstQ4 > SQLManageDataSources.cpp * Add more 64 bit changes, remove SQLROWCOUNT and its frends from 64 bit land * Couple of descriptor typo's fixed (Thanks Jess) * Add odbcinstQ4 to support pure Qt4 SQLCreateDataSource and SQLManageDataSources * Add ODBCCreateDataSourceQ4 as Qt4 based exec to SQLCreateDataSource * Add ODBCManageDataSourcesQ4 as Qt4 based exec to SQLManageDataSources * Add "-c" option to odbcinst to call SQLCreateDataSource * Add "-m" option to odbcinst to call SQLManageDataSources * Add ODBCDataManagerQ4 * Add Wrappers (C++, QtCore 4, QtGui 4 - thin wrappers to ODBC) * Add more complete set of driver config options to GUI config * Fix incorrect export file in odbcinstQ * Added some extra features to isql (thanks to Ron Norman for the ideas) * Add diag support lib for driver development and possibly DM This is very 'black-boxed' on purpose. * Fix Replaced diag code in txt driver to use new diag lib. * Add New odbctrac library. * Add Threading can not be config via Qt(4) based GUI * Add New ODBCString library. * Add odbcinst.ini -> ODBC -> TraceLibrary and corresponding GUI Qt(4) config. * prevent the cursor lib from seg faulting if the query isn't a select * Add SQLULEN size display to the output of odbcinst -j * Add mutexes in odbcinst/_logging.c * Remove the MySQL Driver, its woefully out of date now * Remove incorrect path in vms_odbc.opt * rename trace.h to odbctrace.h to avoid potential name conflicts and move to include dir * update unixODBC.spec file * Add README.CYGWIN * Fix build problem with QT4 without QWizard support * Alter how the Ansi-Unicode mapping is done, so a unicode function can be passed to the driver (if it supports it) even if a non unicode connect was done * Fix buffer overrun in SQLDriverConnectW and SQLColAttributesW * I have cut back on a lot of the GUI parts that are being added. The goal is to create a distinct set of files that contains these and other parts that are not part of the core goal of providing ODBC. Likewise the drivers will go on the next release, as most DB's now have their own folk working on their drivers and they all interoperate with unixODBC so its just adding confusion including them here (IMHO that is) * Prevent a potential buffer overrun in the DM * The processing of --enable-rtldgroup had been dropped, back now * Allow the cursor lib to handle multiple result sets 13th-Oct-2006 Release 2.2.12 * Add missing SQLSetStmtOptionA and SQLSetStmtOptionW * The config string being passed into ConfigDsn was wrong, removed semicolon, and added terminating double null * Add help help to isql * Couple of changes to make the build on OSX work better * Alter odbctest FullConnect to use SQLDriverConnect * Replace a missed flag for true 64 bit operation * Add ODBC3<->ODBC2 type mapping in SQLSetParam * Add missing SQLSetStmtOptionW.c * Tidy up the search for GUI lib code in SQLManageDatasource * Backport a couple of changes from the Debian build into the cursor lib * Add extra config settings to the MaxDB/SapDB setup lib * Fix possible exit from SQLConnect without having closed in the driver * Fix configure problem on Tru64 * Fix a build issue on Sinix * Allow calling metadata functions via the cursor lib * Alter args to SQLParamOptions * Fix bug preventing attribute length from being returned from SQLDrivers * Fix broken iusql * SQLTransact via the cursor lib has the args swapped * Remove leak in the postgres driver (error messages were not being released), and yet a different leak in convert.c * Add code to allow the Cursor lib to call SQLGetDiagRec * Updated libtool, automake and autoconf, so expect problems for the next few months... * Add new QT detection macros (Thanks Peter) * Removed some unneeded strlen's from the postgres drivers * Small change to the logging in SQLBrowseConnect * Add additional SQLGetInfo value SQL_ATTR_DRIVER_THREADING (1028) that returns a SQL_USMALLINT containing the level of thread protection afforded the driver by the driver manager * Fix small bug that prevents SQLDrivers from returning the first entry if SQL_FETCH_FIRST is not used * Make DataManagerII check the DB's quote char when creating SQL * The cursor lib wasn't correctly returning the last rowset * Fix problem with the cursor lib, rowsets and SQLExtendedFetch * Fix couple of spelling mistakes in isql * Allow decoupling of SQLHANDLES between application and driver, there is a 64bit DB2 where the driver handles are int's but unixODBC uses void *. There is a define for DRV_SQLHANDLE in DriverManager/drivermanager.h that allows this choice at build time * Add a few extra checks for only unicode API's from the driver * Check for existance of qt-mt lib before adding to link line * added missing cleanup in Postgres driver * Added a contrib directory with (so far) a new ODBCConfig and ODBCStats apps, (Thanks Fizz for those). * Ask the driver when there are no errors left in the DM's store * Add a couple of unicode fixes suppled by Oracle * Small fix for call to SQLGetDiagField * Fix silly typo that was using sizeof( SQL_WCHAR ) instead of SQLWCHAR * Add check for C_TYPE in SQLBindCol, SQLBindParameter, SQLBindParam, and SQLGetData * Fix overflow if the LOG_MESSAGE_LENGTH is increased * Save the last arg for SQLSetConnectAttr if called before connection for later passing to driver * Fix missing mutex release in SQLFreeHandle (thanks Mark) * Add missing maps from unicode in SQLSetDescFieldW and SQLSetStmtAttrW * Handle resetting statement descriptors to implicit values, by passing in NULL or the implicit descrptor to SQLSetStmtAttr with the attribute SQL_ATTR_APP_PARAM_DESC or SQL_ATTR_APP_ROW_DESC * Avoid calling SQLGetInfo for every SQLEndTran/SQLTransact * Remove inconsistency in the return value from SQLGetPrivateProfileString * Fix broken QT_VERSION detection * Add UNICODE wrapper functions in libodbcinst. The ini file is still ascii, so its not got full support at the moment, but any apps that need the W functions should build now * Add GUI support for SQLCreateDataSource * More informative error message if a invalid handle is passed to SQLAllocHandle * Add TIMESTAMP_NO_TMZONE to Postgres drivers types * The ANSI to UNICODE mapping in SQLTablePrivilges was broken * Fix incorrect buffer length in SQLGetInfo when calling unicode drivers 4-March-2005 Release 2.2.11 * Fix a couple of typo errors in postgres driver and odbctest * Fix problem where ini files could be truncated under heavy load * Fix potential hang with FILEDSN's if the connect string included a DSN= entry as well * Don't save the SAVEFILE attribute in the filedsn. * Fixed bug that prevented the setting of some attributes via the DMConnAttr method * Removed the -module entry from the cursor lib, it prevents it building on HPUX. * Add a couple of extra info types to the pull down in odbctest * SQLGetInfoW was returning the wrong length when converting from the ANSI call. The same was also going on the other way. Also fixed same thing for other calls. * Fix incorrect value in SQLFetchScroll in odbctest * Fix memory leak in odbcinstQ * Check for MOC being found, before building GUI parts * Add list of export symbols to libodbcinst * Fix a problem in the cursor lib returning blobs * SQL_DIAG_NUMBER was being stored and returned as a SQLINTEGER instead of a SQLRETURN * Check if we can include sys/stats.h in iniOpen.c * Fix potential buffer overun in SQLConfigDataSource() * Fix problem in odbctest that prevented intervals from being displayed. * Cope with SHLIBEXT not being set when finding the cursor lib * Add a couple of missing Setup64 checks * Small change in __info to conserve memory * Add odbcinst.exp to distrib * Add missing ODBC2 installer stubs * Fix typo in SQLStatistics * Not passing user names and password into isql passes NULLS not empty strings into SQLConnect * Add missing SQLPrepareA from the driver manager export file * Make the default for DontDLClose 1, it doesn't do any harm, and fixes some segfaults * Fix printf format in the postgres driver on 64 platforms 29-Sep-2004 Release 2.2.10 * Add additional check in sqltypes.h to detect AIX 64 bit * Fixed minor copypaste error in configure.in * Fixed problem in configure script that prevented it using the qt-header and qt-lib config args. And allow the QT bin dir to be set. * Add new spec file (Thanks Stefan) * Alter string initialisation in isql to reduce memory use on some platforms * Remove the parts of odbcinstext.h that only are needed in unixODBC builds from outside app builds. (Cheers Stefan) * Small fix to DataManagerII * Protect iconv handle in threaded environments * Extend cursor lib to cope with where clauses * Remove incorrect duplicate function in iniOpen.c * Strip FILEDSN from connection string before passing to driver * If using a cursor lib use "IS NULL" instead of binding nulls * Allow 32 and 64 installations to coexist using a Driver64 entry in odbcinst.ini * Fix uninitialsed value that was causing "Driver does not support the requested version" warning * Fix typo in sqltypes.h that failed when building Perl DBD::ODBC * INI cacheing is not on by default, it can lead to a memory leak * Alter the Makefile.am's so builds outside the config dir can be done * Fix possible buffer overrun in SQLConnect * Replaced crypt auth in postgres with md5 for 7.1 Postgres driver * Fix memory leak in descriptor thread support 24-Jun-2004 Release 2.2.9 * Fix problem so that if SQLGetPrivateProfileString fails because odbcinst.ini doesn't exist, it copys the default value into the output. * Avoid caling SQLFreeEnv the driver more than once. * Rename lo_xxx func in Postgres driver(s) to avoid clash with postgres lib. * Add odbc-config to find compile time options for use with other build tools * Fix call to SQLParamData in cursor lib * Add SQL_NULL_DESC to include files * Remove -M for unixware builds from libtool * Fix descriptor bug in SQLCopyDesc (Thanks Erik) * Add extra iconv targets * Fix bug that stopped RTLD_GROUP from being added to dlopen * Remove mem leak if libodbc.so is loaded using dlopen instead of linked as is normally done. * Add check for LP64 in sqltypes.h * Remove dlclose from ODBCConfig * Fix typo in the readline detection in configure * Fix potential hang with semaphore allocation in driver manager * Alter how the state is set after a SQLParamData to S5 insted of S4 * Stop the driver manager from calling SQLFreeEnv twice in the driver * Add new MySQL source from MyODBC 3.51.07 * Update the uo_fopen functions * Add some extra mutex locks around end_tran code. * Alter the flag to build real 64 bit mode to BUILD_REAL_64_BIT_MODE * Update a couple of prototypes for 64 bit builds * Fix assorted 64 bit warnings and cast issues 17-Feb-2004 Release 2.2.8 * Fix bug in SQLMoreResults that moves to incorrect state * Fix problem where metadata calls fail if in STATE_S5 * Fix bug inserting ini entry with more than one '=' * Fix some stupid leaks in the connection pooling code * Allow the driver manager to probe a pooled connection, to see if its valid. Set the query to use in the odbcinst.ini entry by setting CPProbe = SQL, for example this works well for postgres [PostgreSQL] Description = Postgres SQL Driver Driver = /usr/local/lib/libodbcpsql.so.2.0.0 Setup = /usr/local/lib/libodbcpsqlS.so CPTimeout = 1000 CPTimeToLive = 100 CPProbe = select user FileUsage = 1 DisableGetFunctions = 0 DontDLCLose = 1 * Fix the SQLGetPrivateProfile code when passing NULL sections or names. * Fix SQLGetData to avoid a problem returning unicode from ODBC2 drivers. * Make the header sqlext.h include the unicode header sqlucode.h. This matches the MS header files. * Added DriverConfig lib for Mimer. (From Mimer) * Make connection pooling check using SQLGetConnectOption as well as Attr * Fix leak if iconv is used and a connection fails * Add configure option to disable the use of readline in isql 02-Dec-2003 Release 2.2.7 * Add missing comma in Oracle setup lib * Add -l option to isql to allow setting locale * Fix problem in SQLDriverConnectW that prevented connecting to UNICODE driver. * Remove a couple of the attribute mappings from SQLColAttribute when going from V2 app to V3 driver. * Clear SQLError errors in the same was as SQLGetDiagRec (this will help PHP out somewhat). * Add a check to handle driver that don't support SQLGetEnvAttr * Allow ATTR; in set attr lists from ini file * Small change to warning dialogs in odbctest (Thanks Mark). * Fix the cursor lib to work via SQLFetch as well as the other fetches. * Update the README.OSX file to cover building the cursor lib. * Remove the SQLNumResults() call after a execute. This means the DM doesn't know if there is a result set, but it seems to match what the MS one is doing. * Fix a major mistake in the thread protection, it worked fine until the driver returned a error. * Fix write beyond string bound in SQLDriverConnect.c (Thanks Ocke) * Add call to setlocale( LC_ALL, "" ) in isql.c, can also be set using -l option * Add initial support for Microsoft Interix, details in README.INTERIX * small change to ODBCConfig to have the password field in the driver properties hide the password * Make both # and ; comments in ini files * Update README.OSX to cover changing driver libs into bundles * Fix a couple of small display problems in odbctest * minor updates to odbctest: Have the gui list match the input order and the ini file Restore the selection after Add/Remove * Expand a text buffer to avoid overflow * Add RTLD_MEMBER to dlopen args if available (AIX) * Fix bug in SQLWritePrivateProfileString 21-July-2003 Release 2.2.6 * Add SQL...A() functions as well as W * Add some 64 Bit changes * Add support for SQL_BIGINT in Postgre7.1 driver * Fix bug in libtool that fixes a call to access * Allow setting of odbcinstQ lib load with either environment variable ODBCINSTQ or in the [ODBC] section of odbcinst.ini with a odbcinstq = /path/to/libodbcinstQ.so * Alter the way SQLDataSources works (again :-) * Add configure option to force the way dlopen works * Fix bug in stats collection * Add call to endpwent() to avoid a small leak * Allow isql to handle SQLMoreResults * Add option TracePid in [ODBC] section of odbcinst.ini, setting this makes the DM treat the TracePath as a path to a directory, and creates seperate log file for eack PID in use, mainly of use when used under something like apache. * Add extra unicode string for Solaris, see README.SOLARIS * Sort error messages according to state (as per the spec) * Remove trailing \ from doc/Makefile.am * Fix memory corruption in postgres driver that caused table creation under OpenOffice to fail * Tidy up gODBCconfig so it builds with current tools (or so I hope). 26-Feb-2003 Release 2.2.5 * On error from SQLMoreResult don't change to S1 * Fix build problem with QT 3.1.1 * Fix spelling of error message * Fix bug where multiple connections give ODBC version error (thanks Jay Cai) * Increase the TEXT_FIELD_SIZE in the PG drivers * Set output handle to NULL if SQLAllocHandle call fails * Return any errors from the drivers SQLAllocConnect * Update version of automake and autoconf used to produce distributions * rebuild libtools configure to work with new autoconf 24-January-2003 Release 2.2.4 * Make the DM look in libdir for the cursor lib * Additions to DataManagerII * More thread safe issues and fixes * Fix uninitialised pointer in SQLDriverConnect.c * Fix memory leak in SQLGetDiagRec * Add missing SAG conformance SQLGetfo call in odbctest * Fix bug in SQLDriverConnect where warnings were not getting into the error stack * Add quotes to table names in DataManager * update the file "missing" * Add missing SQL_DECIMAL in logging conversions * VMS build changes... (Thanks Craig) * get caught up with changes since the original VMS port * follow the compiler warnings to fix myriad small nits throughout the sources * change the handling of shareable images so they no longer need to be placed in SYS$SHARE * improve the installation and set-up process * Make the cursor lib build without needing libodbc, it breaks on HPUX * Fix allocation problem in cursor lib * Fix potential seg fault in cursor lib, when bind is done with null indicator * Update README.QNX to cope with QNX 6.2 * Fix problem with flags to dlopen * Make the exit logging in the driver manager display unknown return codes * Fix bug in driver manager where a SQLAllocHandle in the driver can cause a seg fault * Add -s option to isql to allow the input buffer size to be set i.e. isql -s32000 dsn * Update some of the autoconf scripts to handle RH 8 * Add extra attrs to oracle setup lib * Allow DMEnvAttrs to be set in odbcinst.ini as well * Alter the way the config mode is stored, don't use putenv now, as it causes trouble if the DM is unloaded. Also malloc the strings if the environment is set via the DM, to avoid the same problem with putenv. This caused a crash of OpenOffice on Solaris 23-August-2002 Release 2.2.3 * fix bug in unicode_to_ansi_copy * DataManagerII was missed from the last release, sorry, I thought that it had been moved to DataManager. * DatamanagerII: Remove duplicate rows with drivers such as Postgres which doesn't work as expected when getting lists of Schemas * Attempt to set permissions for the file dsn directory. * Fix bug with conversion of ODBC 2 values to SQL_C_WCHAR * Make the postgres drivers return a SQL State of 01000 for a warning, not 00000 * Add option to isql (-x) to specify a separator in hex (0x09 is V tab) or octal (012) * Fix typo in pre 7.1 Postgres driver that broke bound timestamps * Fix what looks like a bug in the libtool dlopen wrapper, its fails to fail, when failing to load a lib. * Only call the ODBC 3 version of SQLGetFuctions if we have requested ODBC3 some drivers (SAPDB) that return ODBC 3 API's only return this call if the connect specified ODBC 3. * Check the attributes being passed into SQLSetConnectAttr, only pas into SQLSetConnectOption if they are ODBC 2 values. The same for SQLSetStmtAttr * Allow double clicks on dsn's to bring up the configure in ODBCConfig * Add extra thread checks for FreeBSD * Add check for SQL_NO_DATA in isql * Add code to make DM cope with SQL_NO_DATA from SQLExec(Direct) * Change UNICODE conversions, remove all inplace converts. * Add support for iconv for the UNICODE to ANSI conversions * Add code to make DM code with SQL_NO_DATA from SQLExec(Direct) * DBFIO: completed basic functionality (DBF file access library) * dbfio: completed basic functionality (test program for DBFIO) * Add checks for usage counts for loaded libs * Replicate the way the MS DM only calls SQLAllocEnv on a driver once * Add fix from John L Miller for SQLEndTran and SQLTransact * Make it try and find a working iconv set of encodings * Small fix to SQLMoreResults from John L Miller * Alter error state return in SQLCloseCursor * Allow state 07009 to be mapped to S1002 or S1093 depending on the calling function * Fix major ineffiency with text fields and the Postgres drivers * Fix incorrect return state from SQLEndTran/SQLTransact * Make rowcount return a count of -1 if its returns a error * Further AIX linking tweeks 08-July-2002 Release 2.2.2 * added -m option to isql * improved row count at end-of-result in isql * allow SQLColAttribute(s)(W) to be called with a column number of 0 to get the descriptor count * Remove -export-symbols from sample, it was causing some problems on Solaris * Add DataManagerII, this is a updated version from Mark Vanderwiel * Update libtool to escape from AIX build problem * Add fix to avoid file handle limitations * Add more UNICODE changes, it looks like it is native 16 representation after all. The old way (Fixed at BE) can be reproduced by defining UCS16BE * Add iusql, its just the same as isql but uses the wide functions * Couple of cast warnings cleaned up * Add change to libtool to clean up AIX build * Create README.AIX * Fix small bug in SQLDriverConnectW, I was allocating 1 byte two little * Fix typo in SQLConnect that wasn't allowing the driver manager to supply SQLFreeConnect for drivers that didn't support this. * Fix build on Caldera OpenUnix8 (not sure why anywone would want to go anywhere near this OS IMHO...) * Move DataManagerII to DataManager * Alter what comes back in the second field from SQLDataSources to be the description from the ODBCINST.INI entry, this matches what happens in with the windows DM. 23-Mar-2002 Release 2.2.1 * odbcinst: now tries to auto create system odbc.ini * odbcinst: implemented -n, -l, -h for -q -s * Add option to disable definition of windows types in sqltype.h * Fix small bug in ini uper case routines. * Added STMT and OPTION to MySQL driver setup * Added -j arg for odbcinst (shows INI file names) * Fixed seg fault bug in Text File driver * Fix small bug in SQLBrowseConnect * Fix check for Darwin (OSX) * Fix bug in sqltypes that stopped 64 bit builds * Fix build problem on 32 bit platforms without long long * Add option to set environment (unix) values via SQLSetEnv, this can also be done in the odbc.ini, for example [sample] Description = Test to DB2 Driver = DB2 DMEnvAttr = SQL_ATTR_UNIXODBC_ENVATTR={DB2INSTANCE=db2inst1} * Fix some cases where the trace file env value was "Trace File" * Make the readline check make sure there are headers as well as libs * Add check to use RTLD_GROUP in libltdl if present * change DWORD definition to unsigned long where applicable * Fix bug in error reporting that cound crash with multiple errors and ODBC3 * Remove C++ comment from exe/odbcinst.c * If we are not building the drivers, dont build sqp * Alter default size of odbctest window * Improve check for stats headers * Add install-data-am section back to Makefile.am to create the empty ini files * Extend naming of cursor lib to work on non linux platforms (it expected a .so) * Make Postgres driver(s) handle {oj ... } syntax * Fix some endian issues with 4 byte unicode support * Update the MySQL driver code 30-Jan-2002 Release 2.2.0 * Allow SQL_ATTR_LOGIN_TIMEOUT to be set on a connected connection doesn't make that much sense, but it mirrors what the Windows DM does. * Change DWORD in sqltypes to be a unsigned int to work on 64 bit platforms * Fix incorrect diag message in SQLSetStmtOption.c * Hack to the 7.1 postgres driver to enable SQLPrepare to be called BEFORE SQLBindParameter * Reset the stmt->prepared flag when going into a SQLParamData state after SQLExecDirect * Fix silly bug that stops odbctest adding the fidt entry on the list * Add missing tracing to SQLBrowseConnect * Fix some potential corruption in SQLGetDiagField * Add some simple cacheing to SQLGetPrivateProfileString * check for redefinition of SQL_OL_CAP to stop AIX build breaking * Add missing getGlobalDefaults in PG 7.1 driver (Thanks Rick) * Fix bug in SQLConnectW (Thanks Artiom) * More mods to SQLConnectW and SQLDriverConnectW * More MS generated 64bit changes * Add MyODBC 3.5 driver. Its a separate configure in Drivers/MySQL Release 2.1.1 2001-12-21 * started to add mac package/install dirs for PackageMaker * added qmake project files as an optional build process * ODBCConfig can build with a static odbcinstQ * Remove auto text driver setup, this breaks new installs as it can't find odbcinst * Fix mixup in SQLSetScrollOptions * Small portability fix for BSDI * Make UNIX Domain socket settable in postgres driver vua UDP= in odbc.ini dsn entry * Fix bug where some SQLGetConnectAttr values were not coming from the driver, but the driver manager * Alter odbctest to make directory select in Manage Auto Test work better * Fix browser in DataManager so that it works with drivers that don't return values from SQLRowCount * Fix some error retrieval problems * Alter the include files to match MS ODBC 3.52 with 64bit support, fix assorted warnings when building on 64bit platforms * Add option to force tracing on, this is for use with apps like StarOffice that disable tracing * Add support for MAX_ROWS in postgres drivers * Add fix to cover Darwin 1.5 (OSX) * Add DisableGetFunctions option to driver section of odbcinst.ini to cope with drivers that can't handle the call (Solid 2.2 AFAIK) * Fix 64 bit bug in Postgres driver * Add some ODBC 3 bits to the Postgres driver to make it run with Star Office 6.0 (beta) Release 2.1.0 2001-11-27 * cvs moved to Source Forge * attempts have been made to cleanup GNU auto-stuff to make the cvs code more accessable - added README.cvs - hopefully "make -f Makefile.cvs" works on more platforms * implemented more in SQLManageDataSources() - created odbcinstQ (plugin for Qt GUI support in odbcinst) - moved most code from ODBCConfig to odbcinstQ * stupid mistake on my part(Nick), left a #ifdef in isql.c that prevented displaying a list of tables * Make calls to localtime in Postgres Driver only when required * Made some changes to Postgres prototypes * Add option to get odbcinst info from stdin * Make SQLError errors clean down after each API call for ODBC 3 apps * Add mapping from SQLColAttribute attributes to ODBC2 attributes * Fix reported leak in ltdl.c * Make the path for file DSN's come from the odbcinst.ini file * If using a ODBC 3 driver call the one off version of SQLGetFunctions * Now builds better on Darwin * Reinstate conversion from wide to ansi types in SQLGetData if the driver is ODBC2, also adjust the buffer length to prevent buffer overrun. * Stop ODBCConfig setting Trace File in odbcinst.ini it should be TraceFile Release 2.0.10 2001-10-14 * odbctxt : escape special chars when read/write lines into a table * Fix bug where a Execute that errors should return to state S2 * Update README.OSX to cover a txt driver problem * Add Drivers/txt/doc to distribution * Add missing text driver setup from spec file * add missing VMS opt files * Add missing include <qmultilineedit.h> from DataManager (Samuel Cote) * Remove LT_GLOBAL from the libtool code. This breaks perl amongst others. * Allow the display of unicode data in logs * Fix stupid WCHAR bug in SQLGetData * Move ifdef in __stats.c to allow the building of ODBCConfig under Mac OSX * Add missing args to prototype in sqlext.h (Thanks Christian) * Pass on unknown connection attributes to driver after connect * Make SQLGetPrivateProfileString return the actual len read, not + 2 * Make the OSX build cleaner, it just needs the dlcompat lib now * Allow ODBCConfig to handle attributes not described in setup libs * Stop the ODBC Version being set when there are open connections * Alter odbcinst error messages to match windows * Fix incorrect installer errors (they were offset by one...) * Create ./odbc.ini if it doesn't exist * Fix typo that stoped odbctest from building on Suns latest compiler * Slightly alter the unicode definitions in sqltypes.h * Add support for FILEDSN in driver manager, odbcinst, and ODBCConfig * Fix buffer overrun in Postgres drivers Release 2.0.9 2001-08-14 * odbctxt: tweeked - now works on PowerPC * Add auto register for text driver to Makefile.am * Add check for flex, sqp won't build with lex now * odbctxtS: now supports CaseSensitive property * Add build time option to select wchar_t UNICODE (4 bytes) as opposed to signed short UNICODE (2 byte) * Add build time option to select the length of logged strings (LOG_MESSAGE_LEN in drivermanager.h) * Fix libtool bug that caused the AIX build to not produce shared libs * Fix couple of typos that caused the build to fail on Solaris * Add conditional for 64 bit application compilation when the sizeof(long) will not have been done by configure * Fix small bug in postgres driver on debian * Add build instruction for QNX * add Slovak translation of gODBCConfig * Fixes to SQLBrowseConnect in driver manager * Get the DM to check with the driver for the CLI Year * Fix small bug in strncasecmp in extras * Add extra support for SQLSetConnectAttr before connection * rename global structure in Postgres drivers to avoid a colision * Add support for presetting Env,Conn and Stmt attributes via the ini file using the following syntax in the dsn section of odbc.ini DMConnAttr = SQL_ATTR_CONNECTION_TIMEOUT=30 DMStmtAttr = SQL_ATTR_NOSCAN=SQL_NOSCAN_OFF;*SQL_ROWSET_SIZE=20 the * indicates thats its a override attribute, so any attempt to call SQLSetStmtAttr to set the rowsize, will always set it to 20 in this example. NOTE: That at the moment, this information will be lost if ODBCConfig is used Release 2.0.8 2001-06-25 * Add definition of alphasort and checks for location of dir.h in the txt driver. * Add some missing functions from cur lib * Fix a problem in configure.in that was loosing LIB settings * Remove C++ comment from sqlext.h * sqp: now makes use of check for NOT NULL in CREATE TABLE * sqp: fixed missing pointer assignment (affected CREATE TABLE) * sqp: added more debugging messages (but turned off by default) * odbctxt: removed long log message (would cause seg fault) * odbctxt: now appends a space to each SQL statement; this is to work around a problem in the sqp lexer when last char is close quote * Fixed a bug in the driver manager that would fail if the driver returned a max size error message * sqp: now makes use of IS NULL and IS NOT NULL * sqp: now makes use of INSERT INTO table(col1,...) * sqp: now makes use of LIKE and NOT LIKE (with optional ESCAPE) * sqp: now makes use of any mix of AND, OR, () in WHERE clause * sqp: now makes use of ? for column value (used in SQLBindParameter) * sqp: now makes use of integers for column values (just mapped to string) * odbctxt: basic implementation of SQLBindParameter (only SQL_C_CHAR input allowed) * odbctxt: new syntaxes of sqp parser taken into account * odbctxt: new option CaseSensitive (Yes or No) allowed in .odbc.ini file * odbctxt: fix message length returned in SQLGetDiagRec function * odbctxt: drop statement when freeing it via SQLFreeHandle * sqp: default string length changed to 255 * Fix threading problem when multiple ENV's are in use Release 2.0.7 Peter Harvey <pharvey@codebydesign.com> And Nick Gorham <nick@lurcher.org> 2001-06-06 * ODBCConfig/DataManager: Updates for Qt 3.0 * Add extra decoding of types in the log output * Fix some type problems for 64 bit platforms * Fix rogue logging in SQLGetInfo * Add correlation and alias to sqp * Add some fixes to the txt driver to enable it to work with StarOffice * Stop Ctrl-D from Segfaulting isql * Add a example autotest to the build * Make isql detect the EOF when not using readline * Tidy up the libs from autoconf * DataManager: refinements such as; logout a DSN, isql history * sqp: CREATE TABLE now supports most data types and some column options * sqp: added DROP TABLE * sqp: added ORDER BY * sqp: enhanced api with sqpOpen, sqpClose... * odbctxt: checked in rewrite (much less code now) * odbctxtS: added setup lib for odbctxt * ODBCConfig: Stats now shows PIDs * Add missing -lpthread in configure (thanks Jon K�re Hellan) * Remove C++ comments from autotest.h * Fix big in Postgres7.1 with binding a column to a double (thanks J�rgen) * Update libtool to 1.4 * Fix problem that looked like a restriction on the size of ini files, but was actually a problem when the same section appeared twice in a file * Add VMS port (Thanks Jason) * Add extra PG7.1 numeric fix (Thanks Zoltan) * Add fix to PG7.1 to allow the retrieval of more than 8K blobs, adjust the define TEXT_FIELD_SIZE in psqlodbc.h (Thanks Bojnourdi) * Fix small typo in SQLConnect (Thanks Martin) * The postgres drivers didn't recognise "Yes" in the ini files, only 1 or 0, fixed now * Avoid "broken pipe" message with postgres (Thanks Gary) * Alter check if cursor lib needed with ODBC 3 apps * Fix couple of bugs with cursor lib * Get to build on Mac OS X (without GUI bits ATM) look at README.OSX for help and hints * Fix for use with QT 3 * Remove default trace option from ODBCINSTConstructProperties * Stop ODBCConfig from accepting null DSN names Release 2.0.6 Nick Gorham <nick@lurcher.org> 2001-04-18 * Add define for _THREAD_SAFE to help AIX builds * Fix bug in cursor lib introduced by UNICODE addon's * Make the header definitions work on 64 bit platforms * Fix a incorrect return from SQLConnect with pooling * Add support for unicode drivers that have ANSI functions renamed to the unicode versions (duh!). * If pooling, then set the flag to not close the driver handle (DontDLClose) * Add CPTimeToLive option to restrict the number of times a driver will be reused (useful with leaky drivers) * Alter logging, and support setting logging via SQLSetConnectAttr call * Add a AutoTest facility to odbctest * Fix incorrect error test in SQLBrowseConnect * Check descriptor is for a open connection * More unicode fixes Release 2.0.5 2001-03-21 Nick Gorham <nick@lurcher.org> * Add extra autoconf checks for -pthread and -mt compiler options * Add Postgres7.1 tree for code from new postgres development * Fix retrieval of errors for SQLTables and SQLColumns call in isql * Fix mem leak in DM if SQLDisconnect was called with open statements or descriptors * Fix broken check if readline needs -lcurses * Add setup lib for SAPDB (thanks Holger Schurig) * Added locale fixes to PG7.1 driver (thanks Zoltan) * Fix configure problem on Solaris Release 2.0.4 2001-02-02 Nick Gorham <nick@lurcher.org> * Changes to Postgres driver for operation with PG 7 and locale changes (Zoltan Boszormenyi) * Fix problem with SQLSetConnectAttr and unicode operation * Apply patch to DataManager from Christian.Werner which fixes truncated query result rows, formatting errors in HTML output, and adds a leading blank to each where expression in order to prevent SQL syntax errors in e.g. LIKE '..' or MATCHES '..'cases. * Add support for SQLDriverLoad and SQLDriverUnload functions Release 2.0.3 2001-01-13 Peter Harvey <pharvey@codebydesign.com> and Nick Gorham <nick@lurcher.org> * sqp: added a yywrap() to eliminate link dependency * sqi: home dir default if no path with database file name * sqi: creates database file if not exists * ini: open fails if existing file appears not be an ini * Fixed problem where null row status array could be passed into SQLExtendedFetch * Fixed further bug in unicode_to_ansi (thanks Martin Edlman) * Fixed bug in UNICODE converison in SQLGetInfo * Added sqi/test to build tree, its moved to exe * Add extra checks for readline to see if -lcurses is needed * Add check for -lpthreads that should be ok on Tru64 * Replace printf with puts in isql to cope with columns containing '%' Release 2.0.2 2001-01-08 Peter Harvey <pharvey@codebydesign.com> * ODBCConfig: Repurposed 'Tracing' tab. Now is 'Advanced' and contains both Tracing and Pooling options. * Fixed bug in __info that caused SQLGetDiagRec to fail Release 2.0.1 2001-01-06 Nick Gorham <nick@lurcher.org> * Fix bug introduced with UNICODE that corrupted the SQLSTATE from SQLError Release 2.0.0 2001-01-04 Nick Gorham <nick@lurcher.org> * Added table browse for DataManager * Fix problem in template driver with Solaris compiler * Add msql-include option to specify search path * Fix compile problem in MiniSQL code with Solaris compiler * Fix conditional include of strings.h in ODBCConfig build * Fix tracing in SQLConnect * Alter check for DSN length in SQLConnect * Validate input handle before setting output handle * Fix error code from SQLSpecialColumns and null table names * Fix potential deadlock in SQLFreeHandle * Add change to make the Postgres driver look for the local socket in two places to cope with debian distrib * Fiddle with the MiniSQL searching again * Add sqlucode.h to headers * Fix threaded race condition in __handles.c * Revamped Credits page in ODBCConfig. * Show more useful info in DataManager tree-view * Fixed problem with DataManager 'hanging' upon exit * Added -pthread option to gcc calls when needed * Now needs QT 2.2.x, changed configure to check * Add missing identifier_type in SQLSpecialColumns log * Add some checks for long columns in isql and DataManager * Add connection pooling support to driver manager * ODBCConfig; Code cleanup. Removed extra class layer created by QtArch * ODBCConfig.Drivers.Config; driver specific options now accepted, if already exist in odbcinst.ini, as simple text fields in GUI * ODBCConfig and DataManager now attempt to save and restore state... such as window geometry. * ODBCConfig now supports connection pooling options. * ODBCConfig now has a Stats tab which is similar to CPU or mem monitor. This will be improved upon and the code will likley make its way into a dock widget * Add UNICODE support * Disable the default building of static libs * Add support for GNU portable threads Release 1.8.13 2000-11-14 Nick Gorham <nick@lurcher.org> * Add missing line continuation char in SQLGetDiagField.c * Add fix to SQLGetDiagField to return the server name on statements and descriptors * Remove -lcrypt from all but the Postgres driver build * Remove CR/LF expansion in Postgres driver * odbctest was calling SQLPrimaryKeys when it should have been calling SQLTablePrivileges * Add SQL_DRIVER_HDESC support to SQLGetInfo * Add display of returned error text in log file * Take notice of DontDLClose when calling ConfigDataSource. * Fix duplicated log messages on failed connect * Fix incorrect arg to SQLError, change from SQLINTEGER to SQLSMALLINT (Thanks Ralf) * Updated libtool to 1.3.5 * Fixed crash in SQLConnect when NULL server and SQL_NTS passed in (Thanks Venu for the next four changes) * The error code mapping was wrong, it should only map ODBC 3 errors to ODBC 2, not the other way around * Fixed a incorrect error return in SQLPrepare when a NULL string was passed * Zero the handles when released, just to avoid reuse of values * Added readline support to isql, (thanks Tomas Zellerin) * Support the setting of SQL_AUTOCOMMIT before connecting * Fixed bug in odbctest's SQLColAttributes call * Add test in configure for localtime_r and use if present 2000-08-18 Nick Gorham <nick@lurcher.org> Release 1.8.12 * Fix typo in Postgres driver. * Add i18n support to the Postgres driver (thanks Zoltan) * Remove fix for Postgres driver and large objects, it breaks the SQLColumns call :-( Release 1.8.11 2000-08-16 Nick Gorham <nick@lurcher.org> * Add --enable-fastvalidate option. This reduces the safety of the handle checking but improves performance when using many handles * If SQLDriverConnect is called with a NULL con_str_in look for the DEFAULT DSN entry * Remove a underscore from odbcinst_system_file_path, it seem's to cause the linker on AIX to have problems * Remove some additional C++ comments from the postgres driver * Call SQLSetConfigMode before calling SQLConfigDataSource * Fix error handling in case of referential integrity violations in Postgres driver * Fix problem with SQLColAttributes swapping its args, and don't check the driver version before mapping to ODBC 3 values. (thanks Tomas) * Make SQLDescribeParam work in state S4 and above, when in ODBC 2 mode * Avoid potential buffer overrun in __info.c when reporting errors from SQLConnect/SQLDriverConnect * Fix potential mem corruption in SQLGetDiagField (thanks Jay) * Add fix to allow the Postgres driver to receive large objects (thanks Bill) * Fix buffer overrun in SQLGetDiagField (thanks again Jay) * Fix for SQLGetDiagField(SQL_DIAG_SUBCLASS_ORIGIN) returning a null string, it now returns something meaningful * The Postgres driver didn't shupdown the connection to the database before dropping the socket * Fix incorrect return from SQLDataSources * Make SQLDriverConnect return all errors from the driver not just the first one * Add Oracle setup lib for http://www.easysoft.org/projects/oracle * Stop isql calling SQLFetch if the query doesn't generate a result set. This stops the function sequence error * Add missing break in postgres password authentication * Add fix in SQLTables for broken version of EXCEL * Fix a bug that caused SQLTransact to fail if called with a connection handle in state C4. This caused Corel Paradox to fall over Release 1.8.10 2000-06-15 Nick Gorham <nick@lurcher.org> * Add some fixes to make it work and compile on IRIX (Murad) * Add a couple of missing casts in odbctest (Michael) * Fix BOOL bug in postgres driver (Dmitriy) * use setenv rather that putenv if available * Fix a couple of bugs in odbctest/attr.cpp * Fix problem where info warnings could be lost * Fix a couple of problems in the Postgres driver * Fix bug that caused a success with info message from SQLExecute or SQLExecDirect to be lost if used with a ODBC 3 driver and the application called SQLGetDiagRec * Fix problem where bookmarks were failing for StarOffice 5.2 * Stop SQLDriverConnect dumping core when passed a null dsn string * Map ODBC 2 SQLSTATE values to ODBC 3 * Add missing odbcconfig.h to the install include in gODBCConfig * Fix incorrect state from Postgres Driver * Fix integer length problem with SQLExtendedFetch that manifested on big endian platforms (Sparc,Aix,HPUX etc) (Alex) * Avoid clash with definition of CHAR in GNOME XML layer * odbctest SQLExtendedFetch was using the wrong orentation value * Add define for SQLTCHAR * Fix problem in setting tracing on, and a core dump when loading the cursor lib failed (Steve) Release 1.8.9 2000-06-13 Nick Gorham <nick@lurcher.org> * Fix a State problem when coming out of a SQLParamData cycle * Fix bug where SQLBrowseConnect may leave a connection in C1 not C2 * Pass LOGIN_TIMEOUT onto driver if it is set before the connect * Reverse the test to set DIAG_CLASS_ORIGIN * Return SQL_DIAG_SERVER_NAME and SQL_DIAG_RETURNCODE * Allow explicit allocation of Descriptors * Fix a problem with the SQLFetchScroll -> SQLExtendedFetch mapping * Fix a problem in the MiniSQL Makefile.am * Call SQLSetConfigMode before calling ConfigDSN * Fix problem in SQLCopyDesc and complete case when DM does the work * Return SQL_SUCCESS_WITH_INFO messages from SQLConnect * Added MetaDataBlockFetch connection attribute to esoob driver * Fix bug in __info.c that caused a small memory corruption when logging was on * Enable the reporting of errors on descriptors * Fix extra ] in the msql part of configure.in * Add error reporting to DataManager (Tim) * Assorted fixes to text driver (Peter) * odbctest now ready to use (hopefully) 2000-05-03 Nick Gorham <nick@lurcher.org> * Fix bug in configure.in where disabling build of drivers also disabled build of GUI bits. * SQLDataSources should return the Driver Description, not the data source description * Add partly written odbctest GUI to project * Remove conditional around VOID typedef in sqltypes.h by default Release 1.8.8 2000-04-27 Nick Gorham <nick@lurcher.org> * Add extra include for unixware * Added some fixes to the template driver found by Nikolai Afanasiev, and also fix the logging code to recongnise 'On' * Alter distrib to not include moc generated files * Using the env var ODBCHOME was a "real bad idea" for perl I have changed it to ODBCSYSINI * Alter logging so that if the log file fails to open stderr is not used. This caused problems in server processes. * Fix a problem with SQLDrivers * Fix a potential leak, that stopped SQLDisconnect being called * Fix problems with text driver * Improve isql (thanks Ralf) * Make gODBCConfig a proper gtk widget * Remove stray printf in the DM code * Fix a couple of daft bugs, thanks to Tim Roepken * Fix a problem where handles were not being free'd * Fix a problem that stopped StarOffice 5.2 working with a ODBC 2 driver, it failed to set SQLGetDiagRec in the output of SQLGetFunctions 2000-03-11 Nick Gorham <nick@lurcher.org> * Adjust configure to check for limits, and use this to find max file path. It was only 14 char before under HP-UX * Make ODBCCOnfig try calling SQLConfigureDSN, for setup libs that can do it themself * Make the mutex functions static * Remove some unwanted X functions from the lib line * Remove dlfcn.h in ODBCConfig * Rationalise environment vars, ODBCHOME points to where odbc.ini and odbcinst.ini are. ODBCINI points to the user ini file (normally ~/.odbc.ini) * Fix bug causing all connection errors to be lost after connecting * Add GTK+ Based gODBCConfig 2000-03-01 Nick Gorham <nick@lurcher.org> * Add extra defines to sqltypes.h * Fix bug in the Postgres driver with the use if the SQL_DATA_AT_EXEC value * Replace the ODBCINI with ODBCHOME environment var 2000-02-23 Nick Gorham <nick@lurcher.org> * Remove the GLOBAL flag from the dlopen in the libtool lib. This caused problems with perl DBD::ODBC * Fix the support for threads and Solaris * Add odbcinst.ini flag to disable unloading the driver, this enables the IBM DB2 lib to be used Release 1.8.6 2000-02-21 Nick Gorham <nick@lurcher.org> * Fix memory leak in the Postgres driver * Fix a bug in the DM when using threads and ODBC 3 drivers, SQLGetDiagField fails * Fix a situation where PHP can crash the DM by calling SQLFreeStmt after SQLDisconnect * Add support for Solaris Threada * Make building with thread support the default 2000-02-12 Nick Gorham <nick@lurcher.org> * Add option to use ODBCINI to move the odbcinst and odbc ini file. This was asked for by applix * Add setup lib for Easysoft ODBC-ODBC bridge 2000-02-02 Nick Gorham <nick@lurcher.org> * Add flag in odbcinst.ini to disable the SQLFetch -> SQLExtendedFetch mapping for broken drivers * Alter the ini file parsing so the right hand side can contain extra ='s * Fix a bug in SQLGetStmtAttr with a missing '&' * Added a couple of patches from Manush to improve working with the solid driver Release 1.8.4 2000-01-18 Nick Gorham <nick@lurcher.org> * Fix bug in SQLAllocHandle where a failed stmt alloc would report a error on the statement not the connection and dump core * Make the default path when adding a driver in ODBCConfig $prefix\lib * Add the missing [unixODBC] prefix to error messages * Fix a problem in template/SQLDriverConnect found by Charles Overbeck * Update to libtool 1.3.4 * Fix problem in ODBCConfig where a cast to const char * was needed Release 1.8.3 1999-12-28 Nick Gorham <nick@lurcher.org> * Fix a bug where a SQLDisconnect was not releasing the lib handle 1999-12-11 Nick Gorham <nick@lurcher.org> * Merge in changes from the Postgres ODBC people to fix a problem with LONGBIN's * Mask out the password fields in log for SQLConnect and SQLDriverConnect * Change a incorrent HY004 error return to IM004 in SQLConnect Release 1.8.2 For AlphaLinux Distribution 1999-12-02 Nick Gorham <nick@lurcher.org> * Fix some daft mistakes in odbcinst.c, and the template driver * Remove the C++ comments from the Postgres driver so it can be compiled with a C compiler * Add LIBSOCKET to the Postgres driver link line * Add strncasecmp to extras * Make the Postgres driver use the socket lib if needed 1999-11-23 Nick Gorham <nick@lurcher.org> * Add support for encrypted passwords in the Postgre driber * Remove some remaining non-libtool dlopen code * Fix some threading problems 1999-11-19 Nick Gorham <nick@lurcher.org> Release 1.8.1 ********** * Make the code more portable * Remove CR from Postgres source 1999-11-17 Nick Gorham <nick@lurcher.org> * Fix a bug with the ODBC 3 error functions. * Fix a missing function_entry from SQLExecDirect(). Release 1.8 ************* 1999-11-13 Nick Gorham <nick@lurcher.org> * Fix bug with logging that killed StarOffice * Upgrade the Postgres driver to 6.4.6, this fixes a problem with fields containing cr/lf combinations. * Change the logging so that the logging info comes from a special [ODBC] section in odbcinst.ini. This means that what goes on before the connect can be logged 1999-11-10 Nick Gorham <nick@lurcher.org> * Make SQLError,SQLGetDiagField and SQLGetDiagRec usable with all versions of application and driver. * Add configure flag to specify where to look for the MiniSQL lib. * Add configure flag to disable the building of the drivers. 1999-11-02 Nick Gorham <nick@lurcher.org> * Fix bug in the cursor lib introduced by the fix for the glibc bugs. * Fix bug where SQLSetConnectAttr/Option can return without clearing a connection thread lock. 1999-10-29 Nick Gorham <nick@lurcher.org> * Make the postgres driver able to connect via UNIX domain sockets 1999-10-29 Holger Bischoff <holger.bischoff@sap.com> * Assorted stupid bugs fixed in the DM 1999-10-26 Nick Gorham <nick@lurcher.org> * Started rewrite of the SQLError/SQLGetDiagSupport in the driver manager * Fix isql so that SQL_SUCCESS_WITH_INFO is a success for SQLConnect 1999-10-20 Greg Bentz <greg@freedomintelligence.com> * Added fix for SQLTransact, it was checking for a non null henv first, it now checks the hdbc first (Thanks Greg) * The connection_count in the environment handle was only incremented on the first connection, but decremented on all free dbc's, this caused the count to go negative at time. 1999-10-09 Nick Gorham <nick@lurcher.org> * Added Manush's patch to map ODBC 3-2 datetime values 1999-10-05 Nick Gorham <nick@lurcher.org> * working on getting the build to be more portable * added --enable-gui configure option to turn off all c++ and GUI bits * improved performance by removing logging core when logging is off * added extras dir to contain code for missing functions on certain platforms * first day out for the cursor lib, read only at the moment, a sample program is included in samples/cursor.c * fixed problem that if the user .odbc.ini was not found the code failed to go on to the system odbc.ini * fixed problem caused by some versions of dlsym reporting function that should be in the driver and returning the entry from the DM Release 1.7 ************* 1999-07-26 Nick Gorham <nick@lurcher.org> * New config added, now using autoconf. * Thread safe support added. * Assorted Driver Manager bug fixes added. * default location for odbcinst.ini and odbc.ini is now /usr/local/etc to conform to GNU standards. 1999-05-15 Peter Harvey <pharvey@codebydesign.com> * Drivers: nn driver added 1999-05-10 Nick * DM: New Dm added. 1999-04-04 Martin Evans <martin@easysoft.com> * Makefiles: Some changes to; a) use gcc, and b) build into other than /usr 1999-03-30 Peter Harvey <pharvey@codebydesign.com> * ChangeLog: Started ChangeLog PK㰐\�Z�55NEWSnuȯ��Release History =============== NOTE: I have moved what was here into ChangeLog, it seemed to make more sense that way (NG). Release 2.2.10 29-Sep-2004 Release 2.2.9 24-Jan-2004 Release 2.2.8 17-Feb-2004 Release 2.2.7 02-Dec-2003 Release 2.2.6 21-July-2003 Release 2.2.5 26-Feb-2003 Release 2.2.4 24-January-2003 Release 2.2.3 23-August-2002 Release 2.2.2 8-July-2002 Release 2.2.1 23-Mar-2002 Release 2.2.0 30-Jan-2002 Release 2.1.1 2001-12-21 Release 2.1.0 2001-11-27 Release 2.0.10 2001-10-14 Release 2.0.9 2001-08-14 Release 2.0.8 2001-06-25 Release 2.0.7 2001-06-06 Release 2.0.6 2001-04-18 Release 2.0.5 2001-03-21 Release 2.0.4 2001-02-02 Release 2.0.3 2001-01-13 Release 2.0.2 2001-01-08 Release 2.0.1 2001-01-06 Release 2.0.0 2001-01-04 Release 1.8.13 2000-11-14 Release 1.8.12 2000-08-18 Release 1.8.11 2000-08-16 Release 1.8.10 2000-06-15 Release 1.8.9 2000-06-13 Release 1.8.8 2000-05-03 Release 1.8.6 2000-02-21 Release 1.8.4 2000-02-12 Release 1.8.3 1999-12-28 Release 1.8.2 1999-12-11 Release 1.8.1 1999-11-17 Release 1.8 1999-11-13 Release 1.7 1999-07-26 PK㰐\u�^DDREADMEnuȯ��+-------------------------------------------------------------+ | unixODBC | +-------------------------------------------------------------+ README --------------------------------------------------------------- Description: unixODBC is an Open Source ODBC sub-system and an ODBC SDK for Linux, Mac OSX, and UNIX. License: All libraries are LGPL Version 2.1 All programs are GPL Version 2.1. Parts: unixODBC includes the following; - Driver Manager - Installer Library and command line tool - Command Line Tools to help install a driver and work with SQL How To Start: Look for and read README files with extensions of interest. Then read the INSTALL file. You can also jump into the doc directory and browse information there. And do not forget the online stuff. Some documentation may be a bit out of date the vast majority of it should be ok. Config Files: The ODBC Installer Library is responsible for reading and writing the unixODBC config files. The savvy can look at; _odbcinst_SystemINI.c _odbcinst_UserINI.c In any case; you can override where unixODBC looks for its system config files by setting the ODBCSYSINI environment variable during the use of unixODBC. Resources: http://sourceforge.net/projects/unixodbc/ PK㰐\�����README.distnu�[���About unixODBC in this distribution ----------------------------------- In addition to the unixODBC package itself, you will want to install some or all of these related packages: mysql-connector-odbc MySQL driver, needed to connect to MySQL databases postgresql-odbc PostgreSQL driver, needed to connect to PostgreSQL unixODBC-gui-qt Optional configuration management and test programs The recommended driver definition for MySQL is: [MySQL] Description = ODBC for MySQL Driver = /usr/lib/libmyodbc5.so Setup = /usr/lib/libodbcmyS.so Driver64 = /usr/lib64/libmyodbc5.so Setup64 = /usr/lib64/libodbcmyS.so FileUsage = 1 You can adjust the name (in square brackets) and the description, but the other items should usually be used verbatim. The recommended driver definition for PostgreSQL is: [PostgreSQL] Description = ODBC for PostgreSQL Driver = /usr/lib/psqlodbcw.so Setup = /usr/lib/libodbcpsqlS.so Driver64 = /usr/lib64/psqlodbcw.so Setup64 = /usr/lib64/libodbcpsqlS.so FileUsage = 1 PK㰐\a��00"doc/AdministratorManual/index.htmlnuȯ��PK㰐\#9�T�%�%%i0doc/AdministratorManual/odbcinst.htmlnuȯ��PK㰐\d]H��!wVdoc/AdministratorManual/php3.htmlnuȯ��PK㰐\Z��!ZZ$�^doc/AdministratorManual/unixODBC.gifnuȯ��PK㰐\�{o�[2[2*>bdoc/AdministratorManual/unixODBCsetup.htmlnuȯ��PK㰐\v8��(�doc/ProgrammerManual/Tutorial/close.htmlnu�[���PK㰐\�����(�doc/ProgrammerManual/Tutorial/conne.htmlnu�[���PK㰐\�W��\ \ &�doc/ProgrammerManual/Tutorial/dsn.htmlnu�[���PK㰐\C��N�N(ùdoc/ProgrammerManual/Tutorial/gloss.htmlnu�[���PK㰐\J��(�doc/ProgrammerManual/Tutorial/index.htmlnu�[���PK㰐\=PߪF F ( doc/ProgrammerManual/Tutorial/intro.htmlnu�[���PK㰐\�r#8��'�doc/ProgrammerManual/Tutorial/navi.htmlnu�[���PK㰐\l÷���&doc/ProgrammerManual/Tutorial/odbc.cssnuȯ��PK㰐\��Q�(�2doc/ProgrammerManual/Tutorial/query.htmlnu�[���PK㰐\���;,,(]Adoc/ProgrammerManual/Tutorial/resul.htmlnu�[���PK㰐\h����\doc/ProgrammerManual/index.htmlnuȯ��PK㰐\Bv3~��!pdoc/ProgrammerManual/unixODBC.gifnuȯ��PK㰐\n����� qdoc/UserManual/Figure1.gifnuȯ��PK㰐\ą_nnB�doc/UserManual/Figure2.gifnuȯ��PK㰐\'���))��doc/UserManual/Figure3.gifnuȯ��PK㰐\����) ) m�doc/UserManual/Figure4.gifnuȯ��PK㰐\�ǁ�.�.��doc/UserManual/Figure6.gifnuȯ��PK㰐\�����doc/UserManual/My.sqlnuȯ��PK㰐\�l?��%,�doc/UserManual/StarOfficeDataGrid.gifnuȯ��PK㰐\�.��kIkIIdoc/UserManual/index.htmlnuȯ��PK㰐\Z��!ZZ�Tdoc/UserManual/unixODBC.gifnuȯ��PK㰐\1��( ( �Xdoc/lst/InternalStructure.gifnu�[���PK㰐\�����bdoc/lst/InternalStructure.htmlnu�[���PK㰐\n,��;hdoc/lst/InternalStructure.vsdnu�[���PK㰐\�w����hdoc/lst/InternalStructure2.gifnu�[���PK㰐\����dldoc/lst/InternalStructure2.htmlnu�[���PK㰐\��q�sdoc/lst/InternalStructure3.gifnu�[���PK㰐\j��A{{ydoc/lst/InternalStructure3.htmlnu�[���PK㰐\Dq����ۀdoc/lst/InternalStructure4.gifnu�[���PK㰐\h�i��doc/lst/InternalStructure4.htmlnu�[���PK㰐\�''��<�doc/lst/InternalStructure5.gifnu�[���PK㰐\r%':HH��doc/lst/InternalStructure5.htmlnu�[���PK㰐\N/�3���doc/lst/InternalStructure6.gifnu�[���PK㰐\��%���doc/lst/InternalStructure6.htmlnu�[���PK㰐\κ[���+�doc/lst/InternalStructure7.gifnu�[���PK㰐\�����J�doc/lst/InternalStructure7.htmlnu�[���PK㰐\l 8% >�doc/lst/InternalStructure8.gifnu�[���PK㰐\��u����doc/lst/InternalStructure8.htmlnu�[���PK㰐\�Ykkl�doc/lst/InternalStructure9.gifnu�[���PK㰐\�Jn2��%�doc/lst/InternalStructure9.htmlnu�[���PK㰐\��T{��q�doc/lst/back.gifnu�[���PK㰐\%{����u�doc/lst/next.gifnu�[���PK㰐\0m�\� � }�doc/index.htmlnuȯ��PK㰐\~�؏�b�doc/smallbook.gifnuȯ��PK㰐\Bv3~��2�doc/unixODBC.gifnuȯ��PK㰐\�T�//�AUTHORSnu�[���PK㰐\��Ko_o_t�COPYINGnuȯ��PK㰐\+J���#�# VChangeLognu�[���PK㰐\�Z�557zNEWSnuȯ��PK㰐\u�^DD�~READMEnuȯ��PK㰐\������README.distnu�[���PK88,B�
/home/emeraadmin/www/node_modules/.bin/../isobject/../array-slice/../../4d695/unixODBC.zip