データベースを勉強中なのですが、ヘルプを読むとPARADOXのグラフィック型項目のファイル形式の中にJPGが無いのですが、JPGはデータベースに保存する事は出来ないのでしょうか?
BMPだと容量が大きくなってしまう為、JPGで保存したいのです。
どなたか知恵を下さい。
jpgファイルをPARADOXに格納して取出すだけなら、これで
(項目の型はBLOB型です)
procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Append;
TBlobField(Table1.FieldByName('IMAGE')).LoadFromFile('c:\sample.jpg');
Table1.Post;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Table1.First;
TBlobField(Table1.FieldByName('IMAGE')).SaveToFile('c:\sample2.jpg');
end;
>(項目の型はBLOB型です)
(項目の型はBLOB バイナリ型です)です
まささん、ありがとうございます。
項目の型はBLOB バイナリ型にしてTForm1.Button1Clickを作りましたが
「ビットマップイメージが不正です」というメッセージが出ました。
「IMAGE」の場所がBLOB バイナリ型でいいのですよね?
開発言語はDELPHI5.0です
>「IMAGE」の場所がBLOB バイナリ型でいいのですよね?
はい、大丈夫ですよ。
Database Explorerで[IMAGE]項目の[Type]は[BINARY]になっています?
>「ビットマップイメージが不正です」というメッセージが出ました。
ビットマップですか、どこで関連付けだれているんでしょうかね?
バイナリとしてか扱っていないはずですが
まささん、ありがとうございます。
>Database Explorerで[IMAGE]項目の[Type]は[BINARY]になっています?
はい、なっています。
一応ですが、項目名はどんな文字でもいいのですよね?
また、jpgファイルをPARADOXに格納は TForm1.Button1Clickでよろしい
のですよね?
なにがいけないのか…考えてみます。
自己レスです。
ボーランドが出した[DELPHI_QA_ja.pdf]というQ&A集の中に
「ビットマップをdBASEやParadoxのBlob項目にロードするには?」
という所の抜粋を使用したのですが、
「Blobが開けません」というメッセージが出てしまいました。
該当するバージョンがDELPHI2.0,DELPHI3.0,3.1,DELPHI4.0と
自分が使用している5.0が無かったのでエラーになっても仕方ないのですが
どうにか出来ないでしょうか。
色々検索して調べているのですが、それらしきものが見つかりません。
var
JPG: TJPEGImage;
BlobStream: TBlobStream;
begin
if OpenPictureDialog1.Execute then
begin
JPG := TJPEGImage.Create;
JPG.LoadFromFile(OpenPictureDialog1.FileName);
Table1.Edit;
Table1.Insert;
BlobStream := TBlobStream.Create(
TBlobField(Table1.FieldByName('GAZOU')),bmWrite);
try
JPG.SaveToStream(BlobStream);
Table1.Post;
finally
BlobStream.Free;
JPG.Free;
end;
end;
もしかしたら,質問の意味を取り違えているかもしれませんが,
以下は参考にならないでしょうか.
http://homepage2.nifty.com/Mr_XRAY/Delphi/plSamples/T_RichEditDB.htm
> try
> JPG.SaveToStream(BlobStream);
> Table1.Post;
> finally
> BlobStream.Free;
Table1.Post; の前に BlobStream.Free; が必要とか?
> BlobStream := TBlobStream.Create(
> TBlobField(Table1.FieldByName('GAZOU')),bmWrite);
Table1.FieldByName('GAZOU') is TBlobField = True であるか?
こんな書き方で使用しています。
if OpenPictureDialog1.Execute then begin
S := ExtractFileExt(OpenPictureDialog1.FileName);
Kakuchoushi := LowerCase(Copy(S, 2, Length(S) - 1));
if Kakuchoushi = 'bmp' then begin
BMap := TBitmap.Create;
BMap.LoadFromFile(OpenPictureDialog1.FileName);
ImageSize;
DataModule1.BihinDaichouTable.FieldByName('Image').Assign(BMap);
end else if (Kakuchoushi = 'jpg')or(Kakuchoushi = 'jpeg') then begin
JpgMap := TJpegImage.Create;
JpgMap.LoadFromFile(OpenPictureDialog1.FileName);
BMap := TBitmap.Create;
BMap.Assign(JpgMap);
ImageSize;
DataModule1.BihinDaichouTable.FieldByName('Image').Assign(BMap);
end else begin
Beep;
ShowMessage('イメージファイルの形式が合いません');
end;
end; //if
Bmap.Free;
JpgMap.Free;
Mr.XRAYさん、ありがとうございます。
JPGファイルを記録したいので…ちょっと違いますか?
ん?さん、ありがとうございます。
>Table1.Post; の前に BlobStream.Free; が必要とか?
「Blobが開けません」のメッセージは消えましたが、記録されていませんでした。
>Table1.FieldByName('GAZOU') is TBlobField = True であるか?
すいません、記述方法を教えて貰うと助かります。
かずさん、ありがとうございます。
ImageSizeとはどう記述すればいいのでしょうか?
半分ほど意味がわからず記述しているので、こういう時困ってしまいます
文法の意味を1つずつ理解しないと出来ないのでしょうか?
> >Table1.FieldByName('GAZOU') is TBlobField = True であるか?
> すいません、記述方法を教えて貰うと助かります。
そのまま書いてありますが???
if Table1.FieldByName('GAZOU') is TBlobField then
ShowMessage('OK')
else
ShowMessage('エラー');
ん?さん、ありがとうございます。
TBlobField(Table1.FieldByName('GAZOU')),bmWrite);
if Table1.FieldByName('GAZOU') is TBlobField then
ShowMessage('OK')
else
ShowMessage('エラー');
実行すると「OK」になりました。
データベースエクスプローラーのデータタブの所で項目をクリックすれば
データが入っていれば表示されますよね?
されませんね。他がいけないのでしょうか?
ところで、
> 記録されていませんでした。
というのは、何をもって「記録されていませんでした。」と判断したのですか?
Oracleしか知りませんが、SQLエクスプローラーでは、BMPは表示できましたが、
Jpegは表示できません。
当てはまるかどうかわかりませんが、SQLエクスプローラーでは、
Blob項目にデータが含まれていないときは、2文字目以降が小文字で「(Blob)」
含まれている場合は、全部大文字で「(BLOB)」のように表示されました。
取り出しのコードを書いてみて、取り出せるか確かめるしかないのでは?
正しく入っているかわかりませんが。。。
ん?さん、ありがとうございます。
>Blob項目にデータが含まれていないときは、2文字目以降が小文字で「(Blob)」含まれている場合は、全部大文字で「(BLOB)」のように表示されました。
「PARODOX7」「TEBLE」でもそうでした。
原因がわかりました。「ビットマップが不正です」の表示は
JPG.SaveToStream(BlobStream);
DBImage1.Picture.Assign(JPG);
とするとダメなようです。
Image1.Picture.Assign(JPG);
で記録されました。ただ画面に表示するようにしないと記録されないようなのですが、JPG.SaveToStream(BlobStream);だけでは無理なようです。
DBImageはJPGは使えない事になってしまいますが。。。
とりあえず、記録できたので解決にします。
ありがとうございました。
>JPG.SaveToStream(BlobStream);だけでは無理なようです。
失礼しました。
大丈夫でした。
ツイート | ![]() |