MySQL は MyODBC プログラムで ODBC 機能を提供します。
MyODBC は 32-bit ODBC (2.50) level 0 driver で、 ODBC 化されたアプリケーションが MySQL に接続する場合に使用します。 MyODBC は、Windows95, Windows98, NT とほとんどの Unix で動きます。
通常、MyODBC は Windows マシンにだけ、インストールします。 、あなたのプログラムが ColdFusion のようにデータベースへの接続に ODBC だけを使用する場合に限り、UNIX に MyODBC が必要です。
MyODBC はパブリック・ドメインで、最新の物は以下にあります: http://www.mysql.com/download_myodbc.html.
日本語文字コードに対応させた物は: http://www.SoftAgency.co.jp/.
もし、UNIX に MyODBC をインストールしたいなら、 ODBC マネージャーも必要でしょう。 MyODBC は UNIX の ODBC マネージャー でも動作することが知られています。 MySQL useful links page の ODBC-related links 節に、見つけることができます。 「1.9 便利な MySQL 関連リンク」節参照.
Windows/NT の場合、MyODBC をインストール時にいかのような エラーになるかもしれません:
An error occurred while copying C:\WINDOWS\SYSTEM\MFC30.DLL. Restart Windows and try installing again (before running any applications which use ODBC)
The problem in this case is that some other program is using ODBC and because of how windows is designed, one cannot in this case install new ODBC drivers with Microsoft's ODBC setup program :( これを解決するには、一度 ’セーフモード’でコンピュータを立ち上げ直し、 (windows リブート時に、F8キーを押すことで、セーフモードの選択が可能です) MyODBC をインストールして、リブートします。
GRANT
コマンドで可能です。
「7.29 GRANT
と REVOKE
構文」節参照.
MyODBC の設定画面には、MySQL 接続時のオプションがいくつか 設定できるようになっています。 もし問題がある場合は、これらを試します。
Windows95 上のサーバ名の記述には3つの可能性があります:
ip hostname例えば:
194.216.84.21 my
ODBC setup
を埋める方法の例:
Windows DSN name: test Description: This is my test database MySql Database: test Server: 194.216.84.21 User: monty Password: my_password Port:
Windows DSN name
項目の値は、あなたのwindows ODBC setup における
一意の名前です。
ODBC setup 画面で、Server
, User
, Password
, Port
フィールドを設定する必要はありません。
しかし、ここで設定をすると、後でサーバーに接続する際に、
設定した値がデフォルト値として使用されます。
使用時に値を変更するオプションはあります。
ポート番号が設定されていないなら、デフォルトポート (3306) が使用されます。
もしオプションを Read options from C:\my.cnf
にすると,
client
と odbc
グループは `C:\my.cnf' ファイルから読まれます。
mysql_options()
で使用できる全てのオプションが利用可能です。
「22.4.37 mysql_options()
」節参照.
MyODBC は以下でテストされました: Access, Admndemo.exe, C++-Builder, Borland Builder 4, Centura Team Developer (formerly Gupta SQL/Windows), ColdFusion (on Solaris and NT with svc pack 5), Crystal Reports, DataJunction, Delphi, ERwin, Excel, iHTML, FileMaker Pro, FoxPro, Notes 4.5/4.6, SBSS, Perl DBD-ODBC, Paradox, Powerbuilder, Powerdesigner 32 bit, VC++ and Visual Basic.
MyODBC で動作する他のアプリケーションについても知っているなら、 myodbc@lists.mysql.com までメールをください!
多くのプログラムが MyODBC で動作します。これらは我々自身がテストしたか、 または何人かの他のユーザから動作するという確証を得たものです:
BLOB
フィールドを OLE OBJECTS
と認識します。
もし MEMO
フィールドを代わりに使用したいなら、 ALTER TABLE
を使って、
TEXT
型にフィールドを変更しなくてはなりません。
DATE
フィールドをいつも正しく扱うことが出来ません。
もしこれらの問題があった場合、フィールド型を DATETIME
に変えてください。
"Query|SQLSpecific|Pass-Through"
を選択すれば
直すことが可能です。
Active
or use the
method Open
. Note that Active
will start by automatically issue
a SELECT * FROM ...
query that may not be a good thing if your tables
are big!
VARCHAR
rather than ENUM
, as
it exports the latter in a manner that causes MySQL grief.
CONCAT()
関数を使用し、文字として SELECT してみてください。
例えば:
select CONCAT(rise_time), CONCAT(set_time) from sunrise_sunset;この方法で文字として返ってきた値を、Excel97 で時間として扱うようにすべきです。 この例の
CONCAT()
の目的は、フィールドの型が文字列であると ODBC をだますことです。
CONCAT()
がなければ、ODBC はフィールドの型が日付とわかるので、
Excel が今度はそれを理解できなくなります。
これは Excel のバグです。なぜなら文字を自動で日付に直すのですから。
これは単にテキストファイルの情報を扱う場合ならばいいのですが、
各項目の型を知らせる ODBC 接続の情報を扱う場合は、とても愚かな方法です。
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);
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.
AUTO_INCREMENT
フィールドの値を ODBC で得る方法
共通の問題は、INSERT
で自動的に生成されるIDの値を得ることです。
ODBCでは、以下のようにします( 例中の auto
が AUTO_INCREMENT
フィールドです):
INSERT INTO foo (auto,text) VALUES(NULL,'text'); SELECT LAST_INSERT_ID();
もしくは、他のテーブルにIDを挿入するだけなら以下のようにします:
INSERT INTO foo (auto,text) VALUES(NULL,'text'); INSERT INTO foo2 (id,text) VALUES(LAST_INSERT_ID(),'text');
いくつかのODBCアプリケーション(少なくともDelphiとAccess)は、 新しく挿入された行を見つけるのに、以下のクエリが使用できます:
SELECT * FROM tbl_name WHERE auto IS NULL;
もし MyODBC 使用時に難しい問題にあたった場合、
ODBC マネージャのログファイル (ODBCADMIN からリクエストしたときのログ)
と MyODBC のログを取り始めるべきです。
これはいかなる問題にも解決の糸口になるはずです。
MyODBC ログを取るには、 MyODBC connect/configure 画面の
'Trace MyODBC' オプションをチェックします。
ログは `C:\myodbc.log' に書き出されます。
このオプションを使用するに当たり、 MYSQL2.DLL
ではなく、
MYSQL.DLL
を使用しなくてはなりません!
MyODBC が MySQL サーバーに送っているクエリを確認します;
これは `myodbc.log' ファイル中に、>mysql_real_query
と
いう文字列が含まれている行です。
また、MyODBC か MySQL のエラーを見つけるためには、
同じコマンドを、mysql
コマンドや admndemo
でも試すべきです。
もし、問題を発見したなら、関係する行を(最大40行) myodbc@lists.mysql.com に 送ってください。 MyODBC や ODBC のログファイル全てを送らないように してください!
もし問題を見つけることが出来なかった場合、MyODBC ログファイル、 ODBC ログファイル、問題の説明する README ファイルを含んだ アーカイブ(tar か zip) を作成します。 これを ftp://www.mysql.com/pub/mysql/secret. に送ります。 TCX だけが、アップロードされたファイルにアクセスできます。
もし問題を見るためのプログラムも作っているなら、それも同時に送ります。
もしそのプログラムが他の SQL サーバーで動くなら、 他の SQL サーバーで同じことをした場合の ODBC ログファイルを作成すべきです。
多くの情報をあなたが提供すれば、我々は問題を解決しやすくなることを 念頭においてください。
Go to the first, previous, next, last section, table of contents.