<< 2024/03 >> | 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 |
|
Delphi で FireBird を使ってみた
09/06/23 14:55 / IT関連
SQL と言うと MySQL や PostgreSQL などが有名ですが、InterBase から分かれた FireBird という SQL サーバーがあります。
今まで開発していたソフトウェアではデータベースの必要が感じられなかった事やオリジナルのDB サーバー(これまた独自仕様でして。要はデータをオンメモリ or ディスクスペースに置いておき、追加、削除、更新とクエリが出来ればいいのですよデータベースなんて。トランザクションは余り考慮していませんが。)があった為スルーしていたのですが、なんとなく使ってみようという感じでして。 FireBird は InterBase と互換性がありますので Delphi で InterBase コンポーネントを使います。 まず、FireBird をインストールします。 ISQL を使って、取りあえず DataBase の作成を手動でやります。 SQL]CREATE DATABASE 'd:\sample.fdb' user 'SYSDBA' password 'masterkey'; SYSDBA と masterkey はデフォルトで作成される ID/Password です。パスワードの変更はぐぐって下さい。 エラーが出なければ、Dドライブのルートに sample.fdb というファイルが生成されます。これがデータベースのファイルになります。 データベースファイルが出来たら、接続します。 同じく ISQL より SQL]CONNECT 'd:\sample.fdb' user 'SYSDBA' password 'masterkey'; コミットするかどうか聞いてきますので取りあえず y でコミットします。 ログインが出来ますと、データベースの名前とログインしたユーザー名が表示されます。 今度はデータベースの中にテーブルを作ります。 SQL]CREATE TABLE address ( name VARCHAR(64) NOT NULL PRIMARY KEY, tel VARCAR(11) NOT NULL age INTEGER NOT NULL ); address というテーブルに、name と tel と age というフィールドを作成して、それぞれの型を指定します。 ISQL はコマンドの終端を ; (セミコロン) で認識しますので長い場合は適当に改行を入れつつ最後に ; で〆る感じですね。 テーブルが作成出来たら、確認してみます。 SQL]SHOW TABLES; で、データベースの中にあるテーブルの一覧が表示されます。今は address というテーブルが1つだけあるはずです。 SQL]SHOW TABLE address; と入れれば、先程作成したテーブルの内容が表示されます。 ここまでで箱が出来ましたので、実際にデータ(レコード)を入れてみます。 SQL]INSERT INTO address (NAME,TEL,AGE) VALUES('A.K.I Software','01234567890',99); VARCHAR や INTEGER はサイズが決まっていますので、その範囲に収まるようにします。例えば tel フィールドは 11文字ですので、12文字入れようとするとエラーになります。 テーブルの中にレコードが入りましたので、所謂クエリをしてみます。 SQL]SELECT * FROM address; フィールドに従ってレコードが表示されます。 * は全てを指定していますので、今度は SQL]SELECT NAME,TEL FROM address; SQL]SELECT NAME,AGE FROM address; などをやってみると、それに従ってクエリを掛けることができます。 最後に SQL]commit; でコミットしておきます。 さて手動でクエリを行っていますが、これを Delphi でやってみます。 Form上に IBDataBase と IBTransaction と IBDataSet を貼り付けて、各プロパティを設定します。 (IBDataSet の代わりにに IBSQL や IBQuery を使っても良いのですが、後々楽なので) まず、IBDataBase1 の DatabaseName に最初に作ったデータベースファイルを指定します。 DefaultTransaction には、フォーム上に貼り付けた IBTransaction1 を指定します。 params には user_name=SYSDBA password=masterkey と設定しておきますと、パラメータに従ってログインしてくれます。(LoginPrompt を false にしておきます。True にすればログイン用のダイアログが表示されます) Connected を True に変更すれば、データベースファイルに接続してログインをします。(もちろん FireBird が起動している必要があります) IBTransaction1 の DefaultDataBase には 上の IBDataBase1 を指定して他は特に指定しません。 設定したら、Active を True にします。これでトランザクションが有効になります。 IBDataSet1 の DataBase と Transaction にそれぞれ、IBDataBase1 と IBTransaction1 を指定します。 (IBTransaction1 が IBDataBase と IBDataSet1 の橋渡しをしてくれる訳です) 最後に IBDataSet1 の SelectSQL に手動で行っていた SELECT * FROM address; を入れておきます。 フォームに Memo1 と Button1 を配置して、Button1 の中に以下のコードを記述します。 procedure TForm1.Button1Click(Sender: TObject); var i,cnt:integer; begin IBDataSet1.Open; IBDataSet1.Last; cnt:=IBDataSet1.RecordCount; IBDataSet1.First; for i:=0 to cnt-1 do begin Memo1.lines.Add(IBDataSet1.Fields[0].AsString); Memo1.lines.Add(IBDataSet1.Fields[1].AsString); Memo1.lines.Add(IBDataSet1.Fields[2].AsInteger); IBDataSet1.Next; end; IBDataSet1.Close; end; Button1 をクリックすると、レコードの内容が Memo1 に出力されます。 最初に、IBDataSet1.Last と IBDataSet1.First を行っているのはレコード数を確認する為です。(プロパティが RecordCount になっていますが、RecordPositionみたいな感じですね) Fields[x] を使っていますが、フィールド名が分かっている場合は、FieldByName() を使った方がわかりやすいです。 上記のコードは全レコードを表示する物ですが、本来は SELECT文でWHERE等を使って条件を定義して、必要なデータのみを抽出する必要があります(でないと、SQL の意味がない) 後はアプリケーションから INSERT や DROP などを投げたりクエリしたりするようにすれば立派なDBソフトの出来上がりです。簡単ですね(^-^ [更新日付:2009/06/23 14:55:23]
トラックバックを見る(0) Log Link [https://akisoftware.com/cgi-bin/blom.exe?akisoft+sl+29d9f37b5f4021ff10e44487e9be3f9ab5301c52] TB Link [https://akisoftware.com/cgi-bin/blom.exe?akisoft+tb+29d9f37b5f4021ff10e44487e9be3f9ab5301c52] 記事へのコメント 名前 : じゅじゅ (2011/03/21 21:07:27) Delphi XE + Firebird 2.5 (x64) で試したのですが、IBDatabase1/connected/False を True にしようとすると 「unavailable database」というエラーが発生します。 オブジェクトインスペクタの下部に「接続設定は InterBase Express14,13 」と出ています。 サービスは実行中であることも確認しています。 Firebird Guardian - DefaultInstance Firebird Server - DefaultInstance Pro版 には Firebird はサポートされておらず、フリーであるFirebird をサポートすれば週末プログラマの厳しい財布の中であってもユーザーも増えることだろうにと思うんですよね。残念です。 名前 : ななし (2009/12/12 06:37:11) Memo1.lines.Add(IBDataSet1.Fields[2].AsInteger)に IntTostrが入っていないと言うことですかね>>はてなさん 名前 : H.Matsuda (2009/06/24 10:27:53) Delphi2007でやっていますので2009ではわかりませんが、2009では動かないのでしょうか? 確認されましたか?の意図がわからないのですが。 |
@AKISoftOfficialをフォロー
掲示板 サポートBBS PMailServer BBS アクセスの多い記事
最新記事(カテゴリ別)
フリー版からの製品版移行時の MTA 並列数について
02/17 23:52 メールサーバーの開発を始めて20年 02/07 21:46 PMailServer2 Version 2.52a をリリースしました。 12/26 14:02 PMailServer2 Version 2.52 をリリースしました。 10/01 10:48 PMailServer2 Version 2.51b をリリースしました。 09/19 01:43 PMailServer2 Version 2.51b(仮) Memo 09/12 00:33 PMailServer2 Version 2.51a をリリース、及び脆弱性についてのお知らせ 09/05 01:15 PMailServer2 Version 2.51a Memo 08/21 00:48 アドレスV125(K5)のスターターリレーの交換 08/04 10:10 SanDisk ポータブルSSDを買ってみました。 08/04 09:41 最新コメント
Delphi で FireBird を使ってみた
じゅじゅ [03/21 21:07]
ななし [12/12 06:37] H.Matsuda [06/24 10:27] はてな [06/24 09:43] UUアクセス数
今日は 307回
昨日は 159回 トータル 301024回 3ヶ月記事別ランキング
プロフィール
Z80から68系、8086系を経由して
Pascalに移行。現在は Delphiをメインに C/C#も囓ってみたり。 「無い物は作れ」の精神で年がら年中なにかを作っています。 すぐ自前で作りたがるので無駄に工数が上がったりして自爆してみたりもします。 好きな物は麺類とお煎餅 Blom内検索
BLOM Version 1.39 ©2007-15 A.K.I Software all rights reserved. |