日期:2014-05-18  浏览次数:20447 次

SQL server如何利用字段存储图片
各位高手,如何用SQL   server中的字段指向文件夹里面的文件来存储图片,并用delphi显示出来,谢谢各位!

------解决方案--------------------
1。转为二进制存储
2。存相对路径,到时候读路径

两种方式都可以

------解决方案--------------------
存的时候写路径,读的时候设置相应的控件的picture属性为那个路径
------解决方案--------------------
方法:
1、建立过程
CREATE PROCEDURE sp_textcopy (
@srvname varchar (30),
@login varchar (30),
@password varchar (30),
@dbname varchar (30),
@tbname varchar (30),
@colname varchar (30),
@filename varchar (30),
@whereclause varchar (40),
@direction char(1))
AS
DECLARE @exec_str varchar (255)
SELECT @exec_str =
'textcopy /S ' + @srvname +
' /U ' + @login +
' /P ' + @password +
' /D ' + @dbname +
' /T ' + @tbname +
' /C ' + @colname +
' /W " ' + @whereclause +
' " /F ' + @filename +
' / ' + @direction
EXEC master..xp_cmdshell @exec_str

2、建表和初始化数据
create table 表名 (编号 int,image列名 image)
go
insert 表名 values(1,0x) -- 必须的,且不是null
insert 表名 values(2,0x) -- 必须的,且不是null
go

3、读入
sp_textcopy '你的服务器名 ', 'sa ', '你的密码 ', '库名 ', '表名 ', 'image列名 ', 'c:\图片.bmp ', 'where 编号=1 ', 'I ' --注意条件是 编号=1

sp_textcopy '你的服务器名 ', 'sa ', '你的密码 ', '库名 ', '表名 ', 'image列名 ', 'c:\bb.doc ', 'where 编号=2 ', 'I ' --注意条件是 编号=2

go

4、读出成文件
sp_textcopy '你的服务器名 ', 'sa ', '你的密码 ', '库名 ', '表名 ', 'image列名 ', 'c:\图片.bmp ', 'where 编号=1 ', 'O ' --注意条件是 编号=1

sp_textcopy '你的服务器名 ', 'sa ', '你的密码 ', '库名 ', '表名 ', 'image列名 ', 'c:\bb.doc ', 'where 编号=2 ', 'O ' --注意条件是 编号=2
go

************如果报textcopy不是可执行文件的话,你就到
C:\Program Files\Microsoft SQL Server\MSSQL\Binn
目录下拷备 textcopy.exe到:
C:\Program Files\Microsoft SQL Server\80\Tools\Binn

------解决方案--------------------

1。转为二进制存储 存的是varchar类型的路径 --------程序里读路径加载
2。存相对路径,到时候读路径 存的是二进制的数据,------先转成图处,用临时接收,再贴到控件上,
------解决方案--------------------
最简单的,2个字段,Title(varchar型)和FileData(image型)


写入
with query1 do
begin
close;
sql.Clear;
sql.Text := 'select * from filebase where 1=2 ';
open;
append;
FieldByName( 'Title ').AsString := 'Test ';
TBlobField(Query1.FieldByName( 'FileData ')).LoadFromFile( 'c:\a.jpg ');
post;
close;
end; // end of with

读出

procedure TForm1.Button2Click(Sender: TObject);
var
ms:TMemoryStream;
begin
ms := TMemoryStream.Create;
with Query1 do
begin
Close;
SQL.Clear;
SQL.Text := 'select * from filebase where id = 1 ';
Open;

ms.LoadFromStream(Query1.CreateBlobStream(Query1.FieldByName( 'FileData '),bmRead));
ms.SaveToFile( 'c:\_from_database.jpg ');

Close;
end; // end of rs

ms.Free;