画像をDBに保存して呼び出すには


美帆  2012-03-15 02:29:30  No: 41780

過去に同様の書き込みがありましたが、リンクが切れており、参照出来ませんでした。
ご教授お願いいたします。

Oracleデータベース使用で、画像をBLOB型のカラムに格納したいのですが、うまくいきません。
DBとの連結は、Ttableを使用しています。
OpenDialogから画像(JPEG)をDBImageに取り込んでいます。DBImageには画像が表示されるのですが、テーブルに登録できません。(参照状態でDBImageに表示されない)

この問題がクリアできたら、画像の呼び出しを考えています。

よろしくお願いします。


HOta  2012-03-15 16:14:08  No: 41781

どのようなコードで格納しているのでしょうか?
DBImageには表示されるとのことですが、トランザクションはどのように処理していますか?
この文面からだけではわかりません。


初心者  2012-03-15 17:39:44  No: 41782

コードがわからないと返答が難しいですが。
DBImageに表示されているなら、少しコードを変更すれば登録できると思いますが・・・

どうしてもできない場合は、共有フォルダに画像を置いて
DBにフルパスを入れて表示させる方法もあります。
(どうしてもDBに登録しないといけない理由があるのなら別ですが)


美帆  2012-03-16 08:47:20  No: 41783

HOtaさん、初心者さん、お返事ありがとうございます。
ネットを参考に、こんな感じで何個かボタンを作って、どれかうまくいかないかなと
試してたんですが、どれもうまくいきませんでした(>_<)
トランザクションていう言葉がよくわかってません。
共有フォルダよりは、できればDBに登録したいです。
わがままで、すいません。

procedure TForm2.Button1Click(Sender: TObject);
begin
openpicturedialog1.Filter := 'BMPファイル(*.bmp)|*.bmp|全てのファイル(*.*)|*.*';
if openpicturedialog1.Execute then
begin
if not (table1.State in [dsEdit,dsinsert])then
table1.Edit;
dbimage1.Picture.LoadFromFile(openpicturedialog1.FileName);
end;
end;

procedure TForm2.Button2Click(Sender: TObject);
var
m: tmemorystream;
begin
try
m:= tmemorystream.Create;
openpicturedialog1.Filter := 'BMPファイル(*.bmp)|*.bmp|全てのファイル(*.*)|*.*';
if openpicturedialog1.Execute then
begin
if not (table1.State in [dsEdit,dsinsert])then
table1.Edit;
dbimage1.Picture.LoadFromFile(openpicturedialog1.FileName);
with table1 do
begin
append;
tblobfield(fieldbyname('GRA')).LoadFromStream(m);
end; end;
finally
end;


美帆  2012-03-16 23:43:40  No: 41784

ちなみに、画像を入れようとするときに、

BLOB長が無効です、というエラーが出ます(>_<)


HOta  2012-03-17 00:58:23  No: 41785

TMemoryStreamのmとImageがバラバラですね。

>tblobfield(fieldbyname('GRA')).LoadFromStream(m);

tblobfield(fieldbyname('GRA')).LoadFromFile(openpicturedialog1.FileName);
にすれば、どうでしょうか?


HOta  2012-03-17 02:38:40  No: 41786

TMemoryStreamのmは作ったままで使われていません。

あと、AppendしてField操作をした後は、Postしましょう。
でないと、レコードに入りません。


美帆  2012-03-19 01:01:20  No: 41787

HOtaさん

ありがとうございます( ´ ▽ ` )ノ

今パソコンから離れちゃってるので、週明けに試して、結果報告しますね&#10024;


美帆  2012-03-19 19:22:54  No: 41788

やっぱり、BLOB長が無効って出ちゃいます( ´Д`)…

データベースの問題なんですかね(>_<)


au  2012-03-19 19:39:08  No: 41789

どう修正してダメだったのか出して貰わないと何も判断出来ません。

ちなみに、TMemoryStreamのmに画像をロードするように書き換えた場合、blobフィールドのLoadFromStreamに渡す前にmのpositionを0にリセットしないとダメだす。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加