SQL(50分)

  • 主题发起人 主题发起人 zhouyong
  • 开始时间 开始时间
Z

zhouyong

Unregistered / Unconfirmed
GUEST, unregistred user!
请问一下,如何用SQL在一个字段中插入BMP图像文件?
 
var
st: TStringStream;
begin
st := tstringstream.create('');
bitmap.savetostream(st);
query1.sql.text := 'insert into table Image_field values :bmp';
query1.parambyname('bmp').asblob := st.datastring;
query1.execsql;
st.free;
end;
 
SQL server中
---- Image 数据类型不同于其它数据类型,不能用Insert 、Update
的标准SQL语法进行图形的添加和修改。需用到SQL Server中的
TEXTPTR 、WRITETEXT、UPDATETEXT等函数进行图形的添加和修改。
---- 首先假设在库Im_Test中建立一张表Im_Info,此表中有两个
字段,分别为Pr_Id (INT),Pr_Info (IMAGE),用来存储图形编
号及图形信息。其语法如下:
CREATE TEALE Im_Info (
Pr_Id INT NULL ,
Pr_Info IMAGE NULL
)
---- 第一步往表中插入一条记录,并初始化PR_INFO字段。其语法
如下:
INSERT INTO Im_Info VALUES (1 ,0xFFFFFFFF)
---- 第二步往表中写入图形信息。其语法如下:
DECLARE @@ptrval varbinary(16)
SELECT @@ptrval = TEXTPTR(Pr_Info)
FROM Im_Info
WHERE Pr_Id = 1
WRITETEXT Im_Text.Im_Info
@@ptrval 0x624fd543fd…..
---- 其中0x624fd543fd….. 为图形的十六进制数据,可以通过
C 、Java等工具获得。注意在写入图形信息前必须先将此数据库
的 'select into/bulkcopy' 属性设置为 True ,其语法如下:
sp_dboption Im_Test ,
'select into/bulkcopy' ,True
---- 若想修改图形数据可用UPDATETEXT函数修改,其语法如下:
DECLARE @@ptrval varbinary(16)
SELECT @@ptrval = TEXTPTR(Pr_Info)
FROM Im_Info
WHERE Pr_Id = 1
UPDATETEXT Im_Text.Im_Info
@@ptrval 0xaa31bcfe543fd…..
---- 二、在主页中显示图形
---- 第一步建立数据源
---- 若想将加入的图形显示在主页中,必须先建立数据源,打
开Windows 中的控制面板。通过ODBC 应用程序,建立数据源
(取名Im_Test)连接到Im_Test数据库
---- 第二步编写程序
< % @ LANGUAGE = VBScript % >
< % Option Explicit % >
< %
Dim oConn
Dim oRs
Dim Pic
Dim PicSize
Dim PicSize

Response.Buffer = TRUE
Response.ContentType = "image/gif"
Set oConn = Server.CreateObject
("ADODB.Connection")
oConn.Open "Im_Test",”sa”,””
Set oRs = oConn.Execute("SELECT Pr_Info
FROM Im_Info WHERE Pr_Id=1”)
PicSize = oRs("Pr_Info").ActualSize
Pic = oRs("Pr_Info ").GetChunk(PicSize)

Response.BinaryWrite Pic
Response.End
% >
---- 此程序中先定义四个变量。然后设置属性
Response.Buffer=TRU和Response.ContentType = "image/gif" ,
再连接数据库取出图形,在加以显示。
 
小弟使用STRING的时候发现,如果出现数字1A和00的时候,DELPHI的STRING就
会被截断,所以直接的写入不太可能,用“流”,还没尝试过,小弟在POST给
WEB服务器的时候使用的是自己把所有的数码都经过自己的编码(比如全变成
ASCII里面的可见字,不过这样信息量刚好大了一倍,不是好的办法),然后
以STRING的形式输入到字符串字段……用的时候再解出来写成文件。
 
如果不是非用sql语句不可, 查一下以前的问题, 很多回答图象到数据库中.
 
end or continue?
 
多人接受答案了。
 
后退
顶部