Писал на форуме лазаруса, решил перенести сюда, а то уже несколько раз понадобилось мне это.
win 7 64, mysql server 5.5
Не решился я откатываться так далеко всё-таки аж на 5.0 версию и начал плясать с бубном над 5.1+Lazarus
У меня установлен 5.5 сервер. С сайта мускула скачал предыдущую версию:
http://www.mysql.com/downloads/mysql/5.1.html
уж очень не 5.0 там помечена уже как безнадёжно устаревшая.
Скачал лазарус отсюда: http://www.hu.freepascal.org/lazarus/
Этот: Lazarus-0.9.31-29986-fpc-2.4.3-20110323-win64.exe
Установил его и обнаружил, что там есть таки файлы исходников, содержащие в названии mysql51. Попытки собрать их не увенчались успехом… Уж не знаю почему Более того я нашёл в исходниках и что на палитре дожен быть компонент 51 и даже картинка там к нему есть, но его нет и всё. Сильно долго я не ковырялся. Пока решил проблему так:
libmysql из архива 5.1 кидаем в system32.
В uses программы ручками дописываем mysql51conn.
После чего делаем форму нужную но без коннектора. А коннектор создаём программно. В дизайн тайме теперь не поредактируешь базу, конечно, но зато работает всё, включая и навигатор и dbgrid.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, mysql51conn, odbcconn, sqldb, db, FileUtil, Forms, Controls, Graphics, Dialogs, DBGrids, StdCtrls, DbCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Datasource1: TDatasource; DBGrid1: TDBGrid; DBNavigator1: TDBNavigator; MySQL51Connection1: TMySQL51Connection; SQLQuery1: TSQLQuery; SQLTransaction1: TSQLTransaction; procedure Button1Click(Sender: TObject); procedure SQLQuery1AfterPost(DataSet: TDataSet); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin MySQL51Connection1:=TMySQL51Connection.Create(Form1); MySQL51Connection1.UserName:= 'root'; MySQL51Connection1.Password:= 'root'; MySQL51Connection1.DatabaseName:='test'; MySQL51Connection1.HostName:='localhost'; MySQL51Connection1.port:=3306; MySQL51Connection1.CharSet:='utf8'; MySQL51Connection1.Open; SQLQuery1.DataBase:=MySQL51Connection1; SQLTransaction1.DataBase:=MySQL51Connection1; SQLQuery1.Open; end; procedure TForm1.SQLQuery1AfterPost(DataSet: TDataSet); begin SQLQuery1.ApplyUpdates; end; end. |
В дизайн тайме можно воспользоваться ODBC.
Я именно так и делаю. Проблемы которые приносит с собой этот ODBC не страшны, т.к. в процессе программирования нам не так принципиально отсутствие русских букв и ещё кучка проблем
Инструкция: устанавливаем ODBC с сайта mysql
запускаем администратор источников данных ODBC под виндой
Добавляем туда драйвер. У меня так:
Имя | Драйвер
MySQL ODBC 5.1 Driver | MySQL ODBC 5.1 Driver
Кидаем на форму компонент ODBC
И хитро заполняем его:
1) указываем юзера и пароль
2) указываем в Driver и DatabaseName одинаковые значения: 'MySQL ODBC 5.1 Driver'
3) указываем хост
4) в параметрах (Params) пишем
1 2 3 |
PORT=3306 DATABASE=test SERVER=localhost |
И всё заводится и запросы выполняет. Только эта хрень ещё не поддерживает UsePrimaryKeyAsKey в компонентах запросов. Поэтому у SQLQuery1 делаем UsePrimaryKeyAsKey false. И всё работает в дизайн тайме
А программно можно её потом Free, чтобы не мешала и всё тут
Для верности вешаем это всё на создание формы.
Вот попробовал работает:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, mysql51conn, odbcconn, sqldb, db, FileUtil, Forms, Controls, Graphics, Dialogs, DBGrids, StdCtrls, DbCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Datasource1: TDatasource; DBGrid1: TDBGrid; DBNavigator1: TDBNavigator; MySQL51Connection1: TMySQL51Connection; ODBCConnection1: TODBCConnection; SQLQuery1: TSQLQuery; SQLTransaction1: TSQLTransaction; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure SQLQuery1AfterPost(DataSet: TDataSet); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.FormCreate(Sender: TObject); begin ODBCConnection1.Close; MySQL51Connection1:=TMySQL51Connection.Create(Form1); MySQL51Connection1.UserName:= 'root'; MySQL51Connection1.Password:= 'root'; MySQL51Connection1.DatabaseName:='test'; MySQL51Connection1.HostName:='localhost'; MySQL51Connection1.port:=3306; MySQL51Connection1.CharSet:='utf8'; MySQL51Connection1.Open; SQLQuery1.DataBase:=MySQL51Connection1; SQLTransaction1.DataBase:=MySQL51Connection1; SQLQuery1.UsePrimaryKeyAsKey:=true; SQLQuery1.Open; ODBCConnection1.Free; end; procedure TForm1.Button1Click(Sender: TObject); begin end; procedure TForm1.SQLQuery1AfterPost(DataSet: TDataSet); begin SQLQuery1.ApplyUpdates; end; end. |
Так же позволю себе заявление, что скорее всего взятая отсюда: http://downloads.mysql.com/archives.php?p=mysql-5.0 дллка для 5.0 и скопированная в system32 скорее всего запустит и компонент 50 не смотря на версию сервера Пробовать не буду, т.к. там нет 64 битной версии