元ページへ(いぶき自由研究実験室)
リンク元ページに移動 PHPの勉強入口
MySQLを使ったPage 図書館機能構築
LazarusDBソフト SQLiteでプログラミング
当ページは上から始まり、下に順次学習を進めていきます。
データベースとテーブルの作成は以前に作成したならばそれを使いますが、一様その過程を説明します。
基本的な作業は先ず先に作成したDatabaseとTableを使用します
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
先頭へ 先頭ページへ