如何存取sql server7.0或sql server 2000中的image类型的字段数据?(60分)

  • 主题发起人 主题发起人 张利中
  • 开始时间 开始时间

张利中

Unregistered / Unconfirmed
GUEST, unregistred user!
在sql server 中有image类型的字段,请问如何将一幅图象保存到image
类型的字段中?
 
procedure Tzp.FlatButton1Click(Sender: TObject);
begin
form4.ryADOTable1.Edit;
form4.ryADOTable1.FieldByName('人员照片').Assign(Image1.Picture);
if(application.MessageBox('是否确认调入照片?','确认调入'
mb_yesno+mb_iconquestion)<>idno)
then begin
form4.ryADOTable1.Post;
close;
end
else
form4.ryADOTable1.Cancel;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var str:Tmemorystream;
begin
str:=Tmemorystream.Create;
str.LoadFromFile('f:/page.pas');
str.Position:=0;
adoquery1.Append;
Tblobfield(adoquery1.FieldByName('tt')).loadfromstream(str);
try
adoquery1.Post;
finally
str.Free;
end;
end;
 
unit
db;//所需包的单元文件
var
FileStream: TFileStream;
st:TStringStream;
with query do
begin
close;
sql.clear;
sql.text:='insert into table(field) values(:a1) ';//此字段要是image型的
FileStream := TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
FileStream.Position:=0;
st := tstringstream.create('');
st.CopyFrom(FileStream,FileStream.Size);
parambyname('a1').asblob:=st.datastring;
execsql;
try
{''''''''''''''};
finally
FileStream.Free;
st.Free;
end;
 
TBlobField(FieldByName('图片')).LoadFromFile(FileName);//导入文件流

碰到一个问题,我不明白,如果数据库字段为IMAGE类型的,为什么不能用参数方式
进行赋值呢???
比如上面那句改为
TBlobField(ParamByName('图片')).LoadFromFile(FileName);
或者
TBlobField(ParamByName('图片')).LoadFromStream(MyStream);

报错
 
ado必须用TADOBlobStream代替dataset中的BlobStream. 直接调用TBlobField(adodataset.fields[n]).LoadFromStream会出错
必须显式用TADOBlobStream.Create(TBlobField(Adodataset.fields[n]), bmRead/bmWrite/...), 然后才能使用
 
如何将image类型字段中的图像信息读到image控件里(通过该控件显示图像)?
另外: image类型的字段在sql server 环境中不能直接编辑.如果想看一下它
里面的内容,怎么看?
 
var
jpeg: tjpegimage;
stream: TMemoryStream;
begin
if not dm.adophoto.Fields[1].IsNull then
begin
jpeg := tjpegimage.Create;
stream := TMemoryStream.Create;
tblobfield(dm.adophoto.FieldByName('photo')).savetostream(stream);
Stream.Seek(0, soFromBeginning);
jpeg.loadfromstream(stream);
image1.Picture.Bitmap.Assign(jpeg);
pmenumodify.Enabled :=true;
pmenuinsert.Enabled :=false;
jpeg.Free;
stream.Free;
end
else
begin
pmenuinsert.Enabled :=true;
pmenumodify.Enabled :=false;
image1.Picture.LoadFromFile(extractfilepath(application.ExeName)+'nophoto.jpg');
end;
 
procedure TFrmDetail.BitBtnLoadPictureClick(Sender: TObject);
begin
if dlgPop.Execute then
begin
Screen.Cursor := crHourglass;
dbimgPhoto.Picture.CleanupInstance;
if dm.adodsArchives.State = dsInsert then begin
if (EditICCard_ID.Text <> '') and (EditPatient_Name.Text <> '') then
begin
dm.adodsArchives.Post;
ShowPhoto;
dm.adodsPhoto.Edit;
dbimgPhoto.Picture.LoadFromFile(dlgPop.FileName);
dm.adodsPhoto.Post;
end
else
begin
MessageBox(self.Handle,'ttt','ttt',MB_ICONERROR+MB_OK)
end;
end
else
begin
if MessageBox(self.Handle,真的要调入该照片吗?'
'询问',MB_ICONQUESTION+MB_YesNo)=IDYES then
begin
dm.adodsPhoto.Edit;
dbimgPhoto.Picture.LoadFromFile(dlgPop.FileName);
dm.adodsPhoto.Post;
end;
end;
Screen.Cursor := crDefault;
end;
end;

还有,你可以用DBIMAGE来读取图像,而且可以查看,但我想不可能修改的!
 
接受各位的答案,问题已经解决.谢谢!
特别感谢lcl_003,梦菲斯,KervenLee三位
 

Similar threads

回复
0
查看
978
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部