大多数 Microsoft 应用程序都已使用 Connector/ODBC 进行了测试,包括 Microsoft Office、Microsoft Access 以及 ASP 和 Microsoft Visual Studio 中支持的各种编程语言。
通过 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
属性 设置为。考虑从视图中隐藏该列,这样您的用户就不会感到困惑。TIMESTAMP
NOW()
TIMESTAMP
在某些情况下,Access 可能会生成 MySQL 无法理解的 SQL 语句。您可以通过
"Query|SQLSpecific|Pass-Through"
从“访问”菜单中进行选择来解决此问题。在 Windows NT 上,Access 将
BLOB
列报告为OLE OBJECTS
. 如果您想改为使用MEMO
列,请将列更改BLOB
为TEXT
withALTER TABLE
。如果您在 Access 中有一个定义为 的列
BYTE
,Access 会尝试将其导出为TINYINT
而不是TINYINT UNSIGNED
。如果列中的值大于 127,这会给您带来问题。如果 Access 中有非常大(长)的表,打开它们可能需要很长时间。或者您可能会在虚拟内存不足的情况下运行并最终出现
ODBC Query Failed
错误并且无法打开表。要处理此问题,请选择以下选项:返回匹配行 (2)
允许大结果 (8)。
这些加起来的值为 10 (
OPTION=10
)。
在使用 Access、ODBC 和 Connector/ODBC 时可能有用的一些外部文章和提示:
优化 Access ODBC 应用程序
如果您在将数据导入 Microsoft Excel 时遇到问题,尤其是数字、日期和时间值,这可能是因为 Excel 中存在错误,其中源数据的列类型用于确定数据插入时的数据类型工作表中的一个单元格。结果是 Excel 错误地识别了内容,这会影响在计算中使用时的显示格式和数据。
要解决此问题,
CONCAT()
请在查询中使用该函数。使用CONCAT()
强制 Excel 将该值视为字符串,然后 Excel 将解析该字符串并通常正确识别嵌入的信息。
但是,即使使用此选项,某些数据的格式也可能不正确,即使源数据保持不变。使用Format Cells
Excel 中的选项更改显示信息的格式。
为了能够更新表,您必须为表定义一个 主键。
带有 ADO 的 Visual Basic 不能处理大整数。这意味着某些查询SHOW
PROCESSLIST
无法正常工作。解决方法是OPTION=16384
在 ODBC 连接字符串中使用或Change BIGINT columns to
INT
在连接器/ODBC 连接屏幕中选择该选项。您可能还想选择该Return matching
rows
选项。
如果BIGINT
结果中有 a,则可能会出现错误[Microsoft][ODBC
Driver Manager] Driver does not support this
parameter
。尝试Change
BIGINT columns to INT
在连接器/ODBC 连接屏幕中选择该选项。
当您使用 ADO API 和连接器/ODBC 进行编码时,您需要注意一些 MySQL 服务器不支持的默认属性。例如,使用
CursorLocation Property
as 为
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) 常见问题解答。
选择Return matching rows
DSN 中的选项。
有关如何使用 Connector/ODBC 通过 ASP 访问 MySQL 的更多信息,请参阅以下文章:
可以在 http://support.microsoft.com/default.aspx?scid=/Support/ActiveServer/faq/data/adofaq.asp找到 ASP 的常见问题列表。
一些可能对 Visual Basic 和 ASP 有帮助的文章:
MySQL BLOB 列和 Visual Basic 6,作者 Mike Hillyer ( )。
<mike@openwin.org>
Mike Hillyer ( ) 如何将 Visual basic 数据类型映射到 MySQL 类型。
<mike@openwin.org>