***********************************************************************
                   MyODBC Release Notes       
                     Version 02.50.39     
                  Updated : 15 Sep 2001      
***********************************************************************
        
======================================================
CONTENTS
======================================================
1. What is MyODBC ?
2. MyODBC New Fatures in 02.50.39
3. MyODBC Bug Fixes in 02.50.39
4. MyODBC Supported Features
5. MyODBC Open Issues
6. Applications working with MyODBC
7. MyODBC DSN Interface options
8. Reporting problems with MyODBC

======================================================
1. WHAT IS MYODBC ?
======================================================

MySQL, the most popular Open Source SQL database, is provided by MySQL AB.
MySQL AB is a commercial company that builds its business providing services
around the MySQL database.

MySQL provides support for ODBC by means of the MyODBC program. For more
information about MyODBC, please visit the following link:
http://www.mysql.com/documentation/mysql/bychapter/manual_ODBC.html#ODBC

======================================================
2. MYODBC NEW FEATURES IN 02.50.39
======================================================
Added SQL_ADD feature to SQLSetPos to perform resultset insert operaton


======================================================
3. MYODBC BUG FIXES IN 02.50.39
======================================================

* Fix to SQLDriverConnect CONNECTION DIALOG, in order to eliminate the display
  of the dialog when DSN less connection is specified. Also, in case if the 
  dialog appears, it displays the error message at the bottom of the connection
  dialog in order to explain the reason.

* Fix to eliminate the error message "SQLBindParameter not used for all 
  parameters" when the application requested the result set information
  on a prepared statement (Fix to Centura Team Developer)

* Fix to cursor stuff, in order to eliminate complexity w.r.t. access,
  so that even when some wrong calls made by Ms Access, driver should be
  able to capable of handling it.

* Fix to SQL_LOCK_TYPES in SQLGetInfo

* Fix to SQL_TXN_CAPABLE in SQLGetInfo, in order to return to application to 
  determain whether the underlying server supports transactions or not.

* Fix to positioned delete/update statements through unixODBC/iODBC, when it
  is deleting more than one row.

* Fix to memory leak in the cursor, when invalid SQL statement has been passed.

* Fix to 'cursor name undefined' through access.

* Fix to Recordset DELETE/UPDATE/INSERT from Access

* Fix to read the OPTION value from odbc.ini on linux when it has only 
  one digit.

* Fix to SQLNativeSql inoder to handle SQL_NTSs

* Fix to column size and precision returned by SQLDescribeCol or 
  SQLColAttributes when the data type is either numeric/decimal.

======================================================
4. MYODBC SUPPORTED or UN-SUPPORTED FEATURES
======================================================

[Functions]                 [Supported]    [Level]
SQLAllocConnect()           Supported       Core
SQLAllocEnv()               Supported       Core
SQLAllocStmt()              Supported       Core
SQLBindCol()                Supported       Core
SQLCancel()                 Supported       Core
SQLColAttribute()           Supported       Core
SQLColumns()                Supported       Level 1
SQLConnect()                Supported       Core
SQLDataSources()            Supported       Level 2
SQLDescribeCol()            Supported       Core
SQLDisconnect()             Supported       Core
SQLError()                  Supported       Core
SQLExecDirect()             Supported       Core
SQLExecute()                Supported       Core
SQLFetch()                  Supported       Core
SQLFreeConnect()            Supported       Core
SQLFreeEnv()                Supported       Core
SQLFreeStmt()               Supported       Core
SQLGetConnnectOptions()     Supported       Level 1
SQLGetCursorName()          Supported       Core
SQLGetData()                Supported       Level 1
SQLGetFunctions()           Supported       Level 1
SQLGetInfo()                Supported       Level 1
SQLGetStmtOption()          Supported       Level 1
SQLGetTypeInfo()            Supported       Level 1
SQLNumResultCols()          Supported       Core
SQLParamData()              Supported       Level 1
SQLPrepare()                Supported       Core
SQLPutData()                Supported       Level 1
SQLRowCount()               Supported       Core
SQLSetConnectOption()       Supported       Level 1
SQLSetCursorName()          Supported       Core
SQLSetParam()               Supported       Core
SQLSetStmtOption()          Supported       Level 1
SQLSpecialColumns()         Supported       Level 1
SQLStatistics()             Supported       Level 1
SQLTables()                 Supported       Level 1
SQLTransact()               Supported       Core
SQLBindParameter()          Supported       Level 1
SQLBrowseConnect()          Unsupported     Level 2
SQLColumnPrivileges()       Unsupported     Level 2
SQLDescribeParam()          Supported       Level 2
SQLDriverConnect()          Supported       Level 1
SQLDrivers()                Supported       Level 2
SQLExtendedFetch()          Supported       Level 2
SQLForeignKeys()            Supported       Level 2
SQLMoreResults()            Supported       Level 2
SQLNativeSQL()              Supported       Level 2
SQLNumParams()              Supported       Level 2
SQLParamOptions()           Unsupported     Level 2
SQLPrimaryKeys()            Supported       Level 2
SQLProcedureColumns()       Unsupported     Level 2
SQLProcedures()             Unsupported     Level 2
SQLSetPos()                 Supported       Level 2
SQLSetScrollOptions()       Supported       Level 2
SQLTablePrivileges()        Unsupported     Level 2

[Driver Info]
SQL_ACTIVE_CONNECTIONS      SQL_SUCCESS     Core
SQL_ACTIVE_STATEMENTS       SQL_SUCCESS     Core
SQL_CONVERT_FUNCTIONS       SQL_SUCCESS     Core
SQL_DATABASE_NAME           SQL_SUCCESS     Core
SQL_DBMS_NAME               SQL_SUCCESS     Core
SQL_DBMS_VER                SQL_SUCCESS     Core
SQL_DATA_SOURCE_NAME        SQL_SUCCESS     Core
SQL_DRIVER_NAME             SQL_SUCCESS     Core
SQL_DRIVER_ODBC_VER         SQL_SUCCESS     Core
SQL_DRIVER_VER              SQL_SUCCESS     Core
SQL_FETCH_DIRECTION         SQL_SUCCESS     Core
SQL_FILE_USAGE              SQL_SUCCESS     Core
SQL_GETDATA_EXTENSIONS      SQL_SUCCESS     Core
SQL_LOCK_TYPES              SQL_ERROR       Core
SQL_NUMERIC_FUNCTIONS       SQL_SUCCESS     Core
SQL_ODBC_API_CONFORMANCE    SQL_SUCCESS     Core
SQL_ODBC_SAG_CLI_CONFORMANCE    SQL_SUCCESS Core
SQL_ODBC_VER                SQL_SUCCESS     Core
SQL_POS_OPERATIONS          SQL_SUCCESS     Core
SQL_POSITIONED_STATEMENTS   SQL_SUCCESS     Core
SQL_ROW_UPDATES             SQL_SUCCESS     Core
SQL_SEARCH_PATTERN_ESCAPE   SQL_SUCCESS     Core

[DataSource Info]
SQL_ACCESSIBLE_PROCEDURES   SQL_SUCCESS     Core
SQL_ACCESSIBLE_TABLES       SQL_SUCCESS     Core
SQL_BOOKMARK_PERSISTENCE    SQL_SUCCESS     Core
SQL_CURSOR_COMMIT_BEHAVIOR  SQL_SUCCESS     Core
SQL_CURSOR_ROLLBACK_BEHAVIOR    SQL_SUCCESS Core
SQL_DATA_SOURCE_READ_ONLY   SQL_SUCCESS     Core
SQL_DEFAULT_TXN_ISOLATION   SQL_SUCCESS     Core
SQL_MULT_RESULT_SETS        SQL_SUCCESS     Level 2
SQL_MULTIPLE_ACTIVE_TXN     SQL_SUCCESS     Core
SQL_NEED_LONG_DATA_LEN      SQL_SUCCESS     Level 1
SQL_NULL_COLLATION          SQL_SUCCESS     Core
SQL_OWNER_TERM              SQL_SUCCESS     Core
SQL_OWNER_USAGE             SQL_SUCCESS     Core
SQL_PROCEDURE_TERM          SQL_SUCCESS     Core
SQL_QUALIFIER_TERM          SQL_SUCCESS     Core
SQL_SCROLL_CONCURRENCY      SQL_SUCCESS     Core
SQL_SCROLL_OPTIONS          SQL_SUCCESS     Core
SQL_STATIC_SENSITIVITY      SQL_SUCCESS     Core
SQL_TABLE_TERM              SQL_SUCCESS     Core
SQL_TIMEDATE_ADD_INTERVALS  SQL_SUCCESS     Core
SQL_TIMEDATE_DIFF_INTERVALS SQL_SUCCESS     Core

[Connection Attr]
SQL_ACCESS_MODE             SQL_SUCCESS     Core
SQL_AUTOCOMMIT              SQL_SUCCESS     Core
SQL_CURRENT_QUALIFIER       SQL_SUCCESS     Core
SQL_LOGIN_TIMEOUT           SQL_SUCCESS     Core
SQL_ODBC_CURSORS            SQL_SUCCESS     Core
SQL_PACKET_SIZE             SQL_SUCCESS     Core
SQL_TRANSLATE_DLL           SQL_ERROR       Core
SQL_TRANSLATE_OPTION        SQL_ERROR       Core
SQL_TXN_ISOLATION           SQL_SUCCESS     Core

[Statement Attr]
SQL_ASYNC_ENABLE            SQL_SUCCESS     Level 2
SQL_BIND_TYPE               SQL_SUCCESS     Core
SQL_CONCURRENCY             SQL_SUCCESS     Core
SQL_CURSOR_TYPE             SQL_SUCCESS     Core
SQL_KEYSET_SIZE             SQL_SUCCESS     Core
SQL_MAX_LENGTH              SQL_SUCCESS     Level 1
SQL_MAX_ROWS                SQL_SUCCESS     Level 2
SQL_NOSCAN                  SQL_SUCCESS     Level 1
SQL_QUERY_TIMEOUT           SQL_SUCCESS     Core
SQL_RETRIEVE_DATA           SQL_SUCCESS     Level 2
SQL_ROWSET_SIZE             SQL_SUCCESS     Level 2
SQL_SIMULATE_CURSOR         SQL_SUCCESS     Level 2
SQL_USE_BOOKMARKS           SQL_SUCCESS     Level 1

[SQL Conf]
SQL_ALTER_TABLE             SQL_SUCCESS     Core
SQL_COLUMN_ALIAS            SQL_SUCCESS     Core
SQL_CONCAT_NULL_BEHAVIOR    SQL_SUCCESS     Core
SQL_CORRELATION_NAME        SQL_SUCCESS     Core
SQL_EXPRESSIONS_IN_ORDERBY  SQL_SUCCESS     Core
SQL_GROUP_BY                SQL_SUCCESS     Core
SQL_IDENTIFIER_CASE         SQL_SUCCESS     Core
SQL_IDENTIFIER_QUOTE_CHAR   SQL_SUCCESS     Core
SQL_KEYWORDS                SQL_SUCCESS_WITH_INFO   Core
SQL_LIKE_ESCAPE_CLAUSE      SQL_SUCCESS     Level 1
SQL_MAX_BINARY_LITERAL_LEN  SQL_SUCCESS     Level 1
SQL_MAX_CHAR_LITERAL_LEN    SQL_SUCCESS     Level 1
SQL_MAX_COLUMN_NAME_LEN     SQL_SUCCESS     Core
SQL_MAX_COLUMNS_IN_GROUP_BY SQL_SUCCESS     Core
SQL_MAX_COLUMNS_IN_INDEX    SQL_SUCCESS     Core
SQL_MAX_COLUMNS_IN_ORDER_BY SQL_SUCCESS     Core
SQL_MAX_COLUMNS_IN_SELECT   SQL_SUCCESS     Core
SQL_MAX_COLUMNS_IN_TABLE    SQL_SUCCESS     Core
SQL_MAX_CURSOR_NAME_LEN     SQL_SUCCESS     Core
SQL_MAX_INDEX_SIZE          SQL_SUCCESS     Core
SQL_MAX_OWNER_NAME_LEN      SQL_SUCCESS     Core
SQL_MAX_PROCEDURE_NAME_LEN  SQL_SUCCESS     Core
SQL_MAX_ROW_SIZE            SQL_SUCCESS     Core
SQL_MAX_ROW_SIZE_INCLUDES_LONG  SQL_SUCCESS Core
SQL_MAX_STATEMENT_LEN       SQL_SUCCESS     Core
SQL_MAX_TABLE_NAME_LEN      SQL_SUCCESS     Core
SQL_MAX_TABLES_IN_SELECT    SQL_SUCCESS     Core
SQL_MAX_USER_NAME_LEN       SQL_SUCCESS     Core
SQL_NON_NULLABLE_COLUMNS    SQL_SUCCESS     Core
SQL_ODBC_SQL_CONFORMANCE    SQL_SUCCESS     Core
SQL_ODBC_SQL_OPT_IEF        SQL_SUCCESS     Core
SQL_ORDER_BY_COLUMNS_IN_SELECT  SQL_SUCCESS Core
SQL_OUTER_JOINS             SQL_SUCCESS     Core
SQL_POSITIONED_STATEMENTS   SQL_SUCCESS     Core
SQL_PROCEDURES              SQL_SUCCESS     Core
SQL_QUOTED_IDENTIFIER_CASE  SQL_SUCCESS     Core
SQL_SPECIAL_CHARACTERS      SQL_SUCCESS     Core
SQL_SUBQUERIES              SQL_SUCCESS     Core
SQL_UNION                   SQL_SUCCESS     Core

======================================================
5. MYODBC OPEN ISSUES
======================================================

Some common problems:
--------------------
- Wrong connection port:  The port should be 3333 for MySQL 3.20 and 3306
  (default) for MySQL 3.21 or newer.
- Access denied problems.  Check the MySQL reference manual for information
  about the MySQL privilege system!
- If you are connecting to a server with a character set that isn't compiled
  into the MySQL client library (the defaults are:
  latin1 big5 czech euc_kr gb2312 gbk sjis tis620 ujis) then you need to 
  install the mysql character definitions from the charsets directory 
  into the c:\mysql\share\charsets.
  
Known bugs:
----------
- Access can't use float fields in a table without a timestamp if you are 
  going to update it. Double on the other hand should work.
- Access 2000 needs a patch from Microsoft to be able to export tables to
  MySQL;  Just download and install the newest Microsoft MDAC from
  http://www.microsoft.com/data
- There is a bug in the Microsoft ODBC setup that it can't detect if a OS
  is NT or WIN95.  Because of this MyODBC is distributed in 2 different
  versions, one for WIN95 and one for NT.
  The only difference is the file odbc.inf, which tells SETUP if it should
  install CTL3D95.DL_ or CTL3DNT.DLL as CTL3D32.DLL.
  If you have downloaded wrong version of MyODBC simple copy ODBC.95 or 
  ODBC.NT over ODBC.INF and execute setup again!
- ODBC 2.50 doesn't allow very good usage of bigint (64 bit) numbers; some
  applications may have a problem with this.
- TIMESTAMP to TIME conversions doesn't work.
- Binary fields are returned as strings, not as hex strings.
- Some conversion are not according to the ODBC standard, but this shouldn't
  affect standard applications.
- ODBC can't support zero dates "0000-00-00". MyODBC automaticly converts
  0000-00-00 dates to NULL.  Date columns that you want to update and that
  can be 0000-00-00 should not be declared as 'NOT NULL'.
- One should add a help to the connect screen.

======================================================
6. APPLICATIONS WORKING WITH MYODBC
======================================================
Most programs should work with MyODBC, but for each of those listed below,
we have tested it ourselves or received confirmation from some user that
it works: 

Program 
  Comment 

Access:
-------
To make Access work: 
- If you are using Access 2000, you should get and install the newest Microsoft
  MDAC (Microsoft Data Access Components) from http://www.microsoft.com/data.
  This will fix the following bug in Access: when you export data to MySQL,
  the table and column names aren't specified. Another way to around this bug
  is to upgrade to MyODBC Version 2.50.33 and MySQL Version 3.23.x, which 
  together provide a workaround for this bug! Note that if you are using 
  MySQL Version 3.22, you must to apply the MDAC patch and use MyODBC 2.50.32
  or 2.50.34 and above to go around this problem. 

- Set the `Return matching rows' MyODBC option field when connecting to MySQL.

- You should have a primary key in the table. If not, new or updated rows may 
  show up as #Deleted#. 
          
- You should have a timestamp in all tables you want to be able to update. For
  maximum portability TIMESTAMP(14) or simple TIMESTAMP is recommended instead
  of other TIMESTAMP(X) variations. 

- Only use double float fields. Access fails when comparing with single floats.
  The symptom usually is that new or updated rows may show up as #Deleted# or
  that you can't find or update rows. 
          
- If you still get the error Another user has changed your data after adding a
  TIMESTAMP column, the following trick may help you: Don't use table data
  sheet view. Create instead a form with the fields you want, and use that 
  form data sheet view. You should set the DefaultValue property for the 
  TIMESTAMP column to NOW(). It may be a good idea to hide the TIMESTAMP
  column from view so your users are not confused. 
          
- Access on NT will report BLOB columns as OLE OBJECTS. If you want to have
  MEMO columns instead, you should change the column to TEXT with ALTER 
  TABLE. 

- Access can't always handle DATE columns properly. If you have a problem 
  with these, change the columns to DATETIME. In some cases, Access may 
  generate illegal SQL queries that MySQL can't understand. You can fix
  this by selecting "Query|SQLSpecific|Pass-Through" from the Access menu. 

- If you have in Access a column defined as BYTE, Access will try to export
  this as TINYINT instead of TINYINT UNSIGNED. This will give you problems
  if you have values > 127 in the column! If you are using Access 7.0, 
  You should use the option flag Return matching rows. If you are using
  Access 2.0, You should use the option flags Return matching rows and 
  Simulate ODBC 1.0. 

- If you are linking a table through MyODBC, which has BIGINT as one of the
  column, then the results will be displayed as #DELETED. The work around
  solution is:
  -- Have one more dummy column with TIMESTAMP as the data type, preferably 
     TIMESTAMP(14)
  -- Check the 'Change BIGINT columns to INT' in connection options dialog in
     ODBC DSN Administrator
  -- Delete the table link from access and re-create it. 

  It still displays the previous records as #DELETED, but newly added/updated
  records will be displayed properly.

  
ADO:
----
When you are coding with the ADO API and MyODBC you need to put attention
in some default properties that aren't supported by the MySQL server. For 
example, using the CursorLocation Property as adUseServer will return for
the RecordCount Property a result of -1. To have the right value, you need
to set this property to adUseClient, like is showing in the VB code below: 

  Dim myconn As New ADODB.Connection
  Dim myrs As New Recordset
  Dim mySQL As String
  Dim myrows As Long

  myconn.Open "DSN=MyODBCsample"
  mySQL = "SELECT * from user"
  myrs.Source = mySQL
  Set myrs.ActiveConnection = myconn
  myrs.CursorLocation = adUseClient
  myrs.Open
  myrows = myrs.RecordCount

  myrs.Close
  myconn.Close

Another workaround is to use a SELECT COUNT(*) statement for a similar query
to get the correct row count. 
  
Active server pages (ASP)
-------------------------
  You should use the option flag Return matching rows. 

BDE applications 
----------------
  To get these to work, you should set the option flags Don't optimize column
  widths and Return matching rows. 

Borland Builder 4 
-----------------
  When you start a query you can use the property Active or use the method 
  Open. Note that Active will start by automatically issuing a SELECT * 
  FROM ... query that may not be a good thing if your tables are big! 

ColdFusion (On Unix)
-------------------- 
  The following information is taken from the ColdFusion documentation:
  Use the following information to configure ColdFusion Server for Linux
  to use the unixODBC driver with MyODBC for MySQL data sources. Allaire
  has verified that MyODBC Version 2.50.26 works with MySQL Version 3.22.27
  and ColdFusion for Linux. (Any newer version should also work.) You can 
  download MyODBC at http://www.mysql.com/downloads/api-myodbc.html 
  ColdFusion Version 4.5.1 allows you to us the ColdFusion Administrator
  to add the MySQL data source. However, the driver is not included with
  ColdFusion Version 4.5.1. Before the MySQL driver will appear in the 
  ODBC datasources drop-down list, you must build and copy the MyODBC 
  driver to `/opt/coldfusion/lib/libmyodbc.so'. The Contrib directory 
  contains the program mydsn-xxx.zip which allows you to build and 
  remove the DSN registry file for the MyODBC driver on Coldfusion 
  applications. 

DataJunction 
------------
  You have to change it to output VARCHAR rather than ENUM, as it exports
  the latter in a manner that causes MySQL grief. 

Excel Works. Some tips: 
-----------------------
  If you have problems with dates, try to select them as strings using the
  CONCAT() function. For example: 

    select CONCAT(rise_time), CONCAT(set_time) from sunrise_sunset;

  Values retrieved as strings this way should be correctly recognized as time
  values by Excel97. The purpose of CONCAT() in this example is to fool ODBC
  into thinking the column is of ``string type''. Without the CONCAT(), ODBC
  knows the column is of time type, and Excel does not understand that. Note
  that this is a bug in Excel, because it automatically converts a string to
  a time.
  This would be great if the source was a text file, but is plain stupid when
  the source is an ODBC connection that reports exact types for each column. 

Word :
-----
  To retrieve data from MySQL to Word/Excel documents, you need to use the 
  MyODBC driver and the Add-in Microsoft Query help. For example, create a 
  db with a table containing 2 columns of text: \
  
  - Insert rows using the mysql client command-line tool. 
  - Create a DSN file using the MyODBC driver, for example, my for the db above.  - Open the Word application. 
  - Create a blank new documentation. 
  - Using the tool bar called Database, press the button insert database. 
  - Press the button Get Data. 
  - At the right hand of the screen Get Data, press the button Ms Query. 
  - In the Ms Query create a New Data Source using the DSN file my. 
  - Select the new query. 
  - Select the columns that you want. 
  - Make a filter if you want. 
  - Make a Sort if you want. 
  - Select Return Data to Microsoft Word. 
  - Click Finish. 
  - Click Insert data and select the records. 
  - Click OK and you see the rows in your Word document. 

odbcadmin:
---------
 Test program for ODBC. 
 
Delphi:
------
 You must use BDE Version 3.2 or newer. Set the `Don't optimize column width'
 option field when connecting to MySQL. Also, here is some potentially useful
 Delphi code that sets up both an ODBC entry and a BDE entry for MyODBC (the
 BDE entry requires a BDE Alias Editor that is free at a Delphi Super Page 
 near you. (Thanks to Bryan Brunton bryan@flesherfab.com for this): 

     fReg:= TRegistry.Create;
       fReg.OpenKey('\Software\ODBC\ODBC.INI\DocumentsFab', True);
       fReg.WriteString('Database', 'Documents');
       fReg.WriteString('Description', ' ');
       fReg.WriteString('Driver', 'C:\WINNT\System32\myodbc.dll');
       fReg.WriteString('Flag', '1');
       fReg.WriteString('Password', '');
       fReg.WriteString('Port', ' ');
       fReg.WriteString('Server', 'xmark');
       fReg.WriteString('User', 'winuser');
       fReg.OpenKey('\Software\ODBC\ODBC.INI\ODBC Data Sources', True);
       fReg.WriteString('DocumentsFab', 'MySQL');
       fReg.CloseKey;
       fReg.Free;

       Memo1.Lines.Add('DATABASE NAME=');
       Memo1.Lines.Add('USER NAME=');
       Memo1.Lines.Add('ODBC DSN=DocumentsFab');
       Memo1.Lines.Add('OPEN MODE=READ/WRITE');
       Memo1.Lines.Add('BATCH COUNT=200');
       Memo1.Lines.Add('LANGDRIVER=');
       Memo1.Lines.Add('MAX ROWS=-1');
       Memo1.Lines.Add('SCHEMA CACHE DIR=');
       Memo1.Lines.Add('SCHEMA CACHE SIZE=8');
       Memo1.Lines.Add('SCHEMA CACHE TIME=-1');
       Memo1.Lines.Add('SQLPASSTHRU MODE=SHARED AUTOCOMMIT');
       Memo1.Lines.Add('SQLQRYMODE=');
       Memo1.Lines.Add('ENABLE SCHEMA CACHE=FALSE');
       Memo1.Lines.Add('ENABLE BCD=FALSE');
       Memo1.Lines.Add('ROWSET SIZE=20');
       Memo1.Lines.Add('BLOBS TO CACHE=64');
       Memo1.Lines.Add('BLOB SIZE=32');

       AliasEditor.Add('DocumentsFab','MySQL',Memo1.Lines);

C++Builder:
----------
  Tested with BDE Version 3.0. The only known problem is that when the table 
  schema changes, query fields are not updated. BDE, however, does not seem 
  to recognize primary keys, only the index PRIMARY, though this has not 
  been a problem. 

Vision:
------
 You should use the option flag Return matching rows. 
  
Visual Basic:
------------
 To be able to update a table, you must define a primary key for the table. 
 Visual Basic with ADO can't handle big integers. This means that some 
 queries like SHOW PROCESSLIST will not work properly. The fix is to set
 add the option OPTION=16834 in the ODBC connect string or set the Change
 BIGINT columns to INT option in the MyODBC connect screen. You may also 
 want to set the 'Return matching rows' option. 
 
VisualInterDev:
--------------
 If you get the error [Microsoft][ODBC Driver Manager] Driver does not 
 support this parameter the reason may be that you have a BIGINT in your 
 result. Try setting the Change BIGINT columns to INT option in the 
 MyODBC connect screen. 
 
Visual Objects:
--------------
 You should use the option flag Don't optimize column widths. 

MS Visio Enterprise 2000:
-------------------------
 We made database model diagram by connecting from MS Vision Enterprise 2000
 to MySQL via MyODBC(2.50.37 or grater) and using visio's reverse engineer
 funtion to retrieve information about the DB ( visio shows all the column
 definations, Pks, Indexes and so on). Also we tested by designing new tables
 in visio and exported them to MySQL via MyODBC.

Please visit the following link, to know more information about applications
that works with MyODBC.

http://www.mysql.com/documentation/mysql/bychapter/manual_ODBC.html#MyODBC_clients

======================================================
7. MYODBC DSN INTERFACE OPTIONS
======================================================

MyODBC 2.50.18 has a new nice interface to the different MyODBC options.
(On Unix the option is still a number).

The Option argument is used to tell MyODBC that the client isn't 100% ODBC
compliant. The following options are listed in the same order as they
appear in the MyODBC connect screen:

  1   The client can't handle that MyODBC returns the real width of a column.
  2   The client can't handle that MySQL returns the true value of
      affected rows.  If this flag is set then MySQL returns 'found rows'
      instead.  One must have MySQL 3.21.14 or newer to get this to work.
  4   Make a debug log in c:\myodbc.log.  This is the same as putting
      MYSQL_DEBUG=d:t:O,c::\myodbc.log in AUTOEXEC.BAT
  8   Don't set any packet limit for results and parameters.
 16   Don't prompt for questions even if driver would like to prompt
 32   Simulate a ODBC 1.0 driver in some context.
 64   Ignore use of database name in 'database.table.column'. (MySQL 3.22)
128   Force use of ODBC manager cursors (experimental)
256   Remove use of extended fetch (experimental)
512   Pad CHAR fields to full column length.
1024  SQLDescribeCol() will return fully qualifed column names
2048  Use compressed protocol (if server supports it)
4096  Tell server to ignore space after function name and before '('
      (needed by PowerBuilder).  This will make all function names keywords!
8192  Connect with named pipes to a mysqld server running on NT.
16384 Change LONGLONG columns to INT columns, as some applications can't
      handle LONGLONG.
32768 Return 'user' as Table_qualifier and Table_owner from SQLTables
      (test)
65536 Read my.cnf
131072 Add some extra safety checks (should not bee needed but...)
262144  Disable the new transaction support (To avoid newly introduced bugs)

On Unix; If you want to have many options, you should add the above flags!
For example Option 12 (4+8) gives you debugging without package limits!

Some clients that must set some MySQL options to work properly.
On Win32 one have to check the specific option in the ODBC manager
for the database connection.

  BDE applications: 1 or 3;  'Don't optimize column widths' and
                 'Return matching rows'
  Visual Objects:   1    'Don't optimize column widths'
  Vision        2    'Return matching rows' 
  Active server pages   2    'Return matching rows'
  Access 7.0:       2    'Return matching rows'
  Access 2.0:       2+32     'Return matching rows' and 'Simulate ODBC 1.0'
  ODBCETE32 + quiktest  512+1    'Don't optimize column widths' + 'Pad CHAR'
  Visual Basic / ADO    2+16384  ''Return matching rows / BIGINT -> INT' 

The default MYODBC.DLL is compiled for optimal performance.  If you
want to to debug MyODBC (for example to enable tracing), you should
instead use the the MYODBCD.DLL.  If you want to use this one, copy
MYODBCD.DLL over the installed MYODBC.DLL.

If you have any problems with MyODBC, try first to get the 'admndemo'
program, that is include with the MyODBC distribution, to work!

======================================================
8. REPORTING PROBLEMS WITH MYODBC
======================================================

If you encounter difficulties with MyODBC, you should start by making a
log file from the ODBC manager (the log you get when requesting logs from
ODBCADMIN) and a MyODBC log. 

To get a MyODBC log, you need to do the following: 

   1.Ensure that you are using myodbcd.dll and not myodbc.dll. The easiest
     way to do this is to get myodbcd.dll from the MyODBC distribution and
     copy it over the myodbc.dll, which is probably in your 
     C:\windows\system32 or C:\winnt\system32 directory. Note that you 
     probably want to restore the old myodbc.dll file when you have finished
     testing, as this is a lot faster than myodbcd.dll. 
   2.Tag the `Trace MyODBC' option flag in the MyODBC connect/configure screen
     The log will be written to file `C:\myodbc.log'. If the trace option is 
     not remembered when you are going back to the above screen, it means that
     you are not using the myodbcd.dll driver (see above). 
   3.Start your application and try to get it to fail. 

Check the MyODBC trace file, to find out what could be wrong. You should be
able to find out the issued queries by searching after the string >
mysql_real_query in the `myodbc.log' file. 

You should also try duplicating the queries in the mysql monitor or admndemo
to find out if the error is MyODBC or MySQL. 

If you find out something is wrong, please only send the relevant rows (max 40
rows) to myodbc@lists.mysql.com. Please never send the whole MyODBC or ODBC
log file! 

If you are unable to find out what's wrong, the last option is to make an 
archive (tar or zip) that contains a MyODBC trace file, the ODBC log file, 
and a README file that explains the problem. You can send this to 
ftp://support.mysql.com/pub/mysql/secret. Only we at MySQL AB will have 
access to the files you upload, and we will be very discrete with the data! 

If you can create a program that also shows this problem, please upload
this too!. If the program works with some other SQL server, you should make an
ODBC log file where you do exactly the same thing in the other SQL server. 

Remember that the more information you can supply to us, the more likely it
is that we can fix the problem! 

Please read MyODBC mailing list archieve(lists.mysql.com) before posting 
the bug.




