喫茶XRAYトップページ

[スレッド全体
]

[10531] Blobフィールドへの格納方法への質問返信 削除
2016/11/19 (土) 16:56:00 Mr.XRAY
[Blobフィールドへの格納方法への質問]
http://www.freeml.com/delphi-users/4577/latest

コードを見る限りエラーが発生するような要因はないようなんですが.
昨日今日の方ではないので
「エラーの内容を書いた方がいいのではないでしようか ?」
とは言いにくいですね.

かなり昔,コードのインデントがない方がいい,という内容をどこかのサイト
で読んだ記憶がありますが,
Delphi を使っている方で本当にいるとは思いませんでした.
私自身は読みにくいと思っていますけど.
えっ ?  違う ? 何が (笑)


[10533] Re:Blobフィールドへの格納方法への質問返信 削除
2016/11/19 (土) 17:32:29 igy
▼ Mr.XRAYさん
> [Blobフィールドへの格納方法への質問]
> http://www.freeml.com/delphi-users/4577/latest
>
> コードを見る限りエラーが発生するような要因はないようなんですが.


あのコードで、シングルクォーテーションが2つ並んでいるのは、気になりますね。


[10536] Re2:Blobフィールドへの格納方法への質問返信 削除
2016/11/19 (土) 17:38:25 SO
▼ igyさん
 
> あのコードで、シングルクォーテーションが2つ並んでいるのは、気になりますね。

バックコーテーションの間違いですかね?

create table hogehoge
(
`レコード番号` int,
`レコード区分` char(2),
`受付番号` char(8)
)

[10537] Re3:Blobフィールドへの格納方法への質問返信 削除
2016/11/19 (土) 17:45:37 Mr.XRAY
▼ SOさん

> バックコーテーションの間違いですかね?

だとすると,というより,
実際データを SELECT して TDBGrid 等に表示できるか確認する必要が...
そんなことやっているでしょうね.
いや,もしかしたら... ハハハッ

どうして POST できないのか興味あるんですが,
例によって,怖くてレスできません !!
やっぱりここはエスパーの登場を期待することにします.


[10538] Re4:Blobフィールドへの格納方法への質問返信 削除
2016/11/19 (土) 18:00:52 SO
▼ Mr.XRAYさん

Delphi手元にないので、私も妄想で書いてますが、
「function CreateBlobStream(Field: TField; Mode: TBlobStreamMode): TStream; virtual;」
って、ポインタを返すわけではないですよね?
BlobStream.Free;
ADODataSet1.Post;
Postする前に解放してるけど???

[10554] Re5:Blobフィールドへの格納方法への質問返信 削除
2016/11/22 (火) 08:33:37 おかぽん
▼ SOさん
> BlobStream.Free;
> ADODataSet1.Post;
> Postする前に解放してるけど???


元ネタがどこなのかはわからないのですが・・・
//TBlobStreamは必ずTable.Editよりも後でCreateしなければならず、
//Table.Postの前までにFreeしなければならない。
以下からの転載
Q: データベーステーブルのGraphicフィールドにビットマップを保存するには どのようにすれば良いのでしょうか?
http://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/faq/00107.htm

Mr.XRAY さんの記事もそのようになっていますし。
560_画像や RichEdit ワード文書をデータベースで読書き
http://mrxray.on.coocan.jp/Delphi/plSamples/560_RichEditDB.htm#03

CopyFrom じゃなく SaveToStream を使うのがミソだったりして。。。

[10555] Re6:Blobフィールドへの格納方法への質問返信 削除
2016/11/22 (火) 12:36:08 Mr.XRAY
▼ おかぽんさん,お久です.

> CopyFrom じゃなく SaveToStream を使うのがミソだったりして。。。

本人のレスがあって,Delphi XE7 だと OK で,Delphi 6 だとエラー発生
のようです.SaveToStream なのかな ?
調べてみないと分かりませんね.

ところで,サーバの障害直ったようですが.
https://my.7artisan.com/serverstatus.php


[10560] Re7:Blobフィールドへの格納方法への質問返信 削除
2016/11/24 (木) 20:02:31 Mr.XRAY
> 本人のレスがあって,Delphi XE7 だと OK で,Delphi 6 だとエラー発生
> のようです.SaveToStream なのかな ?
> 調べてみないと分かりませんね.


以下のコードでやってみました.Window 7 U64(SP1) + Delphi6 Pro(UP2) です.
ただし,JPGE 画像ファイルでのテストです.
画像ファイルを変えて実行してみましたが,エラーは発生しませんでした.
データを読み出して表示するのも行っています.

以下はサンプルに掲載しているコードではなく,
質問されたコードをコピペして,画像の部分だけ変えています.
もちろん,データベースは違いますが...


procedure TForm1.Button1Click(Sender: TObject);
var
  StrText   : String;
  FileStream : TFileStream;
  BlobStream : TStream;
begin
  ADOConnection1.Connected   := False;
  ADOConnection1.LoginPrompt := False;

  StrText := 'Provider=Microsoft.Jet.OLEDB.4.0';
  StrText := StrText + ';Data Source=' + '../BlobTest_BLOB.mdb';

  ADOConnection1.ConnectionString := StrText;
  ADOConnection1.Mode             := cmReadWrite;

  ADODataSet1.Connection := ADOConnection1;

  ADODataSet1.CommandText := 'SELECT * FROM TEST where ID=100 ';
  ADODataSet1.Active := True;
  ADODataSet1.Edit;

  //---------------------------------------------------------------------------
  //  上はデータベースへの接続用コード
  //  以下が実際の書き込みコード
  //---------------------------------------------------------------------------
  try
    BlobStream := ADODataSet1.CreateBlobStream(ADODataSet1.FieldByName('Graphic'), bmWrite);
    FileStream := TFileStream.Create(ExpandFileName('../501.jpg'), fmOpenRead or fmShareDenyNone);
    BlobStream.CopyFrom(FileStream, FileStream.Size);
    FileStream.Free;
    BlobStream.Free;
    ADODataSet1.Post;
  except
    ADODataSet1.Cancel;
  end;
  ADODataSet1.Active := false;
end;




[▼次のスレッド]
INCM/CMT
Cyclamen v3.82