ほとんどのプログラムは MyODBC
        と連携して動作しますが、ここに示したプログラムについては、当社が社内で試験したか、またはユーザから動作確認したという連絡を受けています。
      
プログラム
Access
Access を動作させるには、以下の処理を実行する。
                  Access 2000
                  を使用している場合、http://www.microsoft.com/data/
                  から最新(バージョン 2.6 以降)の
                  Microsoft MDAC(Microsoft Data Access
                  Components)をダウンロードし、インストールする必要がある。これによって、MySQL
                  にデータをエクスポートする際にテーブル名およびカラム名が指定されないという
                  Access
                  のバグが修正される。このバグは、MyODBC
                  バージョン 2.50.33 および MySQL
                  バージョン 3.23.x
                  にアップグレードすることによって回避することもできる。
                
                  その他に、http://support.microsoft.com/support/kb/articles/Q
                  239/1/14.ASP で公開されている
                  Microsoft Jet 4.0 サービスパック 5
                  をダウンロードし、適用する必要もある。これは、Access
                  でカラムが #deleted#
                  とマークされる場合があるバグを修正する。
                
注意: MySQL バージョン 3.22 を使用している場合、この問題を回避するには、MDAC パッチを適用し、MyODBC 2.50.32 または 2.50.34 以降を使用する必要がある。
                  Access のすべてのバージョンで、MyODBC
                  のオプションフラグ Return matching
                  rows
                  を有効にする必要がある。Access 2.0
                  では、さらに Simulate ODBC
                  1.0 を有効にする必要がある。
                
                  更新可能にするすべてのテーブルでタイムスタンプ型のカラムを定義する必要がある。移植性を最大にするために、TIMESTAMP(14)
                  または単純な TIMESTAMP
                  を、TIMESTAMP(X)
                  の代わりに使用することが推奨される。
                
                  テーブルに主キーを定義する必要がある。これを定義しない場合、新しく追加したレコードまたは更新したレコードが
                  #DELETED#
                  として表示される可能性がある。
                
                  DOUBLE
                  浮動小数点型のフィールドだけを使用する。Access
                  では、単精度浮動小数点型の値を比較できない。その結果、表面上は、新しく追加したレコードまたは更新されたレコードが
                  #DELETED#
                  として表示されたり、レコードを検索または更新できないという現象が発生する。
                
                  BIGINT
                  型のカラムを持つテーブルを MyODBC
                  経由でリンクしている場合、結果が
                  #DELETED
                  として表示される。以下に回避策を示す。
                
                      データ型が
                      TIMESTAMP、できれば
                      TIMESTAMP(14)
                      のダミーカラムを 1 つ追加する。
                    
                      ODBC DSN
                      アドミニストレータの接続オプションを指定するダイアログボックスで、'Change
                      BIGINT columns to INT'
                      をオンにする。
                    
Access からテーブルリンクを削除し、再作成する。
                  上記の回避策を実行した後も、既存のレコードは
                  #DELETED#
                  として表示されたままだが、新しく追加または更新されたレコードは正しく表示されるようになる。
                
                  TIMESTAMP
                  型カラムを追加した後でもエラー
                  Another user has changed your data
                  が発生する場合、次の対策で解決する可能性がある。
                
                  テーブルデータシートビューを使用しない。代わりに必要なフィールドを定義したフォームを作成し、フォームデータシートビューを使用する。TIMESTAMP
                  型カラムの DefaultValue
                  プロパティを NOW()
                  に設定する必要がある。このテーブルを使用するユーザが混乱しないように、TIMESTAMP
                  型カラムを非表示にすることも 1
                  つの方法である。
                
                  場合によっては、Access が、MySQL
                  が解釈できない不正な SQL
                  クエリを生成する可能性がある。これは、Access
                  のメニューから
                  "Query|SQLSpecific|Pass-Through"
                  を選択することによって修正できる。
                
                  NT 上で動作する Access が
                  BLOB 型カラムを OLE
                  OBJECTS
                  型として報告する。代わりに
                  MEMO
                  型カラムを使用する場合は、ALTER
                  TABLE を使用してカラムを
                  TEXT
                  型に変更する必要がある。
                
                  Access が DATE
                  型カラムを正しく処理できない場合がある。この問題が発生する場合、カラムを
                  DATETIME 型に変更する。
                
                  Access で BYTE
                  型として定義されているカラムを使用している場合、Access
                  はこのカラムを、TINYINT
                  UNSIGNED
                  型ではなく、TINYINT
                  型としてエクスポートしようとする。この場合、カラムに
                  127
                  より大きい値が格納されていると問題が発生する。
                
            ADO API および MyODBC
            を使用してコーディングする場合、MySQL
            サーバでサポートされない一部のデフォルトプロパティに注意する必要がある。たとえば、CursorLocation
            プロパティに adUseServer
            が設定されている場合、RecordCount
            プロパティは -1
            を返す。正しい値が返されるようにするには、以下の
            VB コードで示すように、このプロパティを
            adUseClient
            に設定する必要がある。
          
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
            他の回避策としては、同じようなクエリで
            SELECT COUNT(*)
            ステートメントを使用して適切なレコード数を取得する方法がある。
          
Active server pages(ASP)
            オプションフラグ Return matching
            rows を使用する必要がある。
          
BDE アプリケーション
            オプションフラグ Don't optimize column
            widths および Return matching
            rows を設定する必要がある。
          
            クエリを開始するとき、Active
            プロパティまたは Open
            メソッドを使用できる。注意:
            Active は、自動的に SELECT
            * FROM ...
            クエリを発行してクエリを開始するが、テーブルが大きい場合は問題になる場合がある。
          
ColdFusion(Unix 上)
以下の情報は ColdFusion のマニュアルからの抜粋である。
            以下の情報を使用して、MySQL
            データソースに対して MyODBC
            とともに unixODBC ドライバを使用するように
            ColdFusion Server for Linux を設定する。Allaire
            は、MyODBC バージョン 2.50.26 が
            MySQL バージョン 3.22.27 および ColdFusion for Linux
            と連携して動作することを確認済みである(それ以降のバージョンも当然動作する)。MyODBC
            は、http://www.mysql.com/downloads/api-myodbc.html
            からダウンロードできる。
          
            
            ColdFusion バージョン 4.5.1
            を使用すると、ColdFusion Administrator
            を使用して MySQL
            データソースを追加できる。ただし、ColdFusion
            バージョン 4.5.1
            にはドライバは付属していない。MySQL
            ドライバが ODBC
            データソースのドロップダウンリストに表示されるようにするには、MyODBC
            ドライバをビルドして、/opt/coldfusion/lib/libmyodbc.so
            にコピーする必要がある。
          
            Contrib ディレクトリには
            mydsn-xxx.zip
            があり、これを使用して ColuFusion
            アプリケーションで MyODBC ドライバの DSN
            レジストリファイルをビルドおよび削除できる。
          
            DataJunction では、エクスポートで
            ENUM が出力されて、MySQL
            でトラブルの原因となるので、代わりに
            VARCHAR
            を出力するように設定を変更する必要がある。
            
          
Excel
正常に動作する。以下にヒントを示す。
                  日付データで問題が発生する場合、CONCAT()
                  関数を使用して日付データを文字列として選択する。たとえば、以下のように指定する。
SELECT CONCAT(rise_time), CONCAT(set_time)
    FROM sunrise_sunset;
この方法で文字列として取得した値は、Excel97 で正しく時刻として認識される。
                  この例で CONCAT()
                  を使用したのは、ODBC にカラムが
                  ``文字列型''
                  であると思わせるためである。CONCAT()
                  を使用しないと、ODBC
                  はカラムが時刻型であることを認識するが、Excel
                  はそれを認識しない。
                
注意: Excel は自動的に文字列を時刻データに変換するので、上記の件は Excel のバグである。ソースがテキストファイルであれば、この自動変換は非常に便利だが、ソースがカラムごとのデータ型を正しく報告する ODBC 接続である場合はまったく意味をなさない。
Word
            MySQL から Word または Excel
            ドキュメントにデータを取得するには、MyODBC
            ドライバおよび Microsoft Query
            アドインを使用する必要がある。
          
たとえば、データベースに、2 つのテキスト型カラムを持つテーブルがあるとする。
                  mysql
                  クライアントコマンドラインツールを使用してレコードを挿入する。
                
                  ODBC
                  マネージャを使用して、上記のデータベースに対して、たとえば
                  my という DSN
                  ファイルを作成する。
                
Word を開く。
新規ドキュメントを作成する。
[Database] ツールバーの [Insert Database] をクリックする。
[Get Data] をクリックする。
[Get Data] ダイアログボックスの右側にある [MS Query] をクリックする。
[MS Query] で DSN ファイル my を使用して新しいデータソースを作成する。
新しいクエリを選択する。
取得するカラムを選択する。
必要ならフィルタを作成する。
必要なら並べ替えを指定する。
[Return Data to Microsoft Word] を選択する。
[Finish] をクリックする。
[Insert data] をクリックしてレコードを選択する。
[OK] をクリックする。Word ドキュメントに選択したレコードが表示される。
Delphi
            BDE バージョン 3.2
            以降を使用する必要がある。MySQL
            に接続する場合、オプションフィールド
            Don't optimize column width
            を有効にする。
          
            また、MyODBC の ODBC
            エントリおよび BDE エントリ(BDE エントリは
            Delphi Super Page で無料公開されている BDE Alias
            Editor
            を必要とする)をセットアップする便利な
            Delphi コードを以下に示す(これについては
            Bryan Brunton <bryan@flesherfab.com>
            に感謝する)。
          
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);
BDE バージョン 3.0 を使用して試験済み。唯一の既知の問題は、テーブルスキーマが変更されたときにクエリのフィールドが更新されないことである。ただし、BDE はインデックスの PRIMARY 以外の主キーを認識しないと思われるが、これはこれまで問題にはなっていない。
Vision
            オプションフラグ Return matching
            rows を使用する必要がある。
          
テーブルを更新できるようにするには、テーブルに主キーを定義する必要がある。
            Visual Basic を ADO
            とともに使用した場合、大きなサイズの整数を処理できない。これは、SHOW
            PROCESSLIST
            のようなクエリは正しく動作しないことを意味する。これを解決するには、ODBC
            接続文字列にオプション
            OPTION=16384
            を設定するか、または MyODBC 接続画面で
            Change BIGINT columns to INT
            を選択する。場合によっては、Return
            matching rows も選択する必要がある。
          
VisualInterDev
            [Microsoft][ODBC Driver Manager] Driver does not
            support this parameter
            というエラーが発生する場合、結果セットに
            BIGINT
            が含まれていることが原因である可能性がある。MyODBC
            接続画面で Change BIGINT columns to
            INT
            を選択すると解決する可能性がある。
          
Visual Objects
            オプションフラグ Don't optimize column
            widths を使用する必要がある。
          
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

