如何向SQL数据库中保存JPG图像? ( 积分: 50 )

  • 主题发起人 主题发起人 libaoliang
  • 开始时间 开始时间
L

libaoliang

Unregistered / Unconfirmed
GUEST, unregistred user!
本人有两个问题
1、如何向SQL数据库中保存JPG图像?
2、在局域网中另一微机的IP地址可以PING通,也在同一网段,但为何不能访问
它的SQL数据库?以前是可以的,不知为何现在不行了,请帮助!
 
需要use jpeg类;
O1为打开对话框
if O1.FileName <> '' then
begin
try
TBlobField(q1.fieldbyname('tb')).LoadFromFile(O1.FileName);
except
end;
end;
//--------------读取图片-----------------------//
if TBlobField(q1.fieldbyname('tb')).IsNull = false then
begin
GetDir(0, path);
Image1.Picture := nil;
Image1.Repaint;
tempjpg := path + '/TempJpg.Jpg';
Jpg := TJpegImage.Create;
TBlobField(q1.fieldbyname('tb')).savetoFile(tempjpg);
Jpg.LoadFromFile(tempjpg);
Image1.Picture.LoadFromFile(tempjpg);
Jpg.Free;
end
else
begin
Image1.Picture := nil;
end;
//------------------------------------//
 
需要use jpeg类;
O1为打开对话框
if O1.FileName <> '' then
begin
try
TBlobField(q1.fieldbyname('tb')).LoadFromFile(O1.FileName);
except
end;
end;
//--------------读取图片-----------------------//
if TBlobField(q1.fieldbyname('tb')).IsNull = false then
begin
GetDir(0, path);
Image1.Picture := nil;
Image1.Repaint;
tempjpg := path + '/TempJpg.Jpg';
Jpg := TJpegImage.Create;
TBlobField(q1.fieldbyname('tb')).savetoFile(tempjpg);
Jpg.LoadFromFile(tempjpg);
Image1.Picture.LoadFromFile(tempjpg);
Jpg.Free;
end
else
begin
Image1.Picture := nil;
end;
//------------------------------------//
 
系统DNS可以连得通吗?
 
周海涛:
我说的是把JPG图片保存到SQL数据库中,请仔细看看,很多人回答问题似乎不看题目,
再说一般保存时是通过按钮键进行的,不是通过打开对话框时进行的,
我先在FORM上加一个image控件和openpicturedialog控件,
通过openpicturedialog1的click事件把图片文件复制给image1.picture
然后再向adotable1中保存,其代码是什么?保存的代码?
 
其实这类问题的答案网上多的是,另外楼主问别人问题,应该谦虚点,否则没人来帮你的:
uses jpeg;
保存Image1中的图象至数据库 :
var
Ms:TmemoryStream;
jpg:Tjpegimage;
begin
ms:=TmemoryStream.Create;
Jpg.Assign(Image1.Picture.Graphic);
Jpg.SaveToStream(Ms) ;
Ms.Position :=0;
ADOquery1.append;
TBlobField(ADOquery1.FieldByName('img')).LoadFromStream(Ms);
ADOquery1.Post;
Ms.Free ;
jpg.free;
end;
从数据库中读取图象到image2中:
Var
Ms:TStringStream;
jpg:Tjpegimage;
begin
Ms:=TstringStream.Create('');
TBlobField(ADOquery1.FieldByName('img')).SaveToStream(Ms);
Ms.Position :=0;
Jpg.LoadFromStream(Ms);
Image2.Picture.Assign(Jpg);
Ms.Free;
jpg.free;
end;

例子2:

procedure TForm1.Button1Click(Sender: TObject); //插入圖片過程
var
testStream:TMemoryStream;
begin
try
testStream := TMemoryStream.Create; //創建內存流
Image1.Picture.Graphic.SaveToStream(testStream); //將圖片保存至內存流中
adoquery1.Close;
adoquery1.SQL.Clear;
adoQuery1.SQL.Add('Insert into test (id,photo) values (:id,:photo)'); //進行插入操作
adoquery1.Parameters.ParamByName('id').Value := '003';
adoQuery1.Parameters.ParamByName('photo').LoadFromStream(testStream,ftBlob); //讀取保存的內存圖
adoquery1.ExecSQL;
finally
testStream.Free; //釋放內存流
end;
end;

procedure TForm1.Button2Click(Sender: TObject); //讀取圖片過程
var
mStream:TMemoryStream;
JpgFile:TjpegImage;
begin
if not ADOQuery1.FieldByName('photo').IsNull then begin ;
mStream:=TMemoryStream.Create ;
JpgFile:=TjpegImage.Create ;
TBlobField(ADOQuery1.FieldByName('photo')).SaveToStream(mStream); //顯示的轉換為BlobFiled並保存至內存流
mStream.Position :=0;
jpgfile.LoadFromStream(MStream);
image2.Picture.Assign(JpgFile);
end
else begin
image2.Picture :=nil;
end;
end;
 
//JPG图像保存到数据库
procedure saveimage(filename:string; imagers:tadoquery; imagefield: string);
var
Ms:TmemoryStream;
jpg:Tjpegimage;
begin
ms:=TmemoryStream.Create;
jpg:=tjpegimage.Create ;
Jpg.LoadFromFile(appdir+filename);
Jpg.SaveToStream(Ms) ;
Ms.Position :=0;
imagers.edit;
TBlobField(imagers.FieldByName(imagefield)).LoadFromStream(Ms);
imagers.Post;
Ms.Free ;
jpg.free;
end;

第二个问题嘛 我遇到过服务器是XP系统存在这种问题。PING通但是不能访问。要在组策略里改。其他的吗要看你你的SQL登陆方式是不是混合的。在就是权限。还有可能是服务器的administrator的密码该过。
 
lxw5214:
接受你的意见,以后改进!

另外问一下:

如何从(或者以)DDE,OPT,TCP/IP方式里读取数据,
我刚跟一个客户了解到他的需求,具体情况还不太了解,反正就是这个意思,
也就是设备没有象串口一样的数据输出,但又想做一个后台的管理程序,
目前的问题是如何从该设备的读数问题,我最近会与这个单位沟通,看具体是什么设备,
目前我知道那是化工液体的灌装设备,再详细的就不知道了,可能是进口设备.
 
后退
顶部