有关图片存储的问题?

zkw 2003-09-13 02:20:41
我的后端库是用sql server开发的,现设计的一个表中牵涉到照片,我想将该字段的类型设为image,但是不知道在前端怎样操作这个类型,例如:如果要将该字段值显示在前端怎样实现?如果要往后端库写该数据又该如何操作?
...全文
33 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zkw 2003-09-27
  • 打赏
  • 举报
回复
to(up) 你上面写的这种方法我已经试过了,可以入库成功,但是提取时的图片全是黑色的,并不是提交时的图片,请问为甚么?
  • 打赏
  • 举报
回复
不大
还有

在DELPHI中更简单的存取JPEG文件到SQLSERVER数据库

王大川(WDCZZH)

在Delphi7.0+Win2000+SqlServer 2000中测试通过,运行良好,现将思路、源码公开如下:

解决思路:

1、 关键在于将打开的JPEG文件动态转换为Tbitmap对象并显示在Timage对象中;

2、 将显示的图片提交到数据库中。

本例中在SQLSERVER2000中建立了一个试例表:exam(xm char(10),photo image);



程序源代码:

unit SavePic;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtDlgs, ExtCtrls, DBCtrls, Grids, DBGrids, DB, ADODB, Buttons,

StdCtrls,Jpeg;



type

TForm1 = class(TForm)

SpeedButton1: TSpeedButton;

ADOConnection1: TADOConnection;

Table1: TADOTable;

DataSource1: TDataSource;

DBGrid1: TDBGrid;

DBImage1: TDBImage;

Image1: TImage;

SpeedButton2: TSpeedButton;

OpenPictureDialog1: TOpenPictureDialog;

Label1: TLabel;

Label2: TLabel;

Edit1: TEdit;

SpeedButton3: TSpeedButton;

procedure SpeedButton2Click(Sender: TObject);

procedure SpeedButton1Click(Sender: TObject);

procedure SpeedButton3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;



var

Form1: TForm1;



implementation



{$R *.dfm}

procedure TForm1.SpeedButton2Click(Sender: TObject);

var

bmp1:TBitmap;

jpg1:TJpegImage;

begin



OpenPictureDialog1.DefaultExt:=GraphicExtension(TJpegimage);

if OpenPictureDialog1.Execute then

begin

bmp1:=TBitmap.Create;

jpg1:=TJpegImage.Create;

try

jpg1.LoadFromFile(OpenPictureDialog1.FileName);

bmp1.Assign(jpg1);

Image1.Picture.Bitmap.Assign(bmp1);

finally

jpg1.Free;

bmp1.Free;

end;

end;

end;



procedure TForm1.SpeedButton1Click(Sender: TObject);

begin

table1.Open;

table1.insert;

table1.fieldbyname('xm').asstring:=Edit1.Text;

table1.FieldByName('photo').Assign(Image1.Picture);

table1.post;

table1.Refresh;

end;

end.

以上就是将JPEG存取到SQLSERVER中的操作方法,本文在此仅是抛砖引玉,希望各位朋友举一反三想出更多、更好、更实用的应用技术,公布到CSDN为大家造福。

欢迎各位朋友来Email交流:wdcwy@tom.com

QQ:11711941



wyr521 2003-09-14
  • 打赏
  • 举报
回复
太大了吧
  • 打赏
  • 举报
回复
骗点分。。。。。
声明:
如果是固定字段请使用LOADFROMFILE方法进行添加

DELPHI存取JPEG文件到SQL Server数据库
                           高红岩(ghyghost)
 
  近日笔者书写一个小型的学生管理系统时,需要用到ADO控件存取SQL Server数据库图片,查看资料发现基本都是针对BMP文件进行操作(巨增数据库大小),但发现了★eagletian★高手翻译的ADO英文技术文档,里面涉及到了数据库存取JPEG文件的关键技术,在win98+sql server桌面版中测试通过,运行良好,现于源码公开如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, DBCtrls, Grids, DBGrids, Db, ADODB,jpeg, StdCtrls,dbtables;
{一定要USES JPEG单元,使能存储JPG文件格式}
type
TForm1 = class(TForm)
DataSource1: TDataSource;
ADOQuery1: TADOQuery;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
Image1: TImage;
savebutton: TButton;
showbutton: TButton;
OpenDialog1: TOpenDialog;
ADOQuery1id: TIntegerField;
ADOQuery1pic: TBlobField;
procedure savebuttonClick(Sender: TObject);
procedure showbuttonClick(Sender: TObject);
procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

function JpegStartsInBlob(PicField:TBlobField):integer;
var
ghy: TADOBlobstream;
buffer:Word;
hx: string;
begin
Result := -1;
ghy := TADOBlobstream.Create(PicField, bmRead);
try
while (Result = -1) and (ghy.Position + 1 < ghy.Size) do
begin
ghy.ReadBuffer(buffer, 1);
hx:=IntToHex(buffer, 2);
if hx = 'FF' then begin
ghy.ReadBuffer(buffer, 1);
hx:=IntToHex(buffer, 2);
if hx = 'D8' then Result := ghy.Position - 2
else if hx = 'FF' then
ghy.Position := ghy.Position-1;
end; //if
end; //while
finally
ghy.Free
end; //try
end;


procedure TForm1.savebuttonClick(Sender: TObject);
var
picstream:tadoblobstream;
begin
adoquery1.edit;
picstream:=tadoblobstream.Create(tblobfield(adoquery1.fields[1]),bmWrite);
if form1.opendialog1.execute then
begin
picstream.LoadFromFile(opendialog1.filename);
picstream.Position:=0;
adoquery1.edit;
tblobfield(adoquery1.Fields[1]).loadfromstream(picstream);
adoquery1.post;
end;


end;

procedure TForm1.showbuttonClick(Sender: TObject);
var
ghy:TADOBlobstream;
pic:tjpegimage;
begin
ghy := TADOBlobstream.Create(Adoquery1pic, bmRead);
try
ghy.Seek(JpegStartsInBlob(Adoquery1pic),soFromBeginning);
Pic:=TJpegImage.Create;
try
Pic.LoadFromStream(ghy);
Image1.Picture.Graphic:=Pic;
finally
Pic.Free;
end;
finally
ghy.Free
end;
end;

procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
begin
if button in [nbFirst, nbPrior, nbNext, nbLast] then showbutton.Click;
end;

end.

如果数据库中要存储的是BMP文件,则在procedure TForm1.showbuttonClick(Sender: TObject);过程中代码更改如下即可存储显示BMP文件格式的操作。
procedure TForm1.showbuttonClick(Sender: TObject);
var
ghy:TADOBlobstream;
pic:tbitmap;
begin
ghy := TADOBlobstream.Create(Adoquery1pic, bmRead);
try
{ ghy.Seek(JpegStartsInBlob(Adoquery1pic),soFromBeginning);}
Pic:=Tbitmap.Create;
try
Pic.LoadFromStream(ghy);
Image1.Picture.Graphic:=Pic;
finally
Pic.Free;
end;
finally
ghy.Free
end;
end;
  到此用DELPHI存取JPEG文件到SQL Server数据库中的具体操作已经叙述完毕。

qianguob 2003-09-14
  • 打赏
  • 举报
回复
Tbolb 类型就是用来存储 图片的。
zkw 2003-09-14
  • 打赏
  • 举报
回复
请问如何将image转化为二进制?
sy_315 2003-09-13
  • 打赏
  • 举报
回复
oracle 中存储图片的类型是blob
access 里面用ole
把image转成2进制流保存到数据库中
zkw 2003-09-13
  • 打赏
  • 举报
回复
还有delphi中的asblob是不是操纵图片类型的?

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧