Как получить значение столбца AUTO_INCREMENT в ODBC
Существует распространенная проблема, заключающаяся в том, как получить значение автоматически сгенерированного ID из INSERT . С помощью 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;
Составление отчетов о проблемах с MyODBC
Если встречаются трудности с применением MyODBC , то следует начинать с получения системного журнала менеджера ODBC (журнал, получаемый при затребовании записей в Администраторе ODBC) и журнала MyODBC .
Чтобы получить журнал MyODBC , необходимо выполнить следующие действия:
Убедитесь, что вы используете 'myodbcd.dll', а не 'myodbc.dll'. Наиболее простой способ - получить файл 'myodbcd.dll' из дистрибутива MyODBC и скопировать его поверх файла 'myodbc.dll', который должен находиться в вашем каталоге 'C:\windows\system32' или 'C:\winnt\system32'. Однако после окончания тестирования целесообразно восстановить старый файл 'myodbc.dll', поскольку он намного быстрее, чем 'myodbcd.dll'.
Включите опцию Trace MyODBC в окне подключения/конфигурации MyODBC . Информация будет записываться в файл 'C:\myodbc.log'. Если опция трассировки не запоминается при возвращении к предыдущему окну, то это означает, что сейчас драйвер 'myodbcd.dll' не используется (см. пункт выше).
Запустите свое приложение и попытайтесь получить отказ в работе.
Проверьте трассировочный файл MyODBC , что бы попытаться выяснить, в чем дело. Можно также найти сделанные вами запросы в файле 'myodbc.log' - поищите в нем строку >mysql_real_query .
Попробуйте также выполнить дублирование этих запросов с помощью монитора mysql или admndemo , чтобы определить, где возникает ошибка - в MyODBC или в MySQL.
Если вы обнаружите какую-либо ошибку, то присылайте, пожалуйста, только строки, имеющие отношение к ней (максимум 40 строк), по адресу myodbc@lists.mysql.com. Просьба никогда не присылать полностью весь системный журнал MyODBC или ODBC!
Если у вас нет возможности определить, что именно у вас не так, остается последняя возможность - создать архив (tar или zip), содержащий трассировочный файл MyODBC, системный журнал ODBC и файл README с описанием своей проблемы. Вы можете послать это по адресу ftp://support.mysql.com/pub/mysql/secret/. В MySQL AB только мы будем иметь доступ к присланным вами файлам. Гарантируем, что с ними мы будем обращаться очень осторожно!
Если вы можете создать программу для демонстрации данной проблемы, присылайте, пожалуйста, и ее тоже!
Если эта программа работает с некоторыми другими серверами SQL, следует сделать системный журнал ODBC, где вы делаете в точности то же самое в другом сервере SQL.
Помните, что чем больше информации вы нам предоставите, тем больше вероятность, что мы сможем решить данную проблему!
1 2 3 4
8 8 8
| |