[前][次][番号順一覧][スレッド一覧]

mysql:2675

From: Ko Tanikawa <Ko Tanikawa <dev@xxxxxxxxxx>>
Date: Sat, 04 Nov 2000 15:31:30 GMT
Subject: [mysql 02675] MyODBC 経由で JPEG ファイルを書き込むには?

こんにちは,谷川です。

現在, Delphi で作成した Windows ソフトから,リモートの MySQL サー
バの blob フィールドへ JPEG イメージを書き込もうとしているのです
が,なかなかうまくいきません。

カラム一覧
 SID smallint not null,
 ItemId integer not null,
 FileId tinyint not null,
 ImgBinary mediumblob,

MySQL サーバーは Linux 上で動作していますが, Delphi からは,
MyODBC-2.50.29 の SJIS 版経由で接続しています。(バイナリファイル
をコード変換しないため) Delphi からは,大体下記のようにして書き
込んでいます。

----------------------------------------------
fm := TMemoryStream.Create;
jpg := TJPEGImage.Create;
jpg.LoadFromFile(FileName);
jpg.SaveToStream(fm);  
  //JPEGのバイナリデータをメモリーストリームfmへセーブ

with TQuery.Create(self) do begin
  DatabaseName := Database1.DatabaseName;
  SQL.Text := 'replace MItemImg (SID,ItemId,FileId,ImgBinary) '
    + ' values (:SID,:ItemId,:FileId,:ImgBinary)';
  ParamByName('SID').AsInteger := SID;
  ParamByName('ItemId').AsInteger :=ItemId;
  ParamByName('FileId').AsInteger := FileId;
  ParamByName('ImgBinary').LoadFromStream(fm,ftBlob);
    //fmからバイナリデータを読み込んでカラムへセット
  try
    ExecSQL;
  finally
    Free;
    jpg.Free;
    fm.Free;
  end;
end;
----------------------------------------------

一応書き込めるのですが,正しく書き込まれません。(画像によっては,
まれに良いこともある)例えば,

http://www.agapesystem.com/receive.php?SID=2&FileId=1&ItemId=8
http://www.agapesystem.com/receive.php?SID=2&FileId=1&ItemId=38

のようになってしまいます。 Delphi からは他にも色々な方法で試して
みたのですが,何とか画像らしきものが現れるのは上記のコードでした。

ちなみに,クライアントに Windows 版の PHP3 をインストールし,下記
のコードを直接ダブルクリックして (php3.exe から? ) 実行すると,
ものの見事に書き込んでくれます。

----------------------------------------------
<?
$jpegfile=JPEG画像ファイル名;

$conn=mysql_connect($HOST,$USERID,$PASSWD);
mysql_select_db($DBNAME,$conn);

$fp=fopen($jpegfile,"r");
$Binary=addslashes(fread($fp, filesize($jpegfile)));
fclose ($fp);
$sql = "replace MItemImg (SID,ItemId,FileId,ImgBinary) values 
(2,108,1,'$Binary')";
$result = mysql_query($sql);
?>
----------------------------------------------

上記PHPで書き込んだ例
http://www.agapesystem.com/receive.php?SID=2&FileId=1&ItemId=108
http://www.agapesystem.com/receive.php?SID=2&FileId=1&ItemId=138

何としても Delphi から直接書き込みたいんですが,何かヒントがござ
いましたら,ぜひご教示頂ければ幸いです。 m(_ _)m

サーバー側MySQL:Ver 3.22.32 (on RedHat Linux 6.1J)
クライアント側:サーバー:Ver 3.23.27-beta クライアント:3.23.22-beta
クライアントOS:Windows98
MyODBC Ver 2.50.29

-- 
                             Thanks in advance,
---------------------------------------------
谷川剛一 dev@xxxxxxxxxx

[前][次][番号順一覧][スレッド一覧]

->    2675 2000-11-05 00:31 [Ko Tanikawa <dev@xxx] MyODBC 経由で JPEG ファイルを書き込むには?
      2676 2000-11-05 01:45 ┗["MIYATSU Kazunari" <]                                       
      2681 2000-11-06 00:47  ┗[Ko Tanikawa <dev@xxx]