Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Базы данных > Borland C++ & MySQL


Автор: GHopper 11.11.2004, 15:10
Здравствуйте!
Возникла проблема при написании приложения для работы с базой данных MySQL в C++ Builder 6. Файлы помощи к C++ Builder не дали ответа на мои вопросы, хотя и разъяснили как работать с TTable, TDataSource и с компонентами из закладки "Data Controls". Проблема следующая - в объекте TTable есть свойство "DatabaseName", которое не содержит БД MySQL. Там, как я понял, содержатся псевдонимы БД. Лезу в SQL Explorer и пытаюсь создать псевдоним для MySQL. Жму "New" и опять получаю список, не содержащий MySQL. Оставляю эту затею.
Пытаюсь через dbExpress. На него в хелпе информации еще меньше! Свойство объекта TSQLconnect "ConnectionName" содержит "MySQLConnect". Все вроде-бы должно работать, но вот опять проблема - "Error: Unable to Load libmysql.dll" (Сервер моей БД в этот момента загружен). Нахожу этот libmysql.dll и пихаю во все папки, в какие только можно (папка проекта, системная). Ничего не помогает!
Не стал пробовать с ADO и др. методами, а решил поискать рабочий пример. В MySQL есть программка Jethro Wright, датированная 1998 г. Попробовал самостоятельно создать консольное приложение по подобию и нифига не вышло - даже при простом подключении mysql.h возникает две ошибки. Короче кругом засада!
Люди добрые, помогите? Укажите путь истинный. А вообще хотелось бы почитать литературу, подробно раскрывающую создание приложений для работы с БД. Заранее огромное СПАСИБО.

Автор: Hroft 13.11.2004, 13:01
Лично я предпочитаю все делать через АДО, все просто, удобно и легко переносимо на другие СУБД. Нужен ОДБС-драйвер MySQL, и все. Ставишь, формируешь коннекшн стринг с помощью все того же компонента TADOConnection, и в TADOQuery выполняешь все свои запросы. Можно небольшую оболочку на все это навесить, и только чере абстрактный интерфейс работать, тогда вообще проблем не будет в будущем.
А с этими TTable на самом деле не стоит и разбираться, на мой взгляд, хотя ничего сложного там тоже нет, кроме отсутствия подержки MySQL фирмой Борланд/Инпрайз/Фиг_знает_будет_ли_вообще_такая_фирма_в_дальнейшем.

Автор: azesmcar 16.11.2004, 09:15
В папке MySQL есть папка lib...Там библиотека для работы с MySQL напрямую, через сокеты...быстро, надежно, xотя и немного сложновато но зато никакиx драйверов ставить не нужно...xотя не уверен что тебе это подойдет, зависит конкретно от задачи...

Автор: cabich 19.11.2004, 08:10
А в пятом билдере как быть он на mysql.h ругается!!!

Добавлено @ 08:10
в mysql_com.h ошибка Type name expendet на строке my_socket fd; !!! Че за Ерунда????

Автор: azesmcar 19.11.2004, 08:23
Type name expected в данном случае означает что он не видит класса my_socket...
Посмотри, может Include directories не в порядке...или какого нибудь файла не xватает...у меня 6-ой билдер, все нормально компилируется..и под визуал С++ тоже...без разницы...Код тот же самый...

Автор: cabich 23.11.2004, 22:33
У меня таже ошибка была я короче сделал так

Подключите к проекту libMySql.lib, положите заголовочные файлы из поставки MySQL в директорию заголовочных файлов вашего компилятора, либо в каталог с программой, либо вообще куда душе угодно (лишь бы сами их не потеряли), libmysql.dll в каталог с программой, и пользуетесь функциями API MySQL, которые подробнейшим образом описаны в поставляемой вместе с сервером документацией. libmysql.lib и libmysql.dll берутся после установки дистрибутива MySQL в каталоге lib\opt.
libmysql.lib ОБЯЗАТЕЛЬНО должен работать с libmysql.dll ТОЙ ЖЕ поставки/версии. По этой причине НАСТОЯТЕЛЬНО НЕ рекомендуется хранить libmysql.dll в системном каталоге WINDOWS! Храните свою libmysql.dll в каталоге со своей программой.
Для C++ Builder получить libmysql.lib нужно импортом из libmysql.dll:
> implib libmysql.lib libmysql.dll

Из заголовочных файлов требуются:
mysql.h
mysql_com.h
mysql_version.h
В последних версиях ещё и my_alloc.h
Всё это добро берётся после установки дистрибутива MySQL в каталоге include.

Из всех в программе подключается только mysql.h. Перед ним обязательно должно быть подключен windows.h
#include <windows.h>
#include <mysql.h>

Особенности Билдеровского VCL: В программах, использующих VCL, компилятор ругается на my_socket, объявленную в mysql.h как #define my_socket SOCKET. Заменяем на #define my_socket UINT_PTR и всё работает. (SOCKET в winsock.h объявлен как typedef UINT_PTR SOCKET).


но всеравно он не находит функцию mysql_connect()


поэтому искаю как юзать ADO!!
Обьясните как Вывести на форму Зачения В полях таблицы!!!!!!!!!!!!!!!

Автор: azesmcar 24.11.2004, 13:46
не знаю как насчет импорта из ДЛЛ, я сделал иначе...
libmysql.lib под билдером работать не станет...
Зайди в каталог билдера, {BCBPATH}/bin так кажется...
Там должно быть что то вроде coff2ome.exe или ome2coff.exe
Запускаешь даешь на вxод свой либ и устанавливаешь на выxoд в какой нибудь другой файл...и уже его присабачиваешь к своему проекту...
Кстати этот самый coff2omf или ome как его там почему то ненормально работает...
Какая то проблема с размерами файла, точнее говоря не переводит файлы размером больше чем какое то X число в билдеровский формат...Но именно с libmysql.lib все проxодит нормально...

Автор: Гость_Cabich 26.11.2004, 08:54
Как с помощью ADO таблицу в Grid или мемо Запихнуть?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)