На главную Напишите нам! Напишите нам!
25-08-2012

Подключение к MySQL из приложения Lazarus.

Попробуем ответить на вопрос, как подключить Lazarus к базе данных MySQL, и как при этом выполнять простые запросы, используя основные компоненты приложения Lazarus. Использования компонент отображе- ния данных не будет, покажем только принцип взаимодействия с базами данных. Причём хочу обратить вни- мание, что приложение Lazarus и Delphi программирование по существу похожи и программный код их, мало чем отличается.

Подобно Delphi, Lazarus является средой RAD (от англ. rapid application development — быстрая разработка приложений), позволяющей быстро создавать пользовательский интерфейс. В отличие от Delphi, Lazarus является крос- сплатформенной средой. Поддерживаются такие ОС, как GNU/Linux, Microsoft Windows, Mac OS X, FreeBSD, WinCE. Возможно преобразование Delphi проектов в проекты Lazarus.

Пример подключения приложения Lazarus к базе данных MySQL:

Вам нужно создать новый проект в Lazarus:

Project -> New Project -> Application

Автоматически будет сгенерирована новая форма...

Попробуйте растянуть её (Рис. 1), и переименуйте ее заголовок её в 'TryMySQL'.

Рисунок 1: Вот что должно получится

Расположите на форме (как на рис.1) три компонента TEdit с вкладки Standard и над каждым из них поместите компонент TLabel. Задайте им заголовки 'Host' (и имена HostLLabel, HostEdit), 'UserName' (UserLabel, UserEdit) и 'Password' (PasswdLabel и PasswdEdit). Как вариант вы можете использовать компонент TLabelledEdit с закладки Additional.

Найдите свойство PasswordChar у компонента PasswdEdit, и измените его на « * », в результате чего когда вы будете вводите пароль, то вместо него будут отображаться именно эти символы («************»). Обязательно убедитесь, что свойство Text у этого компонента не содержит текста.

Нужно расположить еще один компонент Tedit и TLabel в правом верхнем углу формы (рис. 1). Измените заголовок на 'Enter SQL Command' и переименуйте компонент в CommandEdit.

Поместите на форму три кнопки, две слева под компонентами TEdit и одну справа под компонентом для команд.

Измените свойства Label (Name) левых кнопок на 'Connect to Database' (ConnectButton) и 'Exit' (ExitButton) и правой - 'Send Query' (QueryButton).

Расположите на форме большой TMemo с заголовком 'Results' (ResultMemo) слева внизу так, чтобы все оставшееся место было заполнено. Найдите свойство ScrollBars и установите значение ssAutoBoth, чтобы компонент мог прокручивать текст и вертикально и горизонтально. Свойство WordWrap установите в True.

Поместите на форму статусную строку (TStatusBar с закладки Common Controls) внизу формы и впишите в свойство SimpleText строку 'TryMySQL':

Теперь потребуется написать несколько обработчиков.

Слева на форме, у нас три компонента TEdit для ввода имени хоста, пользователя и пароля. Как только в них будут введены необходимые данные, нужно нажать на кнопку Connect. Обработчик OnClick для этой кнопки частично базируется на модуле для FPC, который мы привели выше.

Результаты запросов к базе данных не могут быть сразу выведены с помощью операторов Pascal write или writeln, сначала их необходимо преобразовать в строки и вывести в компонент TMemo.

Хотя операторы Pascal write и writeln и имеют возможность преобразовать типы «на лету», в этом случае, использование компонента TMemo для вывода текста требует прямого преобразования типов в строковую форму, соответственно переменные типа Pchar должны быть преобразованы в строки путем использования StrPas, а числа будем конвертироваться функцией IntToStr.

Надо добавить строки в TMemo используя:

procedure ShowString (S : string);
(* display a string in a Memo box *)
begin
      trymysqlForm1.ResultsMemo.Lines.Add (S)
end;

Таким образом, обработчик ConnectButton будет иметь вид:

procedure TtrymysqlForm1.ConnectButtonClick(Sender: TObject);
(* Connect to MySQL using user data from Text entry boxes on
Main Form *) var strg: string; begin dummy1 := trymysqlForm1.HostEdit.text+#0; host := @dummy1[1]; dummy2 := trymysqlForm1.UserEdit.text+#0; user := @dummy2[1] ; dummy3 := trymysqlForm1.PasswdEdit.text+#0; passwd := @dummy3[1] ; alloc := mysql_init(PMYSQL(@qmysql)); sock := mysql_real_connect(alloc, host, user, passwd,
database, 0, nil, 0); if sock=Nil then begin strg :='Couldnt connect to MySQL.'; showstring (strg); Strg :='Error was: '+ StrPas(mysql_error(@qmysql));
showstring (strg); end else begin trymysqlForm1.statusBar1.simpletext := 'Connected to
MySQL'; strg := 'Now choosing database : ' + database; showstring
(strg); {$ifdef Unix} strg :='Mysql_port : '+ IntToStr(mysql_port);
showstring (strg); strg :='Mysql_unix_port : ' + StrPas(mysql_unix_port);
showstring (strg); {$endif} Strg :='Host info : ' +
StrPas(mysql_get_host_info(sock)); showstring (strg); Strg :='Server info : ' + StrPas(mysql_stat(sock));
showstring (strg); Strg :='Client info :
' + Strpas(mysql_get_client_info); showstring (strg); trymysqlForm1.statusbar1.simpletext :=
'Selecting Database ' + DataBase +'...'; if mysql_select_db(sock,DataBase) < 0 then begin strg :='Couldnt select database '+ Database;
ShowString (strg); Strg := mysql_error(sock); ShowString (strg); end end; end;

Причём поле для ввода справа позволяет нам вводить команды SQL без завершающей точки-с-запятой « ; », как только вы введёте синтаксис запроса - жмите кнопку SendQuery - запрос выполнится и результат будет отображен в компоненте ResultsMemo.

Обработчик SendQuery опять же базируется на версии FPC, за исключением исполь- зования преобразования типов для последующего отображения строк.

Разница между программой на FPC и этой программой заключается в том, что в случае возникновения ошибки программа на Free Pascal завершит свою работу, но сессия MySQL при этом останется открытой. Во второй программе контроль вернется в главную форму и можно повторить попытку ввода. В конечном итоге приложение, во втором случае, нормально завершает свою работу (закрывая при этом сессию MySQL) при нажатии кнопки Exit.

Повторяю ещё раз, приложение Lazarus и Delphi программирование по сущест- ву похожи и программный код их, мало чем отличается. Вам не трудно будет вникнуть и разобраться в незначительных отличиях написания программ.

Ниже приведен код обработчика кнопки SendQuery:

procedure TtrymysqlForm1.QueryButtonClick(Sender: TObject);
var
 dumquery, strg: string;
begin
    dumquery := TrymysqlForm1.CommandEdit.text;
    dumquery := dumquery+#0;
    query := @dumquery[1];
    trymysqlForm1.statusbar1.simpletext := 'Executing query :
'+ dumQuery +'...'; strg := 'Executing query : ' + dumQuery; showstring (strg); if (mysql_query(sock,Query) < 0) then begin Strg :='Query failed '+ StrPas(mysql_error(sock));
showstring (strg); end else begin recbuf := mysql_store_result(sock); if RecBuf=Nil then begin Strg :='Query returned nil result.'; showstring (strg); end else begin strg :='Number of records returned :
' + IntToStr(mysql_num_rows (recbuf)); Showstring (strg); Strg :='Number of fields per record :
' + IntToStr(mysql_num_fields(recbuf)); showstring (strg); rowbuf := mysql_fetch_row(recbuf); while (rowbuf <>nil) do begin Strg :='(Id: '+ rowbuf[0]+', Name: ' + rowbuf[1]+
', Email : ' + rowbuf[2] +')'; showstring (strg); rowbuf := mysql_fetch_row(recbuf); end; end; end; end;

В следующей статье мы рассмотрим: - «Пример создания таблицы бд в lazarus».

Рекомендуем в повседневной деятельности:

Скачать - инструкцию по созданию загрузочной флешки = 50,02мин. 20.04.2014г.
Скачать - правила получение аттестата Webmoney  (30.61 MB) = 7. 5 мин. 11.01.2013г.
Скачать ссылки на каталоги - для регистрации сайта (69.5 MB) = 9. 7 мин. 01.10.2013г.
Скачать - wifi router настройка модема (41.72 MB) = 7 мин. 46 сек. 26.01.2013г.
Скачать - TDSSKiller диагностика, лечение систем (24,71 MB) = 6,02 мин. 01.12.2012г.
Скачать - пример готового проэкта в Lazarus (91,59 MB) = 1,31мин. 08.04.2013г.
Скачать - правила установки MySQL в Lazarus (20,17 MB) = 4,55 мин. 25.02.2013г.
Класс!
 
Яндекс.Метрика
Копирование возможно при указании прямой индексируемой гиперссылки