Delphi7 + SQL2000 处理image 有关问题
Delphi7 + SQL2000 处理image 问题.
程式 A (易助4.0 商品信息可加入图片小程式)
程式 B 自己写的delphi7 小程式
程式 C SQL Image Viewer
问题:
程式 A存的图, 用程式B看会出 error#53
程式 B存的图, 用程式A看会登出系統
程式 C 可以看到 程式 A/B存的图.(没有储存功能)
程式 B还可以怎让改?
程式 B源码如下:
unit Main;
interface
uses
Variants,
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, DB, ABSMain, Jpeg,
ADODB;
type
TfrmMain = class(TForm)
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
btSaveImage: TButton;
odBlob: TOpenDialog;
sdBlob: TSaveDialog;
btLoadImage: TButton;
GroupBox2: TGroupBox;
Photo: TImage;
ADOTable1: TADOTable;
procedure btLoadImageClick(Sender: TObject);
procedure btSaveImageClick(Sender: TObject);
procedure ADOTable1AfterScroll(DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
//------------------------------------
procedure TfrmMain.btLoadImageClick(Sender: TObject);
var
FileStream: TFileStream;
BlobStream: TStream;
begin
if (odBlob.Execute) then
begin
ADOTable1.Edit;
try
BlobStream := ADOTable1.CreateBlobStream(ADOTable1.FieldByName('DEB002'),bmWrite);
FileStream := TFileStream.Create(odBlob.FileName,fmOpenRead or fmShareDenyNone);
BlobStream.CopyFrom(FileStream,FileStream.Size);
FileStream.Free;
BlobStream.Free;
ADOTable1.Post;
ADOTable1AfterScroll(ADOTable1);
except
ADOTable1.Cancel;
end;
end;
end;
procedure TfrmMain.btSaveImageClick(Sender: TObject);
var
FileStream: TFileStream;
BlobStream: TStream;
begin
if (sdBlob.Execute) then
begin
FileStream := TFileStream.Create(sdBlob.FileName,fmCreate);
BlobStream := ADOTable1.CreateBlobStream(ADOTable1.FieldByName('DEB002'),bmRead);
FileStream.CopyFrom(BlobStream,BlobStream.Size-BlobStream.Position);
BlobStream.Free;
FileStream.Free;
end;
end;
procedure TfrmMain.ADOTable1AfterScroll(DataSet: TDataSet);
var
JpegImage: TJPEGImage;
BlobStream: TStream;
begin
if (not ADOTable1.FieldByName('DEB002').IsNull) then
begin
BlobStream := ADOTable1.CreateBlobStream(ADOTable1.FieldByName('DEB002'),bmRead);
JpegImage := TJPEGImage.Create;
try
JpegImage.LoadFromStream(BlobStream);
Photo.Picture.Assign(JpegImage);
Photo.Visible := True;
finally
JpegImage.Free;
BlobStream.Free;
end;
end
else
Photo.Visible := False;
end;
end.
------解决方案--------------------
会不会是图片的不同格式引起的问题。
------解决方案--------------------
代码仅处理了jpg图片,LZ确定程序a存入的是jpg格式么?不是png或者bmp之类的?
------解决方案--------------------
帮你顶顶帖子先
程式 A (易助4.0 商品信息可加入图片小程式)
程式 B 自己写的delphi7 小程式
程式 C SQL Image Viewer
问题:
程式 A存的图, 用程式B看会出 error#53
程式 B存的图, 用程式A看会登出系統
程式 C 可以看到 程式 A/B存的图.(没有储存功能)
程式 B还可以怎让改?
程式 B源码如下:
unit Main;
interface
uses
Variants,
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, DB, ABSMain, Jpeg,
ADODB;
type
TfrmMain = class(TForm)
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
btSaveImage: TButton;
odBlob: TOpenDialog;
sdBlob: TSaveDialog;
btLoadImage: TButton;
GroupBox2: TGroupBox;
Photo: TImage;
ADOTable1: TADOTable;
procedure btLoadImageClick(Sender: TObject);
procedure btSaveImageClick(Sender: TObject);
procedure ADOTable1AfterScroll(DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
//------------------------------------
procedure TfrmMain.btLoadImageClick(Sender: TObject);
var
FileStream: TFileStream;
BlobStream: TStream;
begin
if (odBlob.Execute) then
begin
ADOTable1.Edit;
try
BlobStream := ADOTable1.CreateBlobStream(ADOTable1.FieldByName('DEB002'),bmWrite);
FileStream := TFileStream.Create(odBlob.FileName,fmOpenRead or fmShareDenyNone);
BlobStream.CopyFrom(FileStream,FileStream.Size);
FileStream.Free;
BlobStream.Free;
ADOTable1.Post;
ADOTable1AfterScroll(ADOTable1);
except
ADOTable1.Cancel;
end;
end;
end;
procedure TfrmMain.btSaveImageClick(Sender: TObject);
var
FileStream: TFileStream;
BlobStream: TStream;
begin
if (sdBlob.Execute) then
begin
FileStream := TFileStream.Create(sdBlob.FileName,fmCreate);
BlobStream := ADOTable1.CreateBlobStream(ADOTable1.FieldByName('DEB002'),bmRead);
FileStream.CopyFrom(BlobStream,BlobStream.Size-BlobStream.Position);
BlobStream.Free;
FileStream.Free;
end;
end;
procedure TfrmMain.ADOTable1AfterScroll(DataSet: TDataSet);
var
JpegImage: TJPEGImage;
BlobStream: TStream;
begin
if (not ADOTable1.FieldByName('DEB002').IsNull) then
begin
BlobStream := ADOTable1.CreateBlobStream(ADOTable1.FieldByName('DEB002'),bmRead);
JpegImage := TJPEGImage.Create;
try
JpegImage.LoadFromStream(BlobStream);
Photo.Picture.Assign(JpegImage);
Photo.Visible := True;
finally
JpegImage.Free;
BlobStream.Free;
end;
end
else
Photo.Visible := False;
end;
end.
------解决方案--------------------
会不会是图片的不同格式引起的问题。
------解决方案--------------------
代码仅处理了jpg图片,LZ确定程序a存入的是jpg格式么?不是png或者bmp之类的?
------解决方案--------------------
帮你顶顶帖子先