個人で使うのに何か良いデータベースはないか、しばらく検討していたのだが
Firebirdが良さそうだ。
それにFirebirdは、Borland 社から ソースコードが公開されたInterBaseを元に
オープンソースのデータベースソフトとして開発されてきているのでDelphiを使う事の
多い私には非常に相性が良さそうだ。
しかしDelphiもいろいろなパッケージがある。
なかでの個人購入としては馬鹿のように高いEnterprise版!!
どうにかならないんだろうか?高くて絶対個人では買えませんね。
それに残念なことに、Enterprise版ならFirebird用に対応しているらしい。
しかし、私の持っているのはDelphi 2010 Professional・・・悲しい・・・
でも、今のところProfessional版でもInterBaseコンポーネントを使う事によって
FireBirdが操作出来るようです。
InterBaseを元に作成されたFirebirdならではといったところです。
さて、しかしFirebirdはなんだかDelphi での使い方をネットで探っても
さっぱりヒットしませんね。
やはり、Delphiは過去の言語なのでしょうか?日本語のサイト少なすぎです。
さて実際使ってみて、メモコンポーネントの内容をそのまま保存しようと思うと
タイプがvarcharではうまくいかず、結局Blobフィールドが良い事が判ったの
ですが、Blobフィールドの読み書きの方法が調べてもなかなか判りませんでした。
実際の使い方の簡単な覚え書きです。
まずはテーブルを作成

CREATE TABLE NANDEMO
(
KIROKUNO integer NOT NULL,
NITIJI timestamp,
OMOITUKI blob sub_type 1,
PRIMARY KEY (KIROKUNO)
);

OMOITUKI フィールドが Blobフィールドです。
サブタイプはTEXTのみを扱うのでsub_type 1です。
コンポーネントはTIBDatabase、TIBTransaction、TIBQueryとTDataSouceを使うとします。
あとMemoコンポーネント、Editコンポーネント、Labelコンポーネントを配置します。
登録は

var
BS:TMemoryStream;
begin
//登録
try
//新規登録
BS := TMemoryStream.Create;
IBQuery1.SQL.Clear;
IBQuery1.Params.Clear;
IBQuery1.SQL.Add(‘INSERT INTO ‘);
IBQuery1.SQL.Add(‘NANDEMO (NITIJI, OMOITUKI)’);IBQuery1.SQL.Add(‘values (:COL1,:COL2)’);
//本日の日付時間     IBQuery1.ParamByName(‘COL1’).AsDateTime := Now;
//メモの文字列をStreamに保存
Memo1.Lines.SaveToStream(BS);
//Streamからパラメータに書き出す
IBQuery1.ParamByName(‘COL2’).LoadFromStream(BS,ftBlob);
IBQuery1.ExecSQL;
IBTransaction1.Commit;
except
IBTransaction1.RollBack;
raise;
end;
end;

の様にする。
最初は判らずに
IBQuery1.ParamByName(‘COL2’).AsString := Memo1.Text;
の様にやってみたがうまくいかなかった。
読み出しは

var
BS: TStream;
BlobField: TField;
begin
if DataSource1.DataSet.RecordCount > 0 then
begin
Label1.Caption := DataSource1.DataSet.FieldByName(‘KIROKUNO’).AsString;
Edit1.Text := DataSource1.DataSet.FieldByName(‘NITIJI’).AsString;
BlobField := DataSource1.DataSet.FieldByName(‘OMOITUKI’);
BS := DataSource1.DataSet.CreateBlobStream(BlobField,bmRead);
Memo1.Lines.LoadFromStream(BS);
end;
end;

以上。
簡単だがBlobフィールドの読み書きはうまくいっている。
しかし、日本の「Delphi」に詳しい人たち。もう少しネット上に足跡を残して下さい。
Delphiの事で検索すると、英語と中国語ばかりです。
サンデープログラマーにはずいぶん敷居が高くなって来てますね、私もその一人で
非常に困っている毎日です。

関連記事

C# UDP通信のためのコンポーネントの作成

C# 既定のブラウザでURLを開けずエラーの対処

QRCodeMaker(QRコード作成、読取りソフト)

LinuxでUSB接続のストレージをsambaで共有する

ホスト名(ドメイン)からIPアドレスを取得する方法 覚書

sqlite-net-pclを使ってみた

コメント

コメントを返信する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA