|
MySql利用MyODBC程序为ODBC提供支持。 16.1MyODBC支持的操作系统MyODBC是在Windows95和WindowsNT上的一个32位ODBC(2.50)level0驱动程序。我们希望谁能将它移植到Windows3.x。 16.2怎样报告MyODBC的问题MyODBC已经用Acess、Admndemo.exe、C++Builder、CenturaTeamDeveloper(早先是GuptaSQL/Windows)、ColdFusion(在Solaris和用ServerPack5的NT上)、CrystalReports、DataJunction、Notes4.5/4.6、SBSS、PerlDBD-ODBC、Paradox、Powerbuilder、Powerdesigner32位、VC++和VisualBasic。 如果你听说有任何其他的应用程序用MyODBC一起工作,请把它寄到MySql.com">myodbc@lists.MySql.com! 16.3已知可用MyODBC工作的程序大多数程序应该可用MyODBC工作,但对下面列出的每一个,我们自己测试了它或从它运行的一些用户得到了证实:程序说明Access为使Access工作:- 你应该在桌中有主键。
- 你应该在所有你想要能被修改的表中有一个时间戳记。
- 仅使用双精度浮点数的字段。当用单精度浮点数进行比较时,Access失败。
- 当与MySql连接时,设置“Returnmatchingrows”(返回匹配的行)选项域。
- 在NT上的Access将报告
BLOB列为OLEOBJECTS。如果你想要有MEMO列,你应该用ALTERTABLE把列改成TEXT。 - Access不能总是正确地处理
DATE列。如果你对此有一个问题,把列改为DATETIME。 - 在一些情况下,Access可以产生不合法的SQL查询,而MySql不能理解。你可以通过从Access菜单
"Query|SQLSpecific|Pass-Through"来修正它。 DataJunction你必须改变它来输出VARCHAR而非ENUM,因为它以能引起MySQL困惑的方式导出后者。Execl工作。一些建议:- 如果你对日期有问题,试着使用
CONCAT()函数作为字符串选择他们。例如:selectCONCAT(rise_time),CONCAT(set_time)fromsunrise_sunset; 这种方式作为字符串检索出的值应该被Excel97识别为时间值,例子中CONCAT()的目的是欺骗ODBC认为列是“字符串类型”。没有CONCAT(),ODBC知道列是时间类型,而Excel不理解它。注意这是Excel的一个错误,因为它自动将一个字符串转换为一个时间。如果数据源是一个文本文件,这问题将很大,但是当数据源是对每列报告准确类型的一个ODBC连接时,只是有点傻。 odbcadmin为ODBC的测试程序。Delphi你必须使用DBE3.2或更新。当与MySQL连接时,设置“Dontoptimizecolumnwidth”(不优化列宽度)选项域。另外,有一些潜在有用的delphi代码安装一个ODBC入口和针对MyODBC的一个BDE的入口(BDE入口需要一个BDEAliasEditor,可以到DelphiSuperPage上免费拥有):(感谢BryanBruntonbryan@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\ODBCDataSources,True);fReg.WriteString(DocumentsFab,MySQL);fReg.CloseKey;fReg.Free;Memo1.Lines.Add(DATABASENAME=);Memo1.Lines.Add(USERNAME=);Memo1.Lines.Add(ODBCDSN=DocumentsFab);Memo1.Lines.Add(OPENMODE=READ/WRITE);Memo1.Lines.Add(BATCHCOUNT=200);Memo1.Lines.Add(LANGDRIVER=);Memo1.Lines.Add(MAXROWS=-1);Memo1.Lines.Add(SCHEMACACHEDIR=);Memo1.Lines.Add(SCHEMACACHESIZE=8);Memo1.Lines.Add(SCHEMACACHETIME=-1);Memo1.Lines.Add(SQLPASSTHRUMODE=SHAREDAUTOCOMMIT);Memo1.Lines.Add(SQLQRYMODE=);Memo1.Lines.Add(ENABLESCHEMACACHE=FALSE);Memo1.Lines.Add(ENABLEBCD=FALSE);Memo1.Lines.Add(ROWSETSIZE=20);Memo1.Lines.Add(BLOBSTOCACHE=64);Memo1.Lines.Add(BLOBSIZE=32);AliasEditor.Add(DocumentsFab,MySQL,Memo1.Lines); C++Builder用BDE3.0测试过。唯一知道的问题是,当表框架改变时,差询字段不被更新。然而BDE似乎认不出主键,只是索引PRIMARY,尽管这已经不是个问题。VisualBasic为了能更新一张表,你必须为表定义一个主键。16.4怎样填写ODBC管理程序的各种域在Windows95上,有3种可能性来指定服务器名: - 使用服务器的IP地址。
- 增加一个文件“lmhosts”,具有下列信息:
iphostname 例如: 194.216.84.21my - 设置PC以使用DNS。
怎么填写“ODBC设置”的例子: WindowsDSNname:testDescription:ThisismytestdatabaseMySqlDatabase:testServer:194.216.84.21User:montyPassword:my_passwordPort: 对WindowsDSNname域的值是在你的WindowsODBC设置中唯一的任何名字。 你不必为在ODBC设置屏的Server,User,Password或Port域指定值。然而如果你这样做,当你试图做一个连接时,这些值将在以后作为缺省值使用,那时你有改变值的选择。 如果没给出端口号,使用缺省端口(3306)。 如果你指定选项ReadoptionsfromC:\my.cnf,组client和odbc将从“C:\my.cnf”文件中读出。你可以使用可用于sql/Index.html'>mysql_options()的所有选项。见20.4.37sql/Index.html'>mysql_options()。 16.5怎样在ODBC中获得一个AUTO_INCREMENT列的值一个常见的问题是怎样得到一个自动从一个INSERT产生的ID值,用ODBC,你可以这样做(假定auto是一个AUTO_INCREMENT字段): INSERTINTOfoo(auto,text)VALUES(NULL,text);SELECTLAST_INSERT_ID(); 或,如果你是只是想把ID插入到另外一个表中,你可以这样做: [1] [2] 下一页
|