//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#define __LCC__ // эту и
#include <mysql.h> // эту
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
BCB и MySQL API ! Никаких ODBC, только .dll и прямое соединение с сервером 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):
Код:
Копируем 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));
}
}
}
//---------------------------------------------------------------------------
#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));
}
}
}
//---------------------------------------------------------------------------
typedef SOCKET,UINT_PTR;
#include "mysql.h"
}
using namespace _mysql;
Вставляем вместо отмеченных строк.
Всё остальное как в первом посте, только менять в mysql.h ничего не нужно ;) ...