Lazarusで作るMySqlプログラム= 日常での活用

元ページへ(いぶき自由研究実験室)

リンク元ページに移動 PHPの勉強入口 

MySQLを使ったPage 図書館機能構築 

LazarusDBソフト SQLiteでプログラミング




図書館システムを作る上で、新刊を登録するときの4百万冊分の図書データをどう作成するかが
問題です。
 自分の技術では、図書データーを週毎手動でダウンロードし作成してます。
 無料のLazarusとここでInstallしたMySqlを利用してみようと思います。
 既にMySqlを使い動作することを確認済、多分上手く行くのではないか?と思います。


データベースとテーブルの作成は以前に作成したならばそれを使いますが、一様その過程を説明します。


基本的な作業は先ず先に作成したDatabaseTableを使用します

DatabaseName=honnoheya(図書館)

必要な Table = bbase,karkas,rysbase,pbbase

hongenbo(図書台帳),karkas(貸出管理簿),rysmabo(利用者名簿),sytpan(出版社名簿),yykhyo(予約帳簿)


Databasename honnoheya(図書館)
SQL create database honnoheya default charset=utf8mb4 collate=utf8mb4_unicode_ci; 実行済



各テーブルの必要項目の考察と決定

図書台帳

テーブル名 hongenbo(図書台帳)
誘引 台帳番号 書名 シリーズ名 巻号 NDC 著者記号 複本連番 ISBN 出版社 作者 本体単価 発行年月 予算 受入先 受入日 廃棄度番
カラム名 honbng honmei series kanmei ndc namaekigo fukuhonno isbn pablis sakusya tanka hatubaibi yosan ukesaki ukebi haikido
varchar(20) varchar(250) varchar(250) varchar(80) varchar(10) varchar(6) smallint varchar(18) varchar(10) varchar(160) int varchar(16) varchar(20) varchar(20) date int
SQL create table hongenbo (honbng varchar(20) not null primary key,honmei varchar(250),series varchar(250),kanmei varchar(80),ndc varchar(10),namaekigo varchar(6),fukuhonno smallint,isbn varchar(18),pablis varchar(10),sakusya varchar(80),tanka int,hatubaibi date,yosan varchar(20),ukesaki date,ukebi date,haikido int); 実行済

貸出管理簿

テーブル名 karkas(貸出管理簿)
誘引 通番 利用番 図書番 貸出日 貸出期限 返却日 予約日 取消 紛失日
カラム名 krbn rysbn tsybn kasibi kaesuhi kaesitahi yoyaku torikesu funsitubi
auto increment varchar(20) varchar(20) date date date date date date
SQL create table karkas (krbn int unsigned auto_increment not null primary key,rysbn varchar(20)not null,tsybn varchar(20) not null,kasibi date,kaesuhi date,kaesitahi date,yoyaku date,torikesu date,funsitubi date); 実行済

利用者名簿

テーブル名 rysmabo(利用者名簿)
誘引 利者番 名前 ふりかな 識別番 生年月日 性別 住所 連絡先 自宅TEL 連絡用TEL 登録日 解除日 職業
カラム名 rysno shimei furigana sikiban tanjyobi danjyo sumika renraku denwakiso denwafudan tourokubi kaijyobi sigoto
データ型 varchar(20) varchar(50) varchar(100) smallint date smallint varchar(200) varchar(200) varchar(20) varchar(20) date date varchar(20)
SQL create table rysmabo (rysno varchar(20) not null primary key,shimei varchar(50) not null,furigana varchar(100),sikiban smallint,tanjyobi date,danjyo smallint,sumika varchar(200),renraku varchar(200),denwakiso varchar(20),denwafudan varchar(20),tourokubi date,kaijyobi date,sigoto varchar(20)); 実行済
貸出表名










データベースhonnoheyaに3つのテーブルが作成されました以下が結果です。/全て表内のSQLを実行したことで実行済


2020/06/08 実行と編集



ディスクトップ上もmampのdefault of

user,paswordと同じく="root","root"



@.次は先ずazarusのインストールの説明(Firebirdのページを参照)をします。

A.次に今回の演習に必要なデータベースとその中にテーブルも作っておき、実際にmysqlで登録ができるか確認します。

B.また、Lazarusの設定をする前にもう一つWindowsのmysql用ドライバー「Mysql3.dll]をインストールしておきます。

Windowsの設定
エキスプローラーでC:\Windows\System(32)を開く*詳細は下の図で確認。
以下順番に沿ってWindowsの準備を完了してください。


次にMySQLサーバーサーバーを立ち上げる(Apache Serverは立ち上がっていなくてもいい)
立ち上げ方は図を参照してください


完了したらLazarusを立ち上げる。

新規プロジェクト( ファイル(f)⇒新規..クリック⇒[プロジェクト]⇒[アプリケーション]⇒[OK]クリックで表示される )に各パーツを図のように配置します。
Datasource1はパレットData Accces / DBGrid1はData Controls / MySQL57Connection1はSQLdb /
SQLQuery1,sqltransaction1はSQLdb / label1,ボタン[更新]はStandard / パレットに有りますので各パレットをクリックしダブルクリックすると
Form1に張り付くので同じように配置する。
@Form1の空いている所をWクリックし出てきた場所に表@*のように記述するか、コピペする
AButton1をクリックし[f11]キーを押しオブジェクトインスペクタを表示しプロパティのCaptionの項目に「更新」と記述
BDBGrid1をクリックし[f11]キ-をしプロパティのタブのイベントおWクリックし表B*の様に書き込む(コピペでいい)
C最後に更新ボタンをクリックし表示された項目に表C*を書き込む。
出来たら、[f9]を押し実行する
しばらくし下図のような状態になれば完成。表を矢印キーで下の行に送り最後の行の次に空白の項目が表示されるので
適当な値を入力する、このプログラムはID項目が数値とNameが名前を書き込む設定ですのでそのようにしてください。
また、追加して下の段に空白の行を追加してどんどん書き込んでください。
最後に、更新ボタンを押せば記録されます。(押さなければ更新されません) 
以上


@Form1の空いている所をWクリックし出てきた場所に記述
procedure TForm1.FormCreate(Sender: TObject);
 var
 testdb,testb : string; //testdbにデータベース名 testbにテーブル名を入力
begin
  testdb := 'mydb';   //←ここにあなたがテストの用いたいDBname
  testb := 'items';   //←ここにあなたがテストの用いたいTablename
  DBGrid1.DataSource := DataSource1;
  DBGrid1.Columns.Clear;
  DBGrid1.Columns.Add.FieldName := 'id';   //ここで用いたTableのアイテム名1
  DBGrid1.Columns.Add.FieldName := 'name'; //ここで用いたTableのアイテム名2
  DBGrid1.Columns.Items[0].Width:= 30;
  DBGrid1.Columns.Items[1].Width:= 100;
  //MySQL57Connection1.DatabaseName :=  [ mydb ];
  MySQL57Connection1.DatabaseName :=  testdb;//←作成して保いたDatabase名;
  MySQL57Connection1.CharSet := 'utf8';//多分utf-8で大丈夫だと思いますが自分で設定した覚えがあるならその値を入力
  MySQL57Connection1.HostName := 'Localhost'; //パソコン上で作業する場合は
  MySQL57Connection1.Password := 'root';  //何も設定していなければ初期値は root
  MySQL57Connection1.UserName := 'root';  //何も設定していなければ初期値は root
  MySQL57Connection1.Connected := true;   //ここで接続してみます。
  MySQL57Connection1.Transaction := sqltransaction1;
  DBGrid1.DataSource := DataSource1;
  DataSource1.dataset := SQLQuery1;
  SQLQuery1.SQL.Text := 'select * from ' + testb;
  sqltransaction1.DataBase := MySQL57Connection1;
  sqlquery1.Open;
end;  

BDBGrid1をクリックし[f11]キ-をしプロパティのタブのイベントをWクリックし記述
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin

 label1.caption :=  sqlquery1.FieldByName('id').AsString;
 label2.caption :=  sqlquery1.FieldByName('name').AsString;

end;  

C最後に更新ボタンをクリックし表示された項目に記述
procedure TForm1.FormCreate(Sender: TObject);
begin
  try
   sqlquery1.ApplyUpdates;
   sqltransaction1.Commit;
except
   sqltransaction1.Rollback;
   sqlquery1.SQL.Text := 'select * from items';
   sqlquery1.Open;
   raise
end;
 sqlquery1.SQL.Text := 'select * from items';
 sqlquery1.Open;
end;  

全コードです。
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
     Classes, SysUtils, db, mysql57conn, sqldb, Forms, Controls, Graphics,
Dialogs, DBGrids, StdCtrls;

type

{ TForm1 }

     TForm1 = class(TForm)
Button1: TButton;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Label4: TLabel;
Label1: TLabel;
Label2: TLabel;
MySQL57Connection1: TMySQL57Connection;
SQLQuery1: TSQLQuery;
SQLTransaction1: TSQLTransaction;
procedure Button1Click(Sender: TObject);
     procedure DataSource1DataChange(Sender: TObject; Field: TField);
procedure FormCreate(Sender: TObject);
     private

     public

     end;

var
     Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField); //B
begin
 label1.caption :=  sqlquery1.FieldByName('id').AsString;
 label2.caption :=  sqlquery1.FieldByName('name').AsString;

end;

procedure TForm1.FormCreate(Sender: TObject);  //@
 var
 testdb,testb : string; //testdbにデータベース名 testbにテーブル名を入力
begin
  testdb := 'mydb';   //←ここにあなたがテストの用いたいDBname
  testb := 'items';   //←ここにあなたがテストの用いたいTablename
  DBGrid1.DataSource := DataSource1;
  DBGrid1.Columns.Clear;
  DBGrid1.Columns.Add.FieldName := 'id';   //ここで用いたTableのアイテム名1
  DBGrid1.Columns.Add.FieldName := 'name'; //ここで用いたTableのアイテム名2
  DBGrid1.Columns.Items[0].Width:= 30;
  DBGrid1.Columns.Items[1].Width:= 100;
  //MySQL57Connection1.DatabaseName :=  [ mydb ];
  MySQL57Connection1.DatabaseName :=  testdb;//←作成して保いたDatabase名;
  MySQL57Connection1.CharSet := 'utf8';//多分utf-8で大丈夫だと思いますが自分で設定した覚えがあるならその値を入力
  MySQL57Connection1.HostName := 'Localhost'; //パソコン上で作業する場合は
  MySQL57Connection1.Password := 'root';  //何も設定していなければ初期値は root
  MySQL57Connection1.UserName := 'root';  //何も設定していなければ初期値は root
  MySQL57Connection1.Connected := true;   //ここで接続してみます。
  MySQL57Connection1.Transaction := sqltransaction1;
  DBGrid1.DataSource := DataSource1;
  DataSource1.dataset := SQLQuery1;
  SQLQuery1.SQL.Text := 'select * from ' + testb;
  sqltransaction1.DataBase := MySQL57Connection1;
  sqlquery1.Open;
end;

procedure TForm1.Button1Click(Sender: TObject);  //C
begin
 try
   sqlquery1.ApplyUpdates;
   sqltransaction1.Commit;
except
   sqltransaction1.Rollback;
   sqlquery1.SQL.Text := 'select * from items';
   sqlquery1.Open;
   raise
end;
 sqlquery1.SQL.Text := 'select * from items';
 sqlquery1.Open;
end;

end.
コードは以上です。

[f9]を押すと下の図の様なプログラムが実行されます。(今一番下の行に追加しようとしている所です)




なお別のデータベース(Firebird)でもLazarusを使ったプログラミングを解説しています。
多分参考になると思いますので、そちらもご参考頂きますと役立つと思います。
(IBConnection1をMySQL57Connection1に置き換えることとDatabaseNameをMySQLのDatabaseNameに置き換えればたぶん動作すると思う)

以上です
また、次はSQliteについてもその内に解説していきます。



2020/06/09


先頭へ 先頭ページへ