⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 manual_odbc.html

📁 MySQL参考手册中文版
💻 HTML
字号:
<html>

<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
<style type="text/css">
<!--
.p14{font-size:14.8px;font-family:宋体;line-height:14pt;}
.p5{ border: 1px solid rgb(146,201,201) }
.a:hover{color:red;}
a.t1:visited{color:red;}
-->
</style>
<title>MySQL中文参考手册-16 MySQL的ODBC支持</title>
</head>

<body BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#101090" VLINK="#7030B0" class="p4">

<h1><img src="Img/mysql-logo.gif" alt="mysql-logo.gif (3082 bytes)" WIDTH="127" HEIGHT="60"><font color="#FF0000">MySQL中文参考手册</font></h1>

<p>翻译:<a href="mailto:clyan@sohu.com">晏子</a>(yanzi) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 主页:<a href="http://linuxdn.yeah.net">http://linuxdb.yeah.net</a></p>

<hr>

<p><a HREF="manual_Introduction.html">第一章</a>, <a HREF="manual_Adding_procedures.html">前一章</a>, <a HREF="manual_Common_programs.html">下一章</a>, 
<a HREF="manual_Concept_Index.html">最后一章</a>,<a HREF="manual_toc.html">目录</a>. 
</p>

<hr>

<h1><a NAME="ODBC" HREF="manual_toc.html#ODBC">16 MySQL对ODBC的支持</a></h1>

<p><strong>MySQL</strong>利用<strong>MyODBC</strong>程序为ODBC提供支持。</p>

<h2><a NAME="Which_ODBC_OS" HREF="manual_toc.html#Which_ODBC_OS">16.1 MyODBC支持的操作系统</a></h2>

<p><strong>MyODBC</strong>是在Windows95和Windows NT上的一个32位ODBC(2.50) level 0驱动程序。我们希望谁能将它移植到Windows 
3.x。</p>

<h2><a NAME="ODBC_Problems" HREF="manual_toc.html#ODBC_Problems">16.2 怎样报告MyODBC的问题</a></h2>

<p><strong>MyODBC</strong>已经用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。 </p>

<p>如果你听说有任何其他的应用程序用<strong>MyODBC</strong>一起工作,请把它寄到<a HREF="mailto:myodbc@lists.mysql.com">myodbc@lists.mysql.com</a>! </p>

<h2><a NAME="MyODBC_clients" HREF="manual_toc.html#MyODBC_clients">16.3 已知可用MyODBC工作的程序</a></h2>

<p>大多数程序应该可用<strong>MyODBC</strong>工作,但对下面列出的每一个,我们自己测试了它或从它运行的一些用户得到了证实: 

<dl COMPACT="MyODBC_clients">
  <dt><strong>程序</strong> </dt>
  <dd><strong>说明</strong> </dd>
  <dt>Access</dt>
  <dd>为使Access工作:<ul>
      <li>你应该在桌中有主键。 </li>
      <li>你应该在所有你想要能被修改的表中有一个时间戳记。</li>
      <li>仅使用双精度浮点数的字段。当用单精度浮点数进行比较时,Access失败。</li>
      <li>当与<strong>MySQL</strong>连接时,设置“Return matching rows”(返回匹配的行)选项域。 
      </li>
      <li>在NT上的Access将报告<code>BLOB</code>列为<code>OLE OBJECTS</code>。如果你想要有<code>MEMO</code>列,你应该用<code>ALTER 
        TABLE</code>把列改成<code>TEXT</code>。</li>
      <li>Access不能总是正确地处理<code>DATE</code>列。如果你对此有一个问题,把列改为<code>DATETIME</code>。</li>
      <li>在一些情况下,Access可以产生不合法的SQL查询,而<strong>MySQL</strong>不能理解。你可以通过从Access菜单<code>&quot;Query|SQLSpecific|Pass-Through&quot;</code>来修正它。</li>
    </ul>
  </dd>
  <dt>DataJunction</dt>
  <dd>你必须改变它来输出<code>VARCHAR</code>而非<code>ENUM</code>,因为它以能引起<strong>MySQL</strong>困惑的方式导出后者。</dd>
  <dt>Execl</dt>
  <dd>工作。一些建议:<ul>
      <li>如果你对日期有问题,试着使用<code>CONCAT()</code>函数作为字符串选择他们。例如:<pre>select CONCAT(rise_time), CONCAT(set_time)
    from sunrise_sunset;
</pre>
        <p>这种方式作为字符串检索出的值应该被Excel97识别为时间值,例子中<code>CONCAT()</code>的目的是欺骗ODBC认为列是“字符串类型”。没有<code>CONCAT()</code>,ODBC知道列是时间类型,而Excel不理解它。注意这是Excel的一个错误,因为它自动将一个字符串转换为一个时间。如果数据源是一个文本文件,这问题将很大,但是当数据源是对每列报告准确类型的一个ODBC连接时,只是有点傻。</p>
      </li>
    </ul>
  </dd>
  <dt>odbcadmin</dt>
  <dd>为ODBC的测试程序。 </dd>
  <dt>Delphi</dt>
  <dd>你必须使用DBE 3.2或更新。当与<strong>MySQL</strong>连接时,设置“Don't 
    optimize column width”(不优化列宽度)选项域。另外,有一些潜在有用的delphi代码安装一个ODBC入口和针对MyODBC的一个BDE的入口(BDE入口需要一个BDE 
    Alias Editor,可以到Delphi Super Page上免费拥有):(感谢Bryan Brunton <a HREF="mailto:bryan@flesherfab.com">bryan@flesherfab.com</a>)<pre>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);
</pre>
  </dd>
  <dt>C++Builder</dt>
  <dd>用BDE 3.0测试过。唯一知道的问题是,当表框架改变时,差询字段不被更新。然而BDE似乎认不出主键,只是索引PRIMARY,尽管这已经不是个问题。</dd>
  <dt>Visual Basic </dt>
  <dd>为了能更新一张表,你必须为表定义一个主键。 </dd>
</dl>

<h2><a NAME="ODBC_administrator" HREF="manual_toc.html#ODBC_administrator">16.4 
怎样填写ODBC管理程序的各种域</a></h2>

<p>在Windows95上,有3种可能性来指定服务器名: 

<ul>
  <li>使用服务器的IP地址。 </li>
  <li>增加一个文件<tt>“lmhosts”</tt>,具有下列信息:<pre>ip hostname
</pre>
    <p>例如: </p>
    <pre>
194.216.84.21 my</pre>
  </li>
  <li>设置PC以使用DNS。 </li>
</ul>

<p>怎么填写“ODBC设置”的例子:</p>

<pre>Windows DSN name:   test
Description:        This is my test database
MySql Database:     test
Server:             194.216.84.21
User:               monty
Password:           my_password
Port:
</pre>

<p>对<code>Windows DSN name</code>域的值是在你的Windows ODBC设置中唯一的任何名字。</p>

<p>你不必为在ODBC设置屏的<code>Server</code>, <code>User</code>, <code>Password</code>或<code>Port</code>域指定值。然而如果你这样做,当你试图做一个连接时,这些值将在以后作为缺省值使用,那时你有改变值的选择。</p>

<p>如果没给出端口号,使用缺省端口(3306)。 </p>

<p>如果你指定选项<code>Read options from C:\my.cnf</code>,组<code>client</code>和<code>odbc</code>将从<tt>“C:\my.cnf”</tt>文件中读出。你可以使用可用于<code>mysql_options()</code>的所有选项。见<a HREF="manual_Clients.html#mysql_options">20.4.37<code> mysql_options()</code></a>。</p>

<h2><a NAME="ODBC_and_last_insert_id" HREF="manual_toc.html#ODBC_and_last_insert_id">16.5 
怎样在ODBC中获得一个<code>AUTO_INCREMENT</code>列的值</a></h2>

<p>一个常见的问题是怎样得到一个自动从一个<code>INSERT</code>产生的ID值,用ODBC,你可以这样做(假定<code>auto</code>是一个<code>AUTO_INCREMENT</code>字段):</p>

<pre>INSERT INTO foo (auto,text) VALUES(NULL,'text');
SELECT LAST_INSERT_ID();
</pre>

<p>或,如果你是只是想把ID插入到另外一个表中,你可以这样做:</p>

<pre>INSERT INTO foo (auto,text) VALUES(NULL,'text');
INSERT INTO foo2 (id,text) VALUES(LAST_INSERT_ID(),'text');
</pre>

<p>得益于一些ODBC应用程序(至少Delphi和Access),下列查询可被用来找出最新插入的行:</p>

<pre>SELECT * FROM tbl_name WHERE auto IS NULL;
</pre>

<h2><a NAME="MyODBC_bug_report" HREF="manual_toc.html#MyODBC_bug_report">16.6 报告MyODBC的问题</a></h2>

<p>如果你碰到MyODBC困难,你应该通过ODBC管理器制作一个日志文件(当从ODBCADMIN要求日志时,你获得的日志文件)和一个<strong>MyODBC</strong>日志文件来开始。为了获得一个<strong>MyODBC</strong>日志文件,在<strong>MyODBC</strong>连接/配置屏幕上标注“Trace 
MyODBC”选项标志。日志文件将被写入文件<tt>“C:\myodbc.log”</tt>。注意为了此选项起作用,你必须使用<code>MYSQL.DLL</code>而不是<code>MYSQL2.DLL</code>!</p>

<p>检查MyODBC发给<strong>MySQL</strong>服务器的查询;你应该可以通过在<tt>“myodbc.log”</tt>文件中寻找字符串<code>&gt;mysql_real_query</code>找到它。</p>

<p>你也应该试着在<code>mysql</code>监视器或<code>admndemo</code>中重复查询以找出是MyODBC出错还是<strong>MySQL</strong>出错。 
</p>

<p>如果你发现某些东西是错的,请值将相关的行(最大40排)发到<a HREF="mailto:myodbc@lists.mysql.com">myodbc@lists.mysql.com</a>。请决不要发送整个MyODBC或ODBC日志文件!</p>

<p>如果你不能找出是什么错误,最后的选择制作一个档案(tar或zip),包含一个MyODBC日志文件,ODBC日志文件和一个解释这个问题的 
README文件。你可以把这发到<a HREF="ftp://www.mysql.com/pub/mysql/secret">ftp://www.mysql.com/pub/mysql/secret</a>。至于在TCX的我们能访问你上载的文件并且我们将分离数据!</p>

<p>如果你能创造一个也显示出这个问题的程序,请也上载它!</p>

<p>如果程序与一些其他SQL服务器一起工作,你应该制作一个 ODBC 
日志文件,在哪儿你在其他SQL服务器做完全一样的事情。</p>

<p>记住,你能提供我们越多的信息,我们越可能解决这个问题!</p>

<hr>

<p><a HREF="manual_Introduction.html">第一章</a>, <a HREF="manual_Adding_procedures.html">前一章</a>, <a HREF="manual_Common_programs.html">下一章</a>, 
<a HREF="manual_Concept_Index.html">最后一章</a>,<a HREF="manual_toc.html">目录</a>. 
</p>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -