| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Ошибки при попытке подключения к MySQL. |
| Автор: Mal Hack 12.11.2004, 15:40 | ||
| Уже два часа юзаю поиск тут и на mysql.ru но ниче найьт не могу.. Трабла такая... Используя dbExpress создаю соединение с mysql SQLConnection1. Вот код из DFM'a.
Дык вот, когда пытаюсь Active сделать = TRUE через инспектор объектов - получаю.... 1. libmysql.dll not found. (Понапихал куда только можно... ив /bin и в папку с проектом и в c:/windows и /system32)... 2. Очищаю Vendorlib, получаю DLL/Shared Library name not set. Пробовал и полные пути написать - та же фигня.. Как от всего этого избавиться понять никак нет могу... С самим MySQL через PHP работаю уже года два. С базами из Delphi работал только с 7 Paradox'ом... Еще один такой момент... В результате каких-то монипуляций иногда выскакивает еще одна вещь что-то типа "Невозможно загруить драйвер" (или функцию драйвера)... |
| Автор: <Spawn> 12.11.2004, 20:55 |
| Используй компоненты ZeosAccess |
| Автор: Mal Hack 12.11.2004, 21:14 | ||
| <Spawn> Дело в том, что программу надо будет компилить на многих компах, гд возможно не удастся установить данное расширение... (задание по практике в учеьном заведении). Поэтому хочется обойтись стандартными средствами...
TMySQL это оно? |
| Автор: Kesh 13.11.2004, 01:08 |
| Mal Hack насколько я понял - нет... поищи ZeosDBO http://www.zeoslib.net/ |
| Автор: Mal Hack 13.11.2004, 10:20 |
| Если в этом покопаться, то можно рпзобраться.. Но повторюсь, надо сделатьна стандартном dbExpress'e... Приложение - просто практика, никуда дальше не пойдет, поэтому надо сделать проще... Все-таки инитересует вариант работы именно с dbExpress.. |
| Автор: Mal Hack 14.11.2004, 00:38 | ||
| Уф, ну и многих же людей я запряг со своей проблемой... Итак, вопрос решился... Рассказываю. 1. В папочку с проектом кладем libmySQL.dll от 3 версии MySQL, от 4 будет писать unable to load.... 2. Предположим, что на форме есть 3 Edit'a для хоста, логина, пароля и базы. 3. Объявляем Connection: TSQLConnection. 4. При нажатии на кнопку соединения делаем..
Все. К БД коннектиться... Дальше уже можно работать... Есть еще два маленьких вопроса... 1. Соединение с базой лучше закрывать только при закрытии программы и открывать при открытии или проделывать эти операции перед выполнением каждого запроса? Если все-таки лучше держать соединение открытым, то как во время работы программы проверить доступность сервера? Грубо говоря как mysql_ping() в PHP. 2. Как (оптимальнее и без возникновения ошибок) закрыть соединение... Connection.Free; DataSet.Free; Этого будет достаточно? |
| Автор: Kesh 14.11.2004, 10:53 |
| 1. Лучше кон6ечно держать соединение открытым во время работы программы... Т.к. выполнение подключения перед каждым запросом - трата времени и ресурсов... Доступность сервера можно проверить по Connection.Connected... 2. Соединение закрывается по Connection.close... Делать Free перед закрытием программы не нужно, т.к. программа при закрытии его все равно выполнит... |
| Автор: Mal Hack 14.11.2004, 11:53 |
| Спасибо (+1) |
| Автор: Mal Hack 14.11.2004, 16:25 |
| Появляется вот такая ошибка на Open из предыдущего кода.. Раньше она появлялась на Закрытии приложения... http://mal-hack.net/error.gif Что за ошибка? |
| Автор: Mal Hack 14.11.2004, 18:10 | ||
| Я конечно дико извиняюсь, но... От вышеупомянутого "счастья" избавился путем подмены libmySQL.dll Но теперь вопрос в другом.. Как в:
Отловить именно момент, когда запрос не выполнился... Поскольку при такой констркции: On Exception do (или EDataBaseError) shwmessage показывается в любом случае, даже если запрос выполняется. |
| Автор: Kesh 14.11.2004, 19:18 |
| А там разве ExecSQL нету?.. Добавлено @ 19:19 Оно вместо Open - Close используется для разовых инструкций... |
| Автор: Kesh 14.11.2004, 19:28 | ||
Из Help по Delphi 8
|
| Автор: Mal Hack 14.11.2004, 19:34 |
| Kesh есть-то он есть, н с ним в любом случае showmessage показывается... |
| Автор: Mal Hack 15.11.2004, 01:26 | ||
| Путем проб и ошибок, осталось только одно... При выполнении хоть Open, хоть ExecSQL, вылетает AccessViolation in address ... in module... На сколько я понимаю это может быть из-за того, что я неправильно связал DataSet, DataSource и Grid.. Вот как делаю:
Если в SQLDataSet.CommandText записать Inert ..., то запрос выполняется... Подрузомеваю, что выполняется и SELECT. Но, на SQLDataSet.Open; выскакиват AccessViolation и дальше я так понимаю процедура не продолжается.. Посему вопросы: 1. Какие мои действия приводят к AccessViolation, или наоборот, чего не хватает. 2. Достаточно ли этих строк для отображения результата выполнения SELECT запроса в таблице.. |
| Автор: <Spawn> 15.11.2004, 05:32 | ||||
| В кмком модуле у тебя находятся компоненты доступа к БД? В каком участке кода пояляется AccessVioletion? Не в OnCreate главного модуля? А как это могло скомпилиться :
Тебе нужно тут продублировать одинарные ковычки:
|
| Автор: Mal Hack 15.11.2004, 12:25 | ||||
Все объекты создаются в главном модуле. При OnActivate. AccessViolation появляется именно на Open у SQLDataSet.
Там не ковычки, а ` (буква Ё, где ). Синтаксис MySQL такую запись спокойно пропускает. Да и Делфи не ругается... Если что, сюда скинул исходники (152 кила) http://mal-hack.net/delphi.rar |
| Автор: Mal Hack 18.11.2004, 13:24 | ||
| Решение нашел... 1. Без использования dbExpress, а с использованием специальных классов TMySQLClien & TMySQLResult. 2. Все эти файлы ( файл приаттачит Secandr (90 кил)) надо положить либо в папку с проектом, либо в <Delphi_dir>/lib. 3. Код: Сразу говорю, показал только основные моменты. Код, для определения ошибок и т.п. писать не стал.
|
| Автор: Secandr 18.11.2004, 13:39 |
| zlib |
| Автор: Secandr 18.11.2004, 13:40 |
| mysql |
| Автор: Mal Hack 31.1.2005, 18:52 | ||||
| Сорри, забыл отписаться о логической ошибочке. В цикле занесеня данны в GRID вместо:
Надо
Т.е. переход на новую запись должен осуществляться после того, как пройдет цикл по полям текущей записи. |
| Автор: Cetus 12.3.2005, 00:40 |
| Все должно работать без кавычек, по крайней мере с MySQL 4.0.2 Mal Hack, ты пробовал блокировать таблицы в своем проекте с DbExpress? (lock table tableOne write; unlock tables) |
| Автор: Mal Hack 12.3.2005, 00:46 | ||||
Какие ковычки?
Через dbExpress у меня запросы не выполнялись. Через класс TMySQLClient не пробовал. |
| Автор: Cetus 12.3.2005, 01:09 |
| про кавычки в другой теме где то вычитал... TMySQLClient из MySQL.rar который выложил Secandr? |
| Автор: Mal Hack 12.3.2005, 11:18 | ||
Ага. |
| Автор: Bars_rb 19.3.2007, 16:47 |
| Хм. Столкнулся с той же проблемой. Стоит MySQL 5 версии. Требует libmysql.dll. Понапихал ее всюду, но тут сказали, что надо от третей версии. Вопрос. Где ее взять? Не качать же ради нее весь серв. И пудет ли пахать файл от третей версии с 5 МуСКЛ-ом??? |
| Автор: Rodman 19.3.2007, 17:08 |
| Bars_rb, в инете свободно лежит... |
| Автор: Bars_rb 19.3.2007, 18:22 |
| Хм. Шото я найти не могу... Мож кто поделиться либо линком, либо файлом. |
| Автор: B2_Russia 18.5.2007, 21:13 |
| Народ я может темень полная, но что за zlib? Это для чего еще? Это куда? =) Вышел на эту тему ползая по форуму в поисках принципах работы с mySQL. Пишу программу которая будет работать в 2 вариантах - PHP и Delphi Как Mal тоже работал раньше с мусклом только из PHP... |
| Автор: B2_Russia 26.9.2007, 22:50 |
| Прошло много времени... Все уже успел успешно применить... Написал CMS-ку на PHP, сделал клиента с использованием zlib и MySQL.zip выложенных в этом треде. Но как только поставил CMS на хостинг, возникла проблема несовместимости версии клиента. Там требуется MySQL-клиента 4.1.18. И все встало! Прога работает только с локальной БД всвязи с чем является бесполезной :(((((((((((((((((((((((( Как решить проблему? |
| Автор: B2_Russia 27.9.2007, 02:07 |
| Вобщем что только не перепробовал, всеми способами одна ошибка! Понятно что не нравится версия клиента пишет что не поддерживается протокол, я уже и 5.0 ставил и 4.1.22 MySQL! NEED HELP!!! |
| Автор: Rodman 27.9.2007, 14:44 |
| B2_Russia, http://forum.vingrad.ru/index.php?show_type=forum&showtopic=161981\?! |
| Автор: B2_Russia 27.9.2007, 17:05 |
| Да читал, сейчас прочитал повнимательней, и вроде все прошло удачно с подключением и выбором БД. Щас попозже попробую выборку сделать. Всем кто встретился с этой проблемой, идите по выше приведенной ссылке. Если возникнут траблы отпишу! Rodman, thx! |
| Автор: malice_ 28.9.2007, 06:42 |
| какая у тебя версия delphi и mysql? |
| Автор: B2_Russia 29.9.2007, 19:25 |
| Delphi 7, mysql 4.1.22 До этого стоял mysql предыдущей версии . Сейчас все ок. |
| Автор: malice_ 1.10.2007, 09:31 |
| у меня ничего не получилось с 5.0.0. куда копировал либ и pas? брал его изhttp://forum.vingrad.ru/forum/topic-161981/anchor-092%3B.html? |
| Автор: Rodman 1.10.2007, 09:36 |
а через uses не получается подключить (кинуть канешь рядом с проектом)??? подробнее... по этому пояснению могу посоветовать поставить версию 4.ххх |
| Автор: B2_Russia 1.10.2007, 09:44 |
| У меня версия 4, все работает, но судя по прилично изменившимся размерам libmysql.dll можно предположить что, там много чего поменялось в 5 версии, не исключено, что опять какой-нибудь алгоритм аутентификации, как было при переходе на 4 версию. Кстати, этот файл mysql.pas не разработчиками предоставляется случайно? Тогда имеет смысл посмотреть при установке отметить галочку, чтобы были установлены тулзы для девелоперов, не помню как называется опция... Возможно найдешь в нем, что тебе нужно. |
| Автор: B2_Russia 1.10.2007, 10:07 | ||
| Rodman, покажи пожалуйста пример если есть, как сделать выборку используя фукции mysql.pas? Идея моя в том, чтобы сделать нечто похожее на набор классов TMySQLClient, TMySQLResult так как программа у меня уже написана под них, я сейчас слепил скелет этих классов, все что в примерах написано в закрепленном треде работает, но там нет ни одного примера выборки, как работать с результатом? Например:
В TMySQLResult мне нужно передать набор полученных данных, чтобы с ними работать используя функции типа First, Next, RecNo, GetFieldByName... Которые я сам должен реализовать. Проблема в получении данных, не могу понять как их забрать, как получить структуру MYSQL_RES? |
| Автор: fidres 1.10.2007, 15:21 |
| это вам на затравку. ;) http://forum.vingrad.ru/forum/topic-134547/unread-1/anchor-entry1272485/0.html по части результатов и их обработки - это всё, по идее, нужно в цикле вытаскивать... там же, скорей всего, возвращается некая структура данных! а значит несколько полей обрабатывается... значит их нужно раскладывать по полочкам... сам ещё этой хренью не занимался в плотную, другой рутиой занят... обработка и коррекция данных при вводе оных в поля ввода и формирования на основе этих данных корректных запросов. с работы уволился, но прогу не бросаю. потом продамкому-нить! ;) |
| Автор: fidres 1.10.2007, 16:00 |
| кстати. может завести отдельно топ по мускулю, а, Rodman? с крыжиком "важно", чтоб он никуда вниз не уползал... и будем туда пихать свои наработки. кто чем богат... примеры, приёмы... (а если завести отдельную группу - то можно будет только девелоперам писать, а те, кто спросить чего захочет - чтоб в другую тему писали - права на группу забацать) у меня пока только наработки по компонентам есть, в которые инфа вводится, чтоб потом в базу закидывать... но думаю тож немаловажно. могу поделица. в основном не использую специализированные компоненты типа DB... SQL... обрабатываю и вывожу в StringGrid'ы, ComboBox'ы... ну и обычные Edit'ы... есть ещё CheckListBox... |
| Автор: Deepthroat 21.10.2007, 17:57 |
| Как я уже писал в другой теме, выход из ситуации для MySQL 5 и dbExpress есть. Во-первых, надо использовать libmySQL.dll от той версии сервера, к которой намерены подключаться. Во-вторых, надо использовать библиотеки отсюда http://www.crlab.com/dbx вместо предлагаемых dbExpress по умолчанию. Эти dll'ки работают с MySQL 5 без проблем. |
| Автор: black_priest 26.10.2007, 10:09 |
| Но эти либы на http://www.crlab.com/dbx платные. А есть ли бесплатное решение? Или нужно подождать пока сам борланд не возьмется за поддержку mysql 5? |