Buy this Reference Manual in softcover from Barnes & Noble!
Большинство программ должно работать с MyODBC
, но для каждой из перечисленных ниже мы либо провели тестирование сами, либо получили подтверждение от пользователей, что она действительно работает:
Microsoft Data Access Components
), которую можно найти на http://www.microsoft.com/data/. Это позволит устранить ошибку в Access, которая проявляется в том, что при экспорте данных в MySQL не указываются имена таблиц и столбцов. Еще один способ обойти эту ошибку заключается в модернизации MyODBC
до версии 2.50.33 и MySQL до версии 3.23.x - оба апгрейда вместе обеспечивают обход данной ошибки! Необходимо также получить и использовать Microsoft Jet 4.0 Service Pack 5 (SP5), который можно найти на http://support.microsoft.com/support/kb/articles/Q 239/1/14.ASP. Это позволит исключить некоторые случаи, когда столбцы в Access отмечаются как #deleted#
. Следует учитывать, что при использовании версии MySQL 3.22 необходимо применять патч для MDAC и использовать MyODBC 2.50.32 или 2.50.34 и выше, чтобы обойти эту проблему.Return matching rows
. Для Access 2.0 следует дополнительно включить Simulate ODBC 1.0.TIMESTAMP
для временных меток. Для максимальной переносимости рекомендуется TIMESTAMP(14)
или просто TIMESTAMP
вместо других вариантов TIMESTAMP(X)
.#DELETED#
.DOUBLE
). Access отказывается работать при сравнении чисел с плавающей запятой одинарной точности. Проявляется это обычно в том, что новые или обновленные строки могут выводиться как #DELETED#
или в том, что вы не можете найти или обновить строки.BIGINT
, результат будет выводиться как #DELETED#
. Обходное решение заключается в следующем:
TIMESTAMP
в качестве типа данных, предпочтительно TIMESTAMP(14)
.Change BIGINT columns to INT
в диалоговом окне опций подключения в Администраторе источников данных ODBC DSN#DELETED#
, а заново добавленные/обновленные записи будут уже выводиться правильно.
TIMESTAMP
все еще появляется ошибка Another user has changed your data
, то, возможно, поможет следующий трюк. Не используйте режим работы ``Таблица''. Вместо этого создайте форму с желаемыми полями и используйте режим работы ``Форма''. Следует установить свойство DefaultValue
для столбца TIMESTAMP
в NOW()
. Возможно, было бы неплохо убрать столбец TIMESTAMP
из поля зрения, чтобы не смущать пользователей.Query|SQLSpecific|Pass-Through
.BLOB
как об объектах OLE. Если вместо этого вы хотите иметь столбцы MEMO
, то необходимо изменить тип столбца на TEXT
с помощью ALTER TABLE
.DATE
. Если с ними возникают проблемы, следует изменить тип этих столбцов на DATETIME
.BYTE
, то Access будет пытаться экспортировать его как TINYINT
вместо TINYINT UNSIGNED
. Это будет вызывать проблемы, если величины в данном столбце превышают 127!MyODBC
необходимо обратить внимание на некоторые исходные свойства, которые не поддерживаются сервером MySQL. Например, использование свойства CursorLocation
как adUseServer
будет возвращать для свойства RecordCount
результат -1. Чтобы получить правильную величину, необходимо установить данное свойство в 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(*)
, чтобы получить правильное количество строк.
Return matching rows
.Don't optimize column widths
и Return matching rows
.
Active
или метод Open
. Следует учитывать, что Active
будет начинать работу при автоматической выдаче запроса SELECT * FROM ...
, что может оказаться не так уж и хорошо для больших таблиц!MyODBC
следует использовать следующую информацию. Корпорация Allaire подтвердила, что версия MyODBC 2.50.26 работает с версией MySQL 3.22.27 и ColdFusion для Linux (любая более новая версия также должна работать). Драйвер MyODBC
можно загрузить с http://www.mysql.com/downloads/api-myodbc.html В версии ColdFusion 4.5.1 можно использовать Администратор источников данных ColdFusion для добавления источника данных MySQL. Однако данный драйвер не включен в версию ColdFusion 4.5.1. Чтобы драйвер MySQL появился в выпадающем списке источников данных ODBC, необходимо создать драйвер MyODBC
и скопировать его в каталог `/opt/coldfusion/lib/libmyodbc.so'. Каталог `Contrib' содержит программу `mydsn-xxx.zip', которая позволяет создавать и удалять файл реестра DSN для драйвера MyODBC
для приложений Coldfusion.
VARCHAR
вместо ENUM
, поскольку экспорт ENUM
происходит таким образом, что вызывает неприятности в MySQL.
CONCAT()
. Например:
select CONCAT(rise_time), CONCAT(set_time) from sunrise_sunset;Величины, извлеченные как строки этим способом, должны корректно распознаваться программой Excel97 как значения времени. Назначение функции
CONCAT()
в этом примере состоит в том, чтобы ``обмануть'' ODBC, заставив интерпретировать столбец как столбец ``строкового типа''. Без функции CONCAT()
ODBC будет считать, что это столбец временного типа, и Excel не распознает его. Следует заметить, что это является ошибкой Excel, поскольку он автоматически преобразует строку в значения времени. Это замечательно если источником является текстовый файл, но это глупо, когда источником является подключение ODBC, дающее точные типы данных для каждого столбца.
MyODBC
и помощь встроенной программы Microsoft Query. Для создания, например, базы данных db
с таблицей, содержащей 2 столбца с текстом, необходимо выполнить следующие действия:
mysql
.db
.Don't optimize column width
при подключении к MySQL. Кроме того, ниже приводится потенциально полезный код Delphi, который устанавливает вхождения для драйвера MyODBC как в ODBC, так и в BDE. (Запись в BDE требует наличия редактора псевдонимов BDE Alias Editor, который доступен бесплатно на Delphi Super Page. Спасибо за это Брайену Брантону (Bryan Brunton )):
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);
PRIMARY
, тем не менее, это не было проблемой.Return matching rows
.
SHOW PROCESSLIST
не будут работать правильно. Для устранения данной проблемы нужно добавить опцию OPTION=16834
в строке подключения ODBC или установить опцию Change BIGINT columns to IN
T в окне подключения MyODBC
. Можно также установить опцию Return matching rows
.[Microsoft][ODBC Driver Manager] Driver does not support this parameter
, то ее причина может заключаться в том, что результат содержит данные типа BIGINT
. Попробуйте установить опцию Change BIGINT columns to INT
в окне подключения MyODBC
.Don't optimize column widths
.Posted by on Saturday August 31 2002, @11:50pm | [Delete] [Edit] |
re Access & VB w/ MyODBC: If you are updating a
MySQL text field using ADO, you should set column
size optimization OFF in the MyODBC options
screen. Otherwise, the ADO DefinedSize property
incorrectly reflects the optimized size instead of the
defined size. The result is that ADO complains if you
add a record with a text field longer than the
previously-optimized size.
Also, if you use column names with spaces or other
naughty things, you should set the ADO
CursorLocation
to adUseClient to update MySQL records. This avoids
the problem of backquoting field names --
apparently ADO must do it for you if the cursor is
local (haven't looked into the why, but it works).
Posted by Chris Bloom on Thursday September 19 2002, @12:47pm | [Delete] [Edit] |
In ASP, the following error may be generated when
you attempt to populate a field marked as VarChar
using the "objRecordSet.Fields("field_name") =
value" syntax:
"Multiple-step OLE DB operation generated errors.
Check each OLE DB status value, if available. No
work was done."
To correct this problem, check the "Don't optimize
column widths" in your MyODBC configurations.
Posted by on Friday October 4 2002, @9:33am | [Delete] [Edit] |
Well, I have tried to set the Don't Optimize Column
Width checkbox, but it didn't work. Not a real
solution to this problem...
Posted by adam griffiths on Friday October 18 2002, @4:31am | [Delete] [Edit] |
I found that to in Microsoft Access i would
get "#deleted" when inserting a new row into a
table with TEXT or MEDIUMTEXT field. I tried all the
tips on this page and installed all the latest, relevant,
pieces of software. Eventually I found that if I
included a CHAR or VARCHAR field in the table and
gave it a value when inserting the row the row
inserted fine and access did not display #deleted. (I
hope someone finds this useful) (If anyone knows
why i was getting the problem in the first place, or
better fix, or why this one works, I for one would
certainly appreciate their posting a comment here!)
Posted by jan ardosa on Sunday November 24 2002, @7:29pm | [Delete] [Edit] |
I'm trying to use MySQL (3.23.52) as backend of
my powerbuilder 7 application (maintenance release
2) but i encountered a problem filtering records using
datetime
columns and runtime arguments ( e.g. datetimevar
>= '11-01-1999 and datetimevar <= '11-30-
1999). Any idea how can this be done.
Posted by on Sunday December 8 2002, @10:32am | [Delete] [Edit] |
Well, recently I been working in a program to
exporta data from ACCESS to mySQL using Visual
Basic 6, but I founded an strange thing. Visual Basic
does not work with "Create Table" query's, the Error
reportes is "Syntax error" in query, but running this
query from another interface phpmyAdmin by
example, my query runs fine. Aparently, the problem
is Visual Basic, trying to check syntac before sending
the query to mySQL. Further, i'll be in touch to
explain how to solve this problem.
Add your own comment.