5.8.2.1 将连接器/ODBC 与 Microsoft 应用程序一起使用

大多数 Microsoft 应用程序都已使用 Connector/ODBC 进行了测试,包括 Microsoft Office、Microsoft Access 以及 ASP 和 Microsoft Visual Studio 中支持的各种编程语言。

5.8.2.1.1 微软访问

通过 Connector/ODBC 改进 Microsoft Access 和 MySQL 之间的集成:

  • 对于所有版本的 Access,启用连接器/ODBC Return matching rows选项。对于 Access 2.0,还启用该Simulate ODBC 1.0选项。

  • TIMESTAMP 在您希望能够更新的所有表中 包含一列。为了获得最大的可移植性,不要在列声明中使用长度规范(在 4.1 之前的 MySQL 版本中不支持)。

  • 在要与 Access 一起使用的每个 MySQL 表中 包含一个主键。否则,新的或更新的行可能显示为 #DELETED#

  • 仅使用DOUBLE浮动字段。与单精度浮点数比较时访问失败。症状通常是新的或更新的行可能显示为, #DELETED#或者您无法找到或更新行。

  • 如果您使用连接器/ODBC 链接到具有 BIGINT列的表,则结果显示为#DELETED#. 解决方案的工作是:

    • 有一个虚拟列 TIMESTAMP作为数据类型。

    • 在 ODBC DSN 管理器的连接对话框中选择该Change BIGINT columns to INT选项。

    • 从 Access 中删除表链接并重新创建它。

    旧记录可能仍显示为 #DELETED#,但新添加/更新的记录会正确显示。

  • 如果Another user has changed your data在添加 TIMESTAMP列后仍然出现错误,以下技巧可能会对您有所帮助:

    不要使用table数据表视图。相反,创建一个包含所需字段的表单,然后使用该form数据表视图。将 列 的DefaultValue属性 设置为。考虑从视图中隐藏该列,这样您的用户就不会感到困惑。 TIMESTAMPNOW()TIMESTAMP

  • 在某些情况下,Access 可能会生成 MySQL 无法理解的 SQL 语句。您可以通过 "Query|SQLSpecific|Pass-Through"从“访问”菜单中进行选择来解决此问题。

  • 在 Windows NT 上,Access 将 BLOB列报告为 OLE OBJECTS. 如果您想改为使用 MEMO列,请将列更改 BLOBTEXTwith ALTER TABLE

  • Access 无法始终 DATE正确处理 MySQL 列。如果您对这些有疑问,请将列更改为 DATETIME

  • 如果您在 Access 中有一个定义为 的列 BYTE,Access 会尝试将其导出为 TINYINT而不是 TINYINT UNSIGNED。如果列中的值大于 127,这会给您带来问题。

  • 如果 Access 中有非常大(长)的表,打开它们可能需要很长时间。或者您可能会在虚拟内存不足的情况下运行并最终出现ODBC Query Failed错误并且无法打开表。要处理此问题,请选择以下选项:

    • 返回匹配行 (2)

    • 允许大结果 (8)。

    这些加起来的值为 10 ( OPTION=10)。

在使用 Access、ODBC 和 Connector/ODBC 时可能有用的一些外部文章和提示:

5.8.2.1.2 Microsoft Excel 和列类型

如果您在将数据导入 Microsoft Excel 时遇到问题,尤其是数字、日期和时间值,这可能是因为 Excel 中存在错误,其中源数据的列类型用于确定数据插入时的数据类型工作表中的一个单元格。结果是 Excel 错误地识别了内容,这会影响在计算中使用时的显示格式和数据。

要解决此问题, CONCAT()请在查询中使用该函数。使用CONCAT() 强制 Excel 将该值视为字符串,然后 Excel 将解析该字符串并通常正确识别嵌入的信息。

但是,即使使用此选项,某些数据的格式也可能不正确,即使源数据保持不变。使用Format CellsExcel 中的选项更改显示信息的格式。

5.8.2.1.3 Microsoft Visual Basic

为了能够更新表,您必须为表定义一个 主键

带有 ADO 的 Visual Basic 不能处理大整数。这意味着某些查询SHOW PROCESSLIST无法正常工作。解决方法是OPTION=16384在 ODBC 连接字符串中使用或Change BIGINT columns to INT在连接器/ODBC 连接屏幕中选择该选项。您可能还想选择该Return matching rows选项。

5.8.2.1.4 微软 Visual InterDev

如果BIGINT结果中有 a,则可能会出现错误[Microsoft][ODBC Driver Manager] Driver does not support this parameter。尝试Change BIGINT columns to INT在连接器/ODBC 连接屏幕中选择该选项。

5.8.2.1.5 视觉对象

选择Don't optimize column widths 选项。

5.8.2.1.6 微软 ADO

当您使用 ADO API 和连接器/ODBC 进行编码时,您需要注意一些 MySQL 服务器不支持的默认属性。例如,使用 CursorLocation Propertyas 为 adUseServer返回 −1 的结果RecordCount Property。要获得正确的值,您需要将此属性设置为 adUseClient,如此处的 VB 代码所示:

Dim myconn As New ADODB.Connection
Dim myrs As New Recordset
Dim mySQL As String
Dim myrows As Long
myconn.Open "DSN=MyODBCsample"
mySQL = "SELECT * from user"
myrs.Source = mySQL
Set myrs.ActiveConnection = myconn
myrs.CursorLocation = adUseClient
myrs.Open
myrows = myrs.RecordCount
myrs.Close
myconn.Close

另一种解决方法是使用SELECT COUNT(*)类似查询的语句来获取正确的行数。

要查找 ADO 中特定 SQL 语句影响的行数,请使用RecordsAffected ADO 执行方法中的属性。execute方法的更多使用方法请参考 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthcnexecute.asp

有关信息,请参阅 ActiveX 数据对象 (ADO) 常见问题解答

5.8.2.1.7 将连接器/ODBC 与活动服务器页面 (ASP) 结合使用

选择Return matching rowsDSN 中的选项。

有关如何使用 Connector/ODBC 通过 ASP 访问 MySQL 的更多信息,请参阅以下文章:

可以在 http://support.microsoft.com/default.aspx?scid=/Support/ActiveServer/faq/data/adofaq.asp找到 ASP 的常见问题列表。

5.8.2.1.8 在 Visual Basic(ADO、DAO 和 RDO)和 ASP 中使用连接器/ODBC

一些可能对 Visual Basic 和 ASP 有帮助的文章: