Lazarus+MySQL 5.1

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Lazarus+MySQL 5.1

Сообщение А.Н. » 07.06.2010 15:37:45

С "zeos dbo" невозможно работать из-за их нестабильности и множества ошибок.
Придётся использовать TSQLQuery.
В связи с чем, возникло несколько вопросов:
1.) Работает ли Lazarus с MySQL 5.1?
Нигде толком не написано. А на 5.0 мне крайне неохота откатывать. И так много проблем.

2.) Поддерживается ли возврат результатов из процедур?
Нет ли проблем, типа "sync error", как с "zeos", при использовании параметров CLIENT_MULTI_STATEMENTS и
CLIENT_MULTI_RESULTS? Или их не требуется устанавливать?
3.) Поддерживается ли сжатие?
Как в "zeos": compress=yes.
4.) Транзакции (TSQLTransaction) там как работают?
В "zeos" использовал два подключения. Здесь по-другому?
5.) Как использовать UpdateSQL и InsertSQL?
И возможно ли, например, запихнуть в (Update/Insert)SQL процедуру с параметрами и вызывать вручную?
Последний раз редактировалось А.Н. 09.06.2010 10:26:20, всего редактировалось 2 раз(а).
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Lazarus+MySQL 5.1

Сообщение А.Н. » 09.06.2010 09:49:16

Блин, неужели никто даже на один вопрос ответить не может? :(
Единственное, что я нашёл вразумительное, это вот такое:
http://www.lazarus.freepascal.org/index ... pic=9092.0
:(
Хотя, кажется, кто-то говорил, что Lazarus уже работает с 5.1.
Попробовал на 5.0 откатить. Мне даже сервер запустить не удалось. Ничего не пишет.
С тем же файлом настроек, что и был. Хотя, verbose включен... Вроде бы.
Пока я с ним разберусь, у меня, вообще, всё время уйдёт.

Добавлено спустя 3 минуты 55 секунд:
Мать-перемать, они издеваются:
In all cases put a copy of libmysql.dll in the same directory as your project files. The TMySQL50Connection can connect fine to a MySQL 5.1 DBMS, but the version of libmysql.dll in the project directory must be that for MySQL 5.0 to match the TMySQL50Connection (libmysql.dll for MySQL 5.0 is 1484kB).

:(

Добавлено спустя 21 минуту 6 секунд:
Работает.
Поскольку я искал весьма долго, приведу инструкцию, как заставить этот чёртов SQLDb в этом чёртовом
Lazarus работать с чёртовым MySQL 5.1. Может кому-то окажется полезным. :-/

1. Скачать отсюда:
http://downloads.mysql.com/archives.php ... 0&v=5.0.91
нужную сборку или исходники.
Например:
http://downloads.mysql.com/archives/mys ... -win32.zip
Далее, инструкция для сборки под windows, причём MySQL был установлен инсталлятором.
2. В каталоге с установленным MySQL переименовать файл bin/libmysql.dll в bin/libmysql_51.dll.
3. Скопировать libmysql.dll из каталога bin скачанного архива в каталог bin установленного сервера.
4. Перезапустить lazarus.
5. Копировать libmysql.dll из архива в каждый проект, который собирается работать с 5.1.

Добавлено спустя 5 минут 48 секунд:
Да, я думаю, понятно, что, во-первых, библиотека наверняка где-то есть и качать архив не обязательно.
Во-вторых, не факт, что после этого будут работать другие программы, которые проверяют версию библиотеки и требуют 5.1.
Но, если требуется, чтобы в design mode подключение осуществлялось, лучше, по-моему так сделать.
Иначе, наверняка, потом забудешь, что скопировал старую библиотеку в каталог lazarus.
Хотя... В винде, тоже есть симлинки... :-| Фиг знает.

Добавлено спустя 40 минут 42 секунды:
И ещё connect fine != work fine.
Сейчас у меня проблемы с кодировкой. Причём, при попытке изменения Connection.Params из "лазаруса" постоянно вылетают ошибки и он, сволочь, сдыхает.
Но, всё-таки, наверное, тут не при чём dll. Скорее всего, это проблема среды и компонентов.

Добавлено спустя 3 часа 45 минут 3 секунды:
Такая же глючная фигня.

Но, блин, я нашёл компоненты UniDAC/MyDAC. От DevArt. У меня их студия стоит. Очень удобная штука.
Компоненты порадовали. Просто класс.
Но, по-ходу, платные. :( Найти бы крэк...

Добавлено спустя 57 минут 36 секунд:
УРА! Я нашёл полный MyDAC 5.80. К чёрту глючный "SQLDb", нахрен бажный "zeos". Надеюсь, больше к ним не вернусь.
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Lazarus+MySQL 5.1

Сообщение GAMER » 09.06.2010 22:18:01

Работаю с Mysql 5.5.2. Lazarus обновляю по svn. Там при переходе на новые версии Mysql были некоторые изменения в библиотеке Libmysql. Никаких компонент для мускуля не использую, работаю напрямую через libmysql.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Lazarus+MySQL 5.1

Сообщение А.Н. » 09.06.2010 23:16:11

Тяжко, наверное, работать напрямую через API. К тому же, а как вы, например, DBGrid используете?
Или вы от него отказались? Я так думаю, для справочников - он самое то.
Плюс, напрямую много кода, наверное.
Здесь же, например, в один запрос возможно упрятать SQL для выборки, SQL для вставки, SQL для обновления, SQL для блокировки.
Причём, по select SQL, компонент сформирует остальные автоматически, если они не написаны (ну, это-то понятно, во всех, только не во всех правильно).
Всё - в одном. Причём, никто не мешает процедуру засунуть в любой из сиквелов. Всё корректно.
Возвращает результат из процедуры корректно.
Плюс, кэширование обновлений, проверка параметров, хранение читабельных названий полей ну и т.д..

К тому же, у них, вроде как, есть проверка на изменение записи другим пользователем (не уверен, пока я не разбирался).
Проверку на изменение я, например, в программе делал сам. Опрос каждые n секунд таблицы, в которую записи добавляются по триггеру.
Если, они сделали проверку как-то по-другому на MySQL, это будет круто. Буду знать.
Но чего-то пока-что я сомневаюсь, хотя и есть некий OnUpdateRecord.

Плюс компоненты для управления сервером, создания резервной копии, простой загрузки данных (видимо, через LOAD), создания дампа, получения метаданных.

Зачем всё это делать вручную?
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Lazarus+MySQL 5.1

Сообщение GAMER » 09.06.2010 23:28:15

Все зависит от поставленых задач.
Возможно я сильно не прав и дико ошибаюсь, но мне так удобней. Вся работа идет на уровне запрос - ответ. В отдельном модуле реализованы подпрограммы для связи мускуля с простыми компонентами (TStringGrid, TEdit, TComboBox etc).
Почему я так решил делать? Изначально, еще на C++Buildere мне не понравилась реализация работы с мускулем (много лишнего трафика, непонятно как проходит обновление даных, проблемы с запросами (когда для разных типов запросов нужны разные компоненты)). Потом мне показали пример работы напрямую через libmysql. Мне понравилось. Примеры (старые) можно увидеть на http://mirko.narod.ru в закладке "программы". Новый пример для мускуля 5.5.2 еще не закинул в связи с тем, что я его поломал :).
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Lazarus+MySQL 5.1

Сообщение А.Н. » 10.06.2010 10:44:20

Мне понравилось. Примеры (старые) можно увидеть на http://mirko.narod.ru в закладке "программы".

Я посмотрел. Вообще, мне тоже понравилось.
Просто. И нет лишнего. Создание компонента, всё-равно, память отнимает и время.
К тому же, самый большой плюс в том, что "сюрпризов" не возникнет такое количество, как при использовании компонент.
Но, с другой стороны, DB-контролами, конечно, не попользуешься. Конкретно, - DBGrid+DBNavigator.
В этом минус.
Не хранятся читабельные имена полей. Хотя тоже - вопрос спорный. Мне в своей программке, всё-равно, слой абстракции пришлось организовать. Поэтому, хранить их в запросе, вовсе не обязательно.
Тоже относится и к Insert/Update/Delete SQL.
Ещё - не очень наглядно.
Ну и, если захочется, всё-таки, запрос запихнуть в обёртку, чтобы легко обновлять результат, хранить его вместе с запросом, использовать какое-то определённое соединение, получатся классы.
А если ещё и мышкой захочется на форму всё это накидывать, чтобы TQuery.Create не писать и легко менять параметры, получатся компоненты.
В итоге, вы придёте к тому же самому.

Конечно, имеет смысл использовать работу напрямую. Но это же не исключает и использования компонент.
Всё зависит от задачи, так я думаю.

P.S.:
Кстати, нашёл у вас статью про скрещивание MySQL и FoxPro. Читаю. А FoxPro поддерживает транзакции?
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Lazarus+MySQL 5.1

Сообщение GAMER » 10.06.2010 11:15:36

Но, с другой стороны, DB-контролами, конечно, не попользуешься. Конкретно, - DBGrid+DBNavigator.
В этом минус.

DB-контролами легко заменяются на идентичные контролы + массив номеров строк.
Преимущество в том, что при навигации, не идут повторные запросы к серверу, минусы - в задержке, пока данные загрузятся, не видно обновленных данных в реальном режиме (но иногда это и плюс).

Не хранятся читабельные имена полей.

что имеется в виду?

Тоже относится и к Insert/Update/Delete SQL.

Что именно?

Ещё - не очень наглядно.
Это всего лишь пример, в проектах я немного по другому работаю. Зато, активно юзаю пример как мускуль-клиент.

В итоге, вы придёте к тому же самому.
Согласен, так как все компоненты в итоге тоже работают напрямую через libmysql.

P.S.:
Кстати, нашёл у вас статью про скрещивание MySQL и FoxPro. Читаю. А FoxPro поддерживает транзакции?

Было дело, но уже, наверное не актуально. Работает только под Виндовс95-98 и ДосФоксПро26.
Хотя в библиотеке хорошо видно как бегают пакеты к серверу и обратно. Так что, зная работу TCP/IP на Лазарусе, можно вообще не использовать libmysql :).
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Lazarus+MySQL 5.1

Сообщение А.Н. » 10.06.2010 11:39:45

DB-контролами легко заменяются на идентичные контролы + массив номеров строк.
Преимущество в том, что при навигации, не идут повторные запросы к серверу, минусы - в задержке, пока данные загрузятся, не видно обновленных данных в реальном режиме (но иногда это и плюс).

Я из DB контролов только Grid и Navigator использую в связке. Для меня плюс в том, что контрол всё делает сам.
И думать не надо. :)

что имеется в виду?

DisplayLabel.

Что именно?

Если организуется ещё один "слой" абстракции, проблема с хранением Select/Insert/Update/Delete, в принципе отпадает. В основном.

Согласен, так как все компоненты в итоге тоже работают напрямую через libmysql.

Не совсем. Некоторые предоставляют выбор:
http://www.devart.com/mydac/overview.html
http://www.dumpz.ru/showthread.php?t=50815

Хотя, честно говоря, не знаю как работает direct. У меня крутится мысль о DLL в ресурсах, например. :D

Было дело, но уже, наверное не актуально. Работает только под Виндовс95-98 и ДосФоксПро26.

Всё-равно, любопытно. Я FoxPro не представляю, т.к. совсем не застал. :)
Вспомнил, что слышал тут на днях про Clarion, вроде так. Старая сетевая (в смысле модели - не реляционная) СУБД, вроде бы. %-)
Поискал. Тоже любопытно. Оказывается ещё язык такой есть (наткнулся на статью в wiki, не знаю относится ли к этой СУБД).
И даже новая среда разработки:
http://clarion.ru/index.php?option=com_ ... &Itemid=25
Нашёл на CIT про эту СУБД. Любопытно. Хвалили. :D

Хотя в библиотеке хорошо видно как бегают пакеты к серверу и обратно. Так что, зная работу TCP/IP на Лазарусе, можно вообще не использовать libmysql :).

:) Некоторые компоненты, видимо, так и работают.
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Lazarus+MySQL 5.1

Сообщение GAMER » 10.06.2010 12:17:26

Считаю, что лучше работать через libmysql, а не на прямую через tcp/ip, потому что протокол может незначительно меняться, что отображается в библиотеке, а вот тогда нужно править сам код. А с библиотекой достаточно (хотя не всегда достаточно :) ) просто подменить libmysql.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Lazarus+MySQL 5.1

Сообщение А.Н. » 10.06.2010 12:48:42

Однако:
Такой еще интересный момент, под клиентом подразумевается libmysql.dll так вот здесь возникает интересный момент, MySql как бы бесплатная СУБД и вы можете с ней работать бесплатно до одного момента - если вы захотите распространять свою программу вместе с libmysql.dll - то вам прийдется покупать лицензию, т.е. в этом плане Direct Mode выгоднее, однаго по возможностям он уступает Client Mode, и помоему и по скорости, хотя честно никогда работу этих режимов не сравнивал.

Это, вроде, 2008-й. Не знаю как сейчас. Я их лицензию не читал.

Добавлено спустя 1 минуту 29 секунд:
В любом случае, не факт, что старый код будет работать с новой DLL (и новым сервером).
А так это остаётся на откуп разработчика компонентов.
Поменялось что-то - обновили версию. Ну, в идеале. :D

Добавлено спустя 14 минут 31 секунду:
Кстати:
"Macros help you to change SQL statements dynamically. They allow partial replacement of the query statement by user-defined text. Macros are identified by their names which are then referred from SQL statement to replace their occurrences for associated values."

MyDAC ещё и макросы поддерживает. Весьма интересно.
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Lazarus+MySQL 5.1

Сообщение GAMER » 10.06.2010 13:12:54

Можно распространять свой софт и без libmysql.dll. Пусть сами пользователи ее туда ставят :)
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Lazarus+MySQL 5.1

Сообщение А.Н. » 10.06.2010 13:18:02

Ну, так-то оно так... Хотя, всё-таки, выбор лишним не будет.
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Lazarus+MySQL 5.1

Сообщение Ism » 18.02.2011 18:42:03

Ну сейчас использую ZEOSDBO-7.0.0-alpha и претензий нет. Кроме того если в libmysql.dll не изменится формат функций, то можно и 5.5 версию использовать (теоретически)
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Lazarus+MySQL 5.1

Сообщение GAMER » 20.02.2011 19:40:55

Можно и 5.5 (уже пофиксили - был глюк, который я описывал на багтрекере). Более того, у меня нормально работает с libMySQL.dll от MariaDB. Хотя, я использую далеко не все функции, может где-то и глюкнуть.

Кстати, там (MariaDB) вроде GPL-ная лицензия на либу, вот только не знаю, как под винду.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Lazarus+MySQL 5.1

Сообщение tema » 25.03.2011 01:58:26

Внесу свою лепту.
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/
Этот: ftp://ftp.hu.freepascal.org/pub/lazarus ... -win64.exe
Установил его и обнаружил, что там есть таки файлы исходников, содержащие в названии mysql51. Попытки собрать их не увенчались успехом... :-( Уж не знаю почему :-( Более того я нашёл в исходниках и что на палитре дожен быть компонент 51 и даже картинка там к нему есть, но его нет и всё. Сильно долго я не ковырялся. Пока решил проблему так:
libmysql из архива 5.1 кидаем в system32.
В uses программы ручками дописываем mysql51conn.
После чего делаем форму нужную но без коннектора. А коннектор создаём программно. В дизайн тайме теперь не поредактируешь базу, конечно, но зато работает всё, включая и навигатор и dbgrid.
Код: Выделить всё
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.


Добавлено спустя 20 минут 5 секунд:
Забыл сказать
В дизайн тайме можно воспользоваться 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) пишем
Код: Выделить всё
PORT=3306
DATABASE=test
SERVER=localhost

И всё заводится и запросы выполняет. Только эта хрень ещё не поддерживает UsePrimaryKeyAsKey в компонентах запросов. Поэтому у SQLQuery1 делаем UsePrimaryKeyAsKey false. И всё работает в дизайн тайме :-)
А программно можно её потом Free, чтобы не мешала и всё тут :-)
Для верности вешаем это всё на создание формы.
Вот попробовал работает:
Код: Выделить всё
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 битной версии :-)
tema
постоялец
 
Сообщения: 376
Зарегистрирован: 24.03.2011 20:19:27

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 219

Рейтинг@Mail.ru