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

解決


デルデル  2006-09-06 15:31:56  No: 23097  IP: 192.*.*.*

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

編集 削除
まさ  2006-09-07 10:18:02  No: 23098  IP: 192.*.*.*

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 11:14:34  No: 23099  IP: 192.*.*.*

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

編集 削除
デルデル  2006-09-07 13:06:06  No: 23100  IP: 192.*.*.*

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

編集 削除
デルデル  2006-09-07 13:08:35  No: 23101  IP: 192.*.*.*

開発言語はDELPHI5.0です

編集 削除
まさ  2006-09-07 13:26:13  No: 23102  IP: 192.*.*.*

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

編集 削除
デルデル  2006-09-07 14:28:29  No: 23103  IP: 192.*.*.*

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

編集 削除
デルデル  2006-09-07 16:18:44  No: 23104  IP: 192.*.*.*

自己レスです。
ボーランドが出した[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 00:51:21  No: 23105  IP: 192.*.*.*

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

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

編集 削除
ん?  2006-09-08 11:34:51  No: 23106  IP: 192.*.*.*

>     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-08 21:02:11  No: 23107  IP: 192.*.*.*

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


  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 09:22:19  No: 23108  IP: 192.*.*.*

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

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

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

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

編集 削除
ん?  2006-09-11 09:24:42  No: 23109  IP: 192.*.*.*

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

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

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

編集 削除
デルデル  2006-09-11 10:03:28  No: 23110  IP: 192.*.*.*

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

編集 削除
ん?  2006-09-11 10:55:01  No: 23111  IP: 192.*.*.*

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

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

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

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

編集 削除
デルデル  2006-09-11 14:31:46  No: 23112  IP: 192.*.*.*

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

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

編集 削除
デルデル  2006-09-11 16:09:47  No: 23113  IP: 192.*.*.*

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

編集 削除