使用BDE与SQL
控件有Query1,DBImage1,DataSource1
保存图片过程---
function TForm_editmould.SaveMPicture: boolean;
begin
with Query1 do
begin
try
if Active then close;
sql.Text := 'insert into mouldpicture (mid,mcode,mpicture) values(:mid,:mcode,:mpicture)';
Params[0].Value := 0;
params[1].Value := PriMCode;//Primcode 图片的名称
params[2].LoadFromFile(ffile,ftBlob);//ffile文件名及路径
ExecSQL;
Result := True;
except
Result := False;
end;
end;
显示图片
procedure TForm_editmould.GetPicture;
begin
try
if Query1.Active then Query1.Close;
Query1.SQL.Text := 'select mpicture from mouldpicture where mcode = ''' + PriMCode + #39; //Primcode 图片的名称
query1.Open;
DBImage1.DataField := 'mpicture';
except
showmessage('不能读取模具图片!',0);
exit;
end;
end;
我保存的图片格式是‘jpg'
显示的时候只有一部分清楚,这是什么原因,请各位高手指教!
控件有Query1,DBImage1,DataSource1
保存图片过程---
function TForm_editmould.SaveMPicture: boolean;
begin
with Query1 do
begin
try
if Active then close;
sql.Text := 'insert into mouldpicture (mid,mcode,mpicture) values(:mid,:mcode,:mpicture)';
Params[0].Value := 0;
params[1].Value := PriMCode;//Primcode 图片的名称
params[2].LoadFromFile(ffile,ftBlob);//ffile文件名及路径
ExecSQL;
Result := True;
except
Result := False;
end;
end;
显示图片
procedure TForm_editmould.GetPicture;
begin
try
if Query1.Active then Query1.Close;
Query1.SQL.Text := 'select mpicture from mouldpicture where mcode = ''' + PriMCode + #39; //Primcode 图片的名称
query1.Open;
DBImage1.DataField := 'mpicture';
except
showmessage('不能读取模具图片!',0);
exit;
end;
end;
我保存的图片格式是‘jpg'
显示的时候只有一部分清楚,这是什么原因,请各位高手指教!
以前用的是TImage和access来弄的,不过没发生什么问题。在uses里jpeg了没??
我将BDE的BLOB SIZE设置为4096也不行
To: qzmp_sc
我试过使用TMemoryStream和TJpegImage在显示图片时会报错。
我的代码是这样的
procedure TForm_editmould.GetPicture;
var
aJpeg : TJpegImage;
aMS : TMemoryStream;
begin
try
if Query1.Active then Query1.Close;
Query1.SQL.Text := 'select mpicture from mouldpicture where mcode = ''' + PriMCode + #39; //Primcode 图片的名称
query1.Open;
if not Query1.isempty then
begin
aJpeg := TJpegImage.create;
aMS := TmemoryStream.create;
try
TBlobField(Query1.FieldByName('mpicture')).savetostream(aMS);
aMS.position := 0;
aJpeg.loadfromstream(aMS);
DBImage1.picture.bitmap.assign(ajpeg);
finally
ams.free;
aJpeg.free;
end;
end;
DBImage1.DataField := 'mpicture';
except
showmessage('不能读取模具图片!',0);
exit;
end;
end;
保存也是用流的方法。
我的代码如下:
显示图片 :
procedure TForm_editmould.GetPicture;
begin
try
if Query1.Active then Query1.Close;
Query1.SQL.Text := 'select * from mouldpicture where mcode = ''' + PriMCode + #39;
query1.Open;
img_Photo.DataField := 'mpicture';
except
showmess('不能读取模具图片!',0);
exit;
end;
end;
保存图片:
function TForm_editmould.SaveMPicture: boolean;
var
IsAdd : boolean;
begin
PriMCode := trim(DBEdit1.Text);
with Query1 do
begin
try
if not Active then
begin
Sql.Text := 'SELECT * FROM mouldPicture WHERE mcode='+''''+PriMCode+'''';
Open;
Img_photo.DataField := 'mpicture';
end;
IsAdd := IsEmpty;
if not (State in [dsInsert,dsEdit]) then
if IsAdd then
Append
else
Edit;
FieldByName('mcode').AsString := Trim(PriMCode);
post;
Result := True;
except
Result := False;
end;
end;
end;
var
mem : TStream;
jpg : TJPEGImage;
begin
with ADOTable1 do
begin
Active:=True;
mem := CreateBlobStream(FieldByName('Data'),bmRead);
mem.Position:=0;
jpg := TJpegImage.Create;
jpg.LoadFromStream(mem);
Image1.Picture.Assign(jpg);
jpg.Free;
mem.Free;
end;
ADOTable1.Active:=False;
end;