荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: georgehill (清风浮云 人生), 信区: Linux
标  题: mysql16
发信站: BBS 荔园晨风站 (Fri Nov 17 16:01:01 2000), 站内信件

【 以下文字转载自 georgehill 的信箱 】
【 原文由 georgehill.bbs@fb2000.dhs.org 所发表 】
寄信人: deardragon.bbs@bbs.whnet.edu.cn
标  题: mysql16
发信站: 快意灌水站 BBS 信差
来  源: from bbs.whnet.edu.cn (bbs.whnet.edu.cn [202.112.20.132])
日  期: Fri Nov 17 01:06:16 2000

发信人: hzh (网络飞翔), 信区: PHP
标  题: mysql16
发信站: 武汉白云黄鹤站 (Tue May 30 18:18:53 2000), 转信

MySQL中文参考手册
翻译:晏子(yanzi)       主页:http://linuxdb.yeah.net
----------------------------------------------------------------------------
----
第一章, 前一章, 下一章, 最后一章,目录.
----------------------------------------------------------------------------
----
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(早先是G
upta SQL/Windows)、ColdFusion(在Solaris和用Server Pack 5的NT上)、Crystal Rep
orts、DataJunction、Notes 4.5/4.6、SBSS、Perl DBD-ODBC、Paradox、Powerbuilde
r、Powerdesigner 32位、VC++和Visual Basic。
如果你听说有任何其他的应用程序用MyODBC一起工作,请把它寄到myodbc@lists.mysql
.com!
16.3 已知可用MyODBC工作的程序
大多数程序应该可用MyODBC工作,但对下面列出的每一个,我们自己测试了它或从它运
行的一些用户得到了证实:
程序
说明
Access
为使Access工作:
你应该在桌中有主键。
你应该在所有你想要能被修改的表中有一个时间戳记。
仅使用双精度浮点数的字段。当用单精度浮点数进行比较时,Access失败。
当与MySQL连接时,设置“Return matching rows”(返回匹配的行)选项域。
在NT上的Access将报告BLOB列为OLE OBJECTS。如果你想要有MEMO列,你应该用ALTER T
ABLE把列改成TEXT。
Access不能总是正确地处理DATE列。如果你对此有一个问题,把列改为DATETIME。
在一些情况下,Access可以产生不合法的SQL查询,而MySQL不能理解。你可以通过从Ac
cess菜单"Query|SQLSpecific|Pass-Through"来修正它。
DataJunction
你必须改变它来输出VARCHAR而非ENUM,因为它以能引起MySQL困惑的方式导出后者。
Execl
工作。一些建议:
如果你对日期有问题,试着使用CONCAT()函数作为字符串选择他们。例如:
select CONCAT(rise_time), CONCAT(set_time)
    from sunrise_sunset;
这种方式作为字符串检索出的值应该被Excel97识别为时间值,例子中CONCAT()的目的是
欺骗ODBC认为列是“字符串类型”。没有CONCAT(),ODBC知道列是时间类型,而Excel不
理解它。注意这是Excel的一个错误,因为它自动将一个字符串转换为一个时间。如果数
据源是一个文本文件,这问题将很大,但是当数据源是对每列报告准确类型的一个ODBC
连接时,只是有点傻。
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种可能性来指定服务器名:
使用服务器的IP地址。
增加一个文件“lmhosts”,具有下列信息:
ip hostname
例如:
194.216.84.21 my
设置PC以使用DNS。
怎么填写“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排)发到myodbc@lists.mysql.com
。请决不要发送整个MyODBC或ODBC日志文件!
如果你不能找出是什么错误,最后的选择制作一个档案(tar或zip),包含一个MyODBC日
志文件,ODBC日志文件和一个解释这个问题的 README文件。你可以把这发到ftp://www
.mysql.com/pub/mysql/secret。至于在TCX的我们能访问你上载的文件并且我们将分离
数据!
如果你能创造一个也显示出这个问题的程序,请也上载它!
如果程序与一些其他SQL服务器一起工作,你应该制作一个 ODBC 日志文件,在哪儿你在
其他SQL服务器做完全一样的事情。
记住,你能提供我们越多的信息,我们越可能解决这个问题!
----------------------------------------------------------------------------
----
第一章, 前一章, 下一章, 最后一章,目录.

--
※ 来源:.武汉白云黄鹤站 bbs.whnet.edu.cn.[FROM: 211.69.195.74]
--
※ 转寄:.武汉白云黄鹤站 bbs.whnet.edu.cn.[FROM: 210.38.240.158]
--
※ 转寄:·快意灌水站 fb2000.dhs.org·[FROM: 210.39.3.50]
--
※ 转载:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.115]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店