还是SQL SERVER的IMAG中加入图型文件问题,没有解决,惭愧!(100分)

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

lyf998

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾:
上次我问的问题,具体的说:我已建一名为DB1的数据库,并
建一TB1的表,其中PIC1列为IMAG数据类型,现要将c:/lyf/1.gif
图型文件加入其中。各位上次的程序我已拜读,有两个疑问:
1。程序是用什么语言编的,在那里执行?
2。能否在SQL Enterprise或Transact-SQL编程实现
3。用SQL 提供的WRITETEXT能否实现。
烦请各位细细道来。我将不惜仅有的分并万分感谢!
 
1. delphi
2. yes, but hard.
3. yes, hard.
 
1. delphi
2. yes, but hard.
3. yes, hard.
btw, suggest using text field instead of image type.
 
只有位图可以用Image字段来存,
你的图片是*.gif,要用Text字段来存。
1、delphi,VB,PB,Asp........
2、用Transact-SQL可以实现。
3、不知道。
 
1. delphi
2. yes, not so hard, write such sql like:
insert into table (imagefield) value ('0xac0b15ca......' )
0x->indicate following string is combined with hex bytes,
ac->hex value of 1 byte
3. yes, a little hard. u can use ms-sql's dbapi.
 
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" ,
再连接数据库取出图形,在加以显示。

 
请问KYO:
在你的程序----
“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等工具获得。”中如下语句:
”0x624fd543fd….. 为图形的十六进制数据,可以通过
C 、Java等工具获得”我不是很懂,能否解释一下。还有
如果我想将磁盘上的图象文件保存在表的IMAGE列中,非得
经过以上的操作吗?有没有其他办法。
 
呵呵, 就是图象文件的字节码的16进制串, 前面加上0x.

以前答案有其他的方法, 看看吧:-)
 
cytown:
以前的答案我已看过,还是不懂,你能不能近可能详细地给我解答,并E-MAIL给我
E-MAIL:LXQ2000_2000@YAHOO.COM.CN
THANKS!
 
多人接受答案了。
 
后退
顶部