ORACLE の テーブル(Info)に (Photo)BLOB型を定義し
そこへ JPEGファイルを 格納して
DELPHI で 登録・参照をしたいのですが
テーブル(Info)を TTable、TQueryにて
開くことすらできません。
調べ方が悪いのか、そういう資料等もなく。。。
ムリなんでしょうか?
ちなみに ORACLE9 ⇔ BDE ⇔
DELPHI3 or DELPHI7 ※どちらでも
よろしくお願いします。
TBlobField辺りを調べてみては如何でしょうか?
昔以下のようなロジックをテスト的に作成した事がありますので
少しでも参考になればと思い記述しておきます。
DBにJPGを登録する場合
procedure TForm1.Button1Click(Sender: TObject);
var
ST : TMemoryStream;
begin
try
ST := TMemoryStream.Create;
ST.LoadFromFile('C:\test.jpg');
with Table1 do
begin
Append;
TBlobField(FieldByName('ファイルデータ')).LoadFromStream(ST);
Post;
end;
finally
ST.Free;
end;
end;
DBからBLOBデータを取得する場合は、「LoadFromStream」部分を
「SaveToStream」に変更し、その前後のロジックを適宜変更すれば
良いかと思います。
的外れだったらゴメンなさい!m(_'_)m
hidetoさん ありがとうございます。
私も いろいろ調べた際 そのような コードで
いけると思っていたのですが、、
Table1 がOPENできないんです。。。
基本的なところでコケてるんでしょうか?
...これって...
SQL Explorerでそのテーブルを開くとSQL Explorer自体が
コケますか?
え
おっしゃるとおりです
おかしいでしょうか?
テーブルを開く際に、SELECT * FROM ...ではなく、そのBLOBフィールドを
指定して「SELECT BLOB_FIELD FROM ...」の形にした場合も
落ちますか?フィールド数って多かったりします?例えば255個以上の
フィールドが有るとか...
私の場合は、MySQLで同じ現象になった事があり、苦労しました。(^^;)
ちょっと表現が悪いかもしれませんが..
TTableやTQueryではフィールドの数(サイズ!?)に上限があるようです。
そこで私の場合はSQLをわけて各々処理させました。
strSQL1 := "SELECT TESTA FROM A";
strSQL2 := "SELECT TESTB FROM B";
strSQL3 := "SELECT TESTC FROM C";
Query1.SQL.Text := strSQL1;
Query2.SQL.Text := strSQL2;
Query3.SQL.Text := strSQL3;
で各々Openして...
while not Query1.Eof do
begin
必要な処理を書いて...
.
.
.
Query1.Next;
Query2.Next;
Query3.Next;
end;
こんな感じです。
これが今回の件にも当てはまるかどうかわかりません。
hidetoさん すいません つきあってもらって。
hidetoさんの解答でピンと来るものがあり
OPENできるようになりました!!
結局 BDEのNativeのOracleドライバ 設定変更でした。
ウチでは、SQLORA32.DLLを使ってるんです。
SQLORA8.DLLは OK
あとは 作りこみだけ。と思いきや
JPG := TJPEGImage.Create;
PhotoQuery.Close;
PhotoQuery.SQL.Clear;
PhotoQuery.SQL.Add('select NO,PHOTO FROM INFO');
PhotoQuery.Open;
PhotoQuery.First;
{ BLOB ストリームを作成 }
Strm := TBlobStream.Create(
TBlobField(
PhotoQuery.FieldByName('PHOTO') as TBlobField
), bmRead
); ※※※※※※※※※※※※※※※
try
JPG.LoadFromStream(Strm);
Image1.Picture.Assign(JPG);
finally
Strm.Free;
JPG.Free;
end;
エラー:
「テーブル内の 非BLOB列で操作を実行する必要があります」
が出てしまいます。。。。
クルクルマスターさんが記述されている「BLOB ストリームを作成」部分を
Paradoxで実際に試したのですが、問題ないですね。
ParadoxでOKでOracleでNGとなると、設定周りでしょうか...
以下の辺りが参考になりませんでしょうか?
http://www.borland.co.jp/qanda/delphi/d0003477.html
http://forum.nifty.com/fdelphi/faq/00253.htm
hidetoさん ありがとうございます。
んーだめですねぇ
いろいろ BLOB関連の値を変えてみてるんですけど
エラーの意味も???状態なので
むつかしいです。
ORACLE BLOB型 特殊とは 聞いていたんですが、、、
ツイート | ![]() |