mysql-logo.gif (3082 bytes)MySQL中文參考手冊

譯者:晏子 (clyan@sohu.com
GB 碼主頁:http://linuxdb.yeah.net

Big5 轉碼者:statue (statue@bbs.yzu.edu.tw
詞彙轉換:彭武興 (wilson@mailbox.com.tw)
Big5 碼主頁: http://cnpa.yzu.edu.tw/~cfc/docs/mysqldoc_big5/manual_toc.html
Big5 碼分站: http://php.wilson.gs/mysqldoc/big5/manual_toc.html


第一章, 前一章, 下一章, 最後一章目錄.


16 MySQL對ODBC的支援

MySQL利用MyODBC程式為ODBC提供支援。

16.1 MyODBC支援的作業系統

MyODBC是在Windows95和Windows NT上的一個32位ODBC(2.50) level 0驅動程式。我們希望誰能將它移植到Windows 3.x。

16.2 怎樣報告MyODBC的問題

MyODBC已經用Acess、Admndemo.exe、C++ Builder、Centura Team Developer(早先是Gupta SQL/Windows)、ColdFusion(在Solaris和用Server Pack 5的NT上)、Crystal Reports、DataJunction、Notes 4.5/4.6、SBSS、Perl DBD-ODBC、Paradox、Powerbuilder、Powerdesigner 32位、VC++和Visual Basic。

如果你聽說有任何其他的應用程式用MyODBC一起工作,請把它寄到myodbc@lists.mysql.com

16.3 已知可用MyODBC工作的程式

大多數程式應該可用MyODBC工作,但對下面列出的每一個,我們自己測試了它或從它運行的一些用戶得到了証實:

程式
說明
Access
為使Access工作:
DataJunction
你必須改變它來輸出VARCHAR而非ENUM,因為它以能引起MySQL困惑的方式導出後者。
Execl
工作。一些建議:
odbcadmin
為ODBC的測試程式。
Delphi
你必須使用DBE 3.2或更新。當與MySQL連接時,設置“Don't optimize column width”(不最佳化列寬度)選項域。另外,有一些潛在有用的delphi代碼安裝一個ODBC入口和針對MyODBC的一個BDE的入口(BDE入口需要一個BDE Alias Editor,可以到Delphi Super Page上免費擁有):(感謝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);
C++Builder
用BDE 3.0測試過。唯一知道的問題是,當表框架改變時,差詢字段不被更新。然而BDE似乎認不出主鍵,只是索引PRIMARY,盡管這已經不是個問題。
Visual Basic
為了能更新一張表,你必須為表定義一個主鍵。

16.4 怎樣填寫ODBC管理程式的各種域

在Windows95上,有3種可能性來指定伺服器名:

怎麼填寫“ODBC設置”的例子:

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設置中唯一的任何名字。

你不必為在ODBC設置屏的Server, User, PasswordPort域指定值。然而如果你這樣做,當你試圖做一個連接時,這些值將在以後作為內定值使用,那時你有改變值的選擇。

如果沒給出端口號,使用內定端口(3306)。

如果你指定選項Read options from C:\my.cnf,組clientodbc將從“C:\my.cnf”文件中讀出。你可以使用可用於mysql_options()的所有選項。見20.4.37 mysql_options()

16.5 怎樣在ODBC中獲得一個AUTO_INCREMENT列的值

一個常見的問題是怎樣得到一個自動從一個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;

16.6 報告MyODBC的問題

如果你碰到MyODBC困難,你應該通過ODBC管理器制作一個日誌文件(當從ODBCADMIN要求日誌時,你獲得的日誌文件)和一個MyODBC日誌文件來開始。為了獲得一個MyODBC日誌文件,在MyODBC連接/配置屏幕上標注“Trace MyODBC”選項標誌。日誌文件將被寫入文件“C:\myodbc.log”。注意為了此選項起作用,你必須使用MYSQL.DLL而不是MYSQL2.DLL

檢查MyODBC發給MySQL伺服器的查詢﹔你應該可以通過在“myodbc.log”文件中尋找字符串>mysql_real_query找到它。

你也應該試著在mysql監視器或admndemo中重複查詢以找出是MyODBC出錯還是MySQL出錯。

如果你發現某些東西是錯的,請值將相關的行(最大40排)發到myodbc@lists.mysql.com。請決不要發送整個MyODBC或ODBC日誌文件!

如果你不能找出是什麼錯誤,最後的選擇制作一個檔案(tar或zip),包含一個MyODBC日誌文件,ODBC日誌文件和一個解釋這個問題的 README文件。你可以把這發到ftp://www.mysql.com/pub/mysql/secret。至於在TCX的我們能訪問你上載的文件並且我們將分離數據!

如果你能創造一個也顯示出這個問題的程式,請也上載它!

如果程式與一些其他SQL伺服器一起工作,你應該制作一個 ODBC 日誌文件,在哪兒你在其他SQL伺服器做完全一樣的事情。

記住,你能提供我們越多的資訊,我們越可能解決這個問題!


第一章, 前一章, 下一章, 最後一章目錄.