過去に同様の書き込みがありましたが、リンクが切れており、参照出来ませんでした。
ご教授お願いいたします。
Oracleデータベース使用で、画像をBLOB型のカラムに格納したいのですが、うまくいきません。
DBとの連結は、Ttableを使用しています。
OpenDialogから画像(JPEG)をDBImageに取り込んでいます。DBImageには画像が表示されるのですが、テーブルに登録できません。(参照状態でDBImageに表示されない)
この問題がクリアできたら、画像の呼び出しを考えています。
よろしくお願いします。
どのようなコードで格納しているのでしょうか?
DBImageには表示されるとのことですが、トランザクションはどのように処理していますか?
この文面からだけではわかりません。
コードがわからないと返答が難しいですが。
DBImageに表示されているなら、少しコードを変更すれば登録できると思いますが・・・
どうしてもできない場合は、共有フォルダに画像を置いて
DBにフルパスを入れて表示させる方法もあります。
(どうしてもDBに登録しないといけない理由があるのなら別ですが)
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;
ちなみに、画像を入れようとするときに、
BLOB長が無効です、というエラーが出ます(>_<)
TMemoryStreamのmとImageがバラバラですね。
>tblobfield(fieldbyname('GRA')).LoadFromStream(m);
を
tblobfield(fieldbyname('GRA')).LoadFromFile(openpicturedialog1.FileName);
にすれば、どうでしょうか?
TMemoryStreamのmは作ったままで使われていません。
あと、AppendしてField操作をした後は、Postしましょう。
でないと、レコードに入りません。
HOtaさん
ありがとうございます( ´ ▽ ` )ノ
今パソコンから離れちゃってるので、週明けに試して、結果報告しますね✨
やっぱり、BLOB長が無効って出ちゃいます( ´Д`)…
データベースの問題なんですかね(>_<)
どう修正してダメだったのか出して貰わないと何も判断出来ません。
ちなみに、TMemoryStreamのmに画像をロードするように書き換えた場合、blobフィールドのLoadFromStreamに渡す前にmのpositionを0にリセットしないとダメだす。
ツイート | ![]() |