MySQL中文参考手册---16 MySQL对ODBC的支持
时间:2008-05-14 来源:sdccf
来源:网海拾贝 |
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一起工作,请把它寄到[email protected]! 16.3 已知可用MyODBC工作的程序大多数程序应该可用MyODBC工作,但对下面列出的每一个,我们自己测试了它或从它运行的一些用户得到了证实: 程序 说明 Access 为使Access工作:
fReg:= TRegistry.Create; fReg.OpenKey('SoftwareODBCODBC.INIDocumentsFab', True); fReg.WriteString('Database', 'Documents'); fReg.WriteString('Description', ' '); fReg.WriteString('Driver', 'C:WINNTSystem32myodbc.dll'); fReg.WriteString('Flag', '1'); fReg.WriteString('Password', ''); fReg.WriteString('Port', ' '); fReg.WriteString('Server', 'xmark'); fReg.WriteString('User', 'winuser'); fReg.OpenKey('SoftwareODBCODBC.INIODBC 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, Password或Port域指定值。然而如果你这样做,当你试图做一个连接时,这些值将在以后作为缺省值使用,那时你有改变值的选择。 如果没给出端口号,使用缺省端口(3306)。 如果你指定选项Read options from C:my.cnf,组client和odbc将从“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排)发到[email protected]。请决不要发送整个MyODBC或ODBC日志文件! 如果你不能找出是什么错误,最后的选择制作一个档案(tar或zip),包含一个MyODBC日志文件,ODBC日志文件和一个解释这个问题的 README文件。你可以把这发到ftp://www.mysql.com/pub/mysql/secret。至于在TCX的我们能访问你上载的文件并且我们将分离数据! 如果你能创造一个也显示出这个问题的程序,请也上载它! 如果程序与一些其他SQL服务器一起工作,你应该制作一个 ODBC 日志文件,在哪儿你在其他SQL服务器做完全一样的事情。 记住,你能提供我们越多的信息,我们越可能解决这个问题! |