データベースのPARADOXのグラフィック型項目について

解決


デルデル  2006-09-07 00:31:56  No: 23097

データベースを勉強中なのですが、ヘルプを読むとPARADOXのグラフィック型項目のファイル形式の中にJPGが無いのですが、JPGはデータベースに保存する事は出来ないのでしょうか?
BMPだと容量が大きくなってしまう為、JPGで保存したいのです。
どなたか知恵を下さい。


まさ  2006-09-07 19:18:02  No: 23098

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;


まさ  2006-09-07 20:14:34  No: 23099

>(項目の型はBLOB型です)
(項目の型はBLOB バイナリ型です)です


デルデル  2006-09-07 22:06:06  No: 23100

まささん、ありがとうございます。
項目の型はBLOB バイナリ型にしてTForm1.Button1Clickを作りましたが
「ビットマップイメージが不正です」というメッセージが出ました。
「IMAGE」の場所がBLOB バイナリ型でいいのですよね?


デルデル  2006-09-07 22:08:35  No: 23101

開発言語はDELPHI5.0です


まさ  2006-09-07 22:26:13  No: 23102

>「IMAGE」の場所がBLOB バイナリ型でいいのですよね?
はい、大丈夫ですよ。
Database Explorerで[IMAGE]項目の[Type]は[BINARY]になっています?
>「ビットマップイメージが不正です」というメッセージが出ました。
ビットマップですか、どこで関連付けだれているんでしょうかね?
バイナリとしてか扱っていないはずですが


デルデル  2006-09-07 23:28:29  No: 23103

まささん、ありがとうございます。
>Database Explorerで[IMAGE]項目の[Type]は[BINARY]になっています?
はい、なっています。
一応ですが、項目名はどんな文字でもいいのですよね?
また、jpgファイルをPARADOXに格納は TForm1.Button1Clickでよろしい
のですよね?
なにがいけないのか…考えてみます。


デルデル  2006-09-08 01:18:44  No: 23104

自己レスです。
ボーランドが出した[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;


Mr.XRAY  URL  2006-09-08 09:51:21  No: 23105

もしかしたら,質問の意味を取り違えているかもしれませんが,
以下は参考にならないでしょうか.

http://homepage2.nifty.com/Mr_XRAY/Delphi/plSamples/T_RichEditDB.htm


ん?  2006-09-08 20:34:51  No: 23106

>     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 であるか?


かず  2006-09-09 06:02:11  No: 23107

こんな書き方で使用しています。

  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;


デルデル  2006-09-11 18:22:19  No: 23108

Mr.XRAYさん、ありがとうございます。
JPGファイルを記録したいので…ちょっと違いますか?

ん?さん、ありがとうございます。
>Table1.Post; の前に BlobStream.Free; が必要とか?
「Blobが開けません」のメッセージは消えましたが、記録されていませんでした。
>Table1.FieldByName('GAZOU') is TBlobField = True であるか?
すいません、記述方法を教えて貰うと助かります。

かずさん、ありがとうございます。
ImageSizeとはどう記述すればいいのでしょうか?

半分ほど意味がわからず記述しているので、こういう時困ってしまいます
文法の意味を1つずつ理解しないと出来ないのでしょうか?


ん?  2006-09-11 18:24:42  No: 23109

> >Table1.FieldByName('GAZOU') is TBlobField = True であるか?
> すいません、記述方法を教えて貰うと助かります。

そのまま書いてありますが???

if Table1.FieldByName('GAZOU') is TBlobField then
  ShowMessage('OK')
else
  ShowMessage('エラー');


デルデル  2006-09-11 19:03:28  No: 23110

ん?さん、ありがとうございます。
TBlobField(Table1.FieldByName('GAZOU')),bmWrite);
if Table1.FieldByName('GAZOU') is TBlobField then
  ShowMessage('OK')
else
  ShowMessage('エラー');
実行すると「OK」になりました。
データベースエクスプローラーのデータタブの所で項目をクリックすれば
データが入っていれば表示されますよね?
されませんね。他がいけないのでしょうか?


ん?  2006-09-11 19:55:01  No: 23111

ところで、
> 記録されていませんでした。
というのは、何をもって「記録されていませんでした。」と判断したのですか?

Oracleしか知りませんが、SQLエクスプローラーでは、BMPは表示できましたが、
Jpegは表示できません。

当てはまるかどうかわかりませんが、SQLエクスプローラーでは、
Blob項目にデータが含まれていないときは、2文字目以降が小文字で「(Blob)」
含まれている場合は、全部大文字で「(BLOB)」のように表示されました。

取り出しのコードを書いてみて、取り出せるか確かめるしかないのでは?
正しく入っているかわかりませんが。。。


デルデル  2006-09-11 23:31:46  No: 23112

ん?さん、ありがとうございます。
>Blob項目にデータが含まれていないときは、2文字目以降が小文字で「(Blob)」含まれている場合は、全部大文字で「(BLOB)」のように表示されました。
「PARODOX7」「TEBLE」でもそうでした。

原因がわかりました。「ビットマップが不正です」の表示は
JPG.SaveToStream(BlobStream);
DBImage1.Picture.Assign(JPG);
とするとダメなようです。
Image1.Picture.Assign(JPG);
で記録されました。ただ画面に表示するようにしないと記録されないようなのですが、JPG.SaveToStream(BlobStream);だけでは無理なようです。
DBImageはJPGは使えない事になってしまいますが。。。
とりあえず、記録できたので解決にします。
ありがとうございました。


デルデル  2006-09-12 01:09:47  No: 23113

>JPG.SaveToStream(BlobStream);だけでは無理なようです。
失礼しました。
大丈夫でした。


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

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






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