スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

DelphiでSQLite3

SQLite
SQLite はMySQLやPostgreSQLと同じデータベース管理システムで、
サーバとしてではなくアプケーションに組み込まれて利用される軽量のデータベースです。
また、パブリックドメインなツールなので、自由に利用できます。

これまでSQL Server や OracleといったRDBMSを利用する機会が多く、
インストールの手間などを考慮すると、データベースの利用部分に関して、
若干敷居が高いように感じていたのですが、
このSQLiteは非常に便利です。


DelphiでのSQLite3データベースへのデータの読み書きには
Simple Delphi Wrapper
を使わせていただきました。

SQLiteはアプリケーションフォルダに「sqlite3.dll」をコピーし、
プロジェクトにSQLite3.pasSQLiteTable3.pasを追加するだけで利用できました。

今回のプログラムでは文字データ以外にも画像データも取り扱いますので、
画像の保存を試してみました。
以下は私のプログラムを元にして、掲載用に一部変更したものです。

■画像データの保存と読出し

//保存処理
function fncSaveFile(): Boolean;
var
sFileName: String;
sFileName_AfterCopy: String;
ts: TMemoryStream;
sqTB: TSQLIteTable;

begin

//画像ファイルの選択
OpenDialog1.Filter := '*.*';
OpenDialog1.Title := 'ファイルを開く';
if OpenDialog1.Execute(Self.Handle) then begin
sFileName := OpenDialog1.FileName;

// フォーム上のTImageコンポーネントに表示
Image3.Picture.LoadFromFile(sFileName);

// 表示名の取得
SHGetFileInfo(PChar(sFileName), 0, FileInfo, SizeOf(FileInfo), SHGFI_DISPLAYNAME);

// ファイル種別の取得
SHGetFileInfo(PChar(sFileName), 0, FileInfo, SizeOf(FileInfo), SHGFI_TYPENAME);

// ファイルに関連づいたアイコンの取得
SHGetFileInfo(PChar(sFileName), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON);

// TMemoryStreamに画像をロードする。
ts := TMemoryStream.Create;
ts.LoadFromFile(sFileName);

// キーは任意に設定しています。
sCD := '0000001';
iSEQ := 1;

//テーブル作成
sSQL := 'CREATE TABLE ' + C_TBNAME_OKYAKU_FILE;
sSQL := sSQL + ' (';
sSQL := sSQL + ' [ID] INTEGER PRIMARY KEY,';
sSQL := sSQL + ' [KYAKUCD] VARCHAR ( 7), ';
sSQL := sSQL + ' [SEQ] INTEGER, ';
sSQL := sSQL + ' [FILENAME] VARCHAR (256), ';
sSQL := sSQL + ' [FILETYPE] INTEGER, ';
sSQL := sSQL + ' [BIN] BLOB ';
sSQL := sSQL + ' );';
p_sqDB.ExecSQL(sSQL);

//保存(BLOB以外のデータを先に保存)
sSQL := 'Insert Into ' + C_TBNAME_OKYAKU_FILE;
sSQL := sSQL + '( [KYAKUCD], [SEQ], [FILENAME], [FILETYPE] ) ';
sSQL := sSQL + ' VALUES ';
sSQL := sSQL + '( ';
sSQL := sSQL + '''' + sCD + ''', ';
sSQL := sSQL + ' ' + IntToStr(iSEQ) + ' , ';
sSQL := sSQL + '''' + sFileName + ''', ';
sSQL := sSQL + ' ' + IntToStr(FileInfo.dwAttributes) + ' ';
sSQL := sSQL + ')';
p_sqDB.ExecSQL(sSQL);

// BLOBのみ後で更新
//UPDATE MYTABLE SET MYFIELD = ? WHERE MYKEY = 1'
sSQL := 'Update ' + C_TBNAME_OKYAKU_FILE;
sSQL := sSQL + ' Set [BIN] = ? ';
sSQL := sSQL + ' Where [KYAKUCD] = ''' + sCD + ''' ';
sSQL := sSQL + ' And [SEQ] = ' + IntToStr(iSEQ) + ' ';
p_sqDB.UpdateBlob(sSQL, ts);

ts.Free;

end;

end;


function fncReadFile(): Boolean;
var
sSQL: String;
sCD: String;
iSEQ: Integer;
sqTB: TSQLIteTable;
ts: TMemoryStream;
bmp: TBitmap;

begin
sCD := '0000001';
iSEQ := 1;

sSQL := 'Select * From '+ C_TBNAME_OKYAKU_FILE;
sSQL := sSQL + ' Where [KYAKUCD] = ''' + sCD + ''' ';
sSQL := sSQL + ' And [SEQ] = ' + IntToStr(iSEQ) + ' ';
sqTB := p_sqDB.GetTable(sSQL);
if sqTB.Count > 0 then begin
ts := TMemoryStream.Create;
ts.LoadFromStream(sqTB.FieldAsBlob(sqTB.FieldIndex['BIN']));

//MessageDLg(sqTB.FieldAsString(sqTB.FieldIndex['KYAKUCD']),mtInformation,[mbOK],0);

//TBitmapにBLOBデータをロードする。
bmp := TBitmap.create;
bmp.LoadFromStream(ts);

//フォーム上のTImageコンポネントに表示する。
Image3.Picture.Assign(bmp);
Image3.Picture.Bitmap.SaveToStream(ts);

bmp.free;
ts.free;
end;

end;

ネットの色々な情報の中で
Simple Delphi WrapperでSQLite3サンプル
を参考させていただきました。
ありがとうございました。


ビットマップ形式でテストした結果はOKでしたので、
次は他の形式にトライしてみます。
また、画像だけでなく、ワードやエクセル、PDFなどの保存も試してみたいと思います。


製作途中のものです。
サンプル

開発言語:Delphi 2007

スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

スポンサードリンク
最新記事
カテゴリ
カレンダー
09 | 2017/10 | 11
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 - - - -
最新トラックバック
ブロとも申請フォーム

この人とブロともになる

月別アーカイブ
激安特価情報
Amazonタイムセール
楽天市場タイムセール
Yahoo出店記念セール
NTT-X Store 激安特価!
激安家電のGENO PLUS
コストコ・イケアの通販
つけたまま眠れるファンデ
家電品を安値で買うならこちら!
ケーズデンキ
ベルメゾンアウトレット
激安ブランドコスメ 週末セール
モバコレ SALE
au Brand Garden
アウトレットモール BRANDELI
ブックオフオンラインのオトナ買い
ビッグカメラ◆週末特別セール
ソフマップ 中古・アウトレット
【宿代全額ポイントバック】夏休み早期予約キャンペーン
ネットプライス 送料294円
イオンモールオンライン
EDIONネットショップ
最新コメント
天気予報

-天気予報コム- -FC2-
カウンター
検索フォーム
リンクに表示されるテキスト
ランキング参加中
クリックしていただけると、 こまつもとは大変嬉しいです。



人気ブログランキングへ

ランキングに参加しています。 クリックのご協力をお願い致します。 いつもありがとうございます。 にほんブログ村 通販ブログへ
ブログランキング・にほんブログ村へ
にほんブログ村 IT技術ブログ ソフトウェアへ
にほんブログ村 ゲームブログへ
にほんブログ村 IT技術ブログへ



人気ブログをblogramで分析

趣味・個人

ランキング

リンクリックブログランキング

私を登録 by BlogPeople



RSSリンクの表示
リンク
QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。