Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

BCB и MySQL API ! Никаких ODBC, только .dll и прямое соединение с сервером MySQL

1.9K
24 августа 2006 года
SABROG
242 / / 26.01.2006
Покопавшись на программерских форумах и форуме MySQL мне удалось таки собрать достаточно информации, чтобы наконец подключиться к MySQL серверу без всяких ADO, ODBC. Ни для кого не секрет, что для того, чтобы ваша программа заработала на другой машине - нужно настраивать DSN в ODBC, а для MySQL сервера на эту машину еще нужно поставить специальный компонент. Можно конечно включить инструкцию для пользователя как настраивать DSN, а также включить тот самый MySQL ODBC драйвер и наверно это будет неплохо в случае, если вы решили заработать денег на тех.поддержке. Далее идет инструкция "Step By Step", все манипуляции проделывались на BCB6.0. Для начала нужно скачать сам MySQL. Мой архив назывался так: mysql-noinstall-6.1.7-beta-win32 (у вас наверно будет поновее). Убедитесь, что вы запустили и настроили MySQL сервер, а также имеете права администратора на нем :)
Начнем.

1. Копируем файл из папки lib\opt:
libmysql.dll
в отдельную папку - for_bcb\lib
2. Запускаем командную строку (cmd), переходим в папку где лежит implib:
c:\>n:
n:\>cd N:\Program Files\Borland\CBuilder6\Bin
n:\Program Files\Borland\CBuilder6\Bin>implib -c I:\for_bcb\lib\opt\libmysql.lib I:\for_bcb\lib\opt\libmysql.dll

3. Копируем папку include в папку for_bcb, находим строку:
#define my_socket SOCKET
и меняем ее на:
#define my_socket UINT_PTR
4. Создаем новый проект.
5. Кидаем на форму Button1 и ListView1.
6. Ставим свойство ListView1
ViewStyle = vsReport.
7. Жмем Shift+F11 (Project->Add To Project).
Выбираем Files of Type->lib, переходим в директорию for_bcb\lib
и выбираем файл libmysql.lib.
8. Жмем Ctrl+Shift+F11 (Project->Options). Выбираем вкладку "Directories/Conditional".
Жмем на кнопки с тремя точками в Include Path и Library Path.
В Include Path выбираем директорию for_bcb\include. В Library Path for_bcb\lib.
9. Сохраняем проект.
10. Добавляем две строчки в исходнике (F12):
Код:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#define __LCC__ // эту и
#include <mysql.h> // эту
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

Копируем for_bcb\lib\libmysql.dll в папку куда будет сохраняться скомпилированный
exe файл (обычно в той же директории что и файлы проекта, если речь не о BDS2006)

11. Пример приложения. Не забудьте изменить в коде логин и пароль на свои данные (администраторские). Возможно потребуется также поменять адрес сервера localhost на ваш IP. Программа выполняется SQL запрос к базе данных MySQL и выводит все данные из таблицы `db`
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "MySQLpmain.h"
#define __LCC__
#include <mysql.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
MYSQL         *Con;
MYSQL_RES     *Res;
MYSQL_ROW      Row;
MYSQL_FIELD   *Fields;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
Con=mysql_init(Con);
Con=mysql_real_connect(Con,"localhost","root","123456","mysql",0,NULL,0);
        if(!Con) ShowMessage("Can not connect.");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        if (Con){
                ListView1->Items->BeginUpdate();
                ListView1->Clear();
   AnsiString query="SELECT * FROM `mysql`.`db`;"; // magic string ;)
   mysql_real_query(Con,query.c_str(),query.Length());
    int f=mysql_errno(Con);
    if(f==0){
      Res=mysql_store_result(Con);
      int CountOfColumns=mysql_num_fields(Res);
      Fields=mysql_fetch_fields(Res);
              for(int i=0;i<CountOfColumns;i++){
              ListView1->Columns->Add();
              ListView1->Columns->Items->Caption = Fields.name;
              }
      while ((Row = mysql_fetch_row(Res))){
        TListItem  *ListItem = ListView1->Items->Add();
                for(int j=0;j<CountOfColumns;j++){
                                                if (j == 0){
                                        ListItem->Caption = Row[j];
                                                }else{
                                        ListItem->SubItems->Add(Row[j]);
                                                }
                }
      }
                       ListView1->Items->EndUpdate();
    }else{
        ShowMessage("Error #: " + IntToStr(f) + char(13) + "Message: " + mysql_error(Con));
        }
                }
}
//---------------------------------------------------------------------------
44K
31 октября 2008 года
mdaemon
1 / / 31.10.2008
namespace _mysql{
typedef SOCKET,UINT_PTR;
#include "mysql.h"
}

using namespace _mysql;

Вставляем вместо отмеченных строк.
Всё остальное как в первом посте, только менять в mysql.h ничего не нужно ;) ...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог