使用三层结构,如何从存取bolb型的字段的好办法(后台使用interbase6.0)????

zbwsh 2001-09-01 05:11:14
...全文
271 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
猛禽 2001-10-26
  • 打赏
  • 举报
回复
DELPHI三层取BLOB肯定没有问题,我一直在用,不过我是用SQL7,但应该跟数据库无关。
hantao 2001-10-26
  • 打赏
  • 举报
回复
xx
nizhigang2000 2001-10-26
  • 打赏
  • 举报
回复
up
zbwsh 2001-10-21
  • 打赏
  • 举报
回复
up
zbwsh 2001-10-20
  • 打赏
  • 举报
回复
up
猛禽 2001-10-14
  • 打赏
  • 举报
回复
应该不是BLOB的问题,是TDBImage的问题,它在存入BLOB前会在前面加8个字节的数据
zbwsh 2001-10-13
  • 打赏
  • 举报
回复
我想问DELPHI下使用三层结构的方法,
另外好像interbase的bolb字段不一般,无法使用TDBImage控件
chenjbjbjb 2001-10-13
  • 打赏
  • 举报
回复
1 BLOB数据的保存

BLOB类型的数据无法用普通的方式进行存储,我们需要使用AppendChunk函数,AppendChunk包含在Field
对象中,原型如下:HRESULT AppendChunk (const _variant_t & Data );从函数原型中可以看到关键的问题是我们需把二进制数据赋值给VARIANT类型的变量,

2 BLOB数据的读取

对应于保存数据时我们所使用的AppendChunk函数,读取数据应该使用GetChunk函数,GetChunk的原型如下:_variant_t GetChunk (long Length );给出数据的长度后GetChunk将返回包含数据的VARIANT类型变量,然后我们可以利用SafeArrayAccessData函数得到VARIANT变量中指向数据的char *类型的指针,以方便我们的处理。

Public Sub AppendChunkX()
Dim cnn1 As ADODB.Connection
Dim rstPubInfo As ADODB.Recordset
Dim strCnn As String
Dim strPubID As String
Dim strPRInfo As String
Dim lngOffset As Long
Dim lngLogoSize As Long
Dim varLogo As Variant
Dim varChunk As Variant
Const conChunkSize = 100
' 打开连接
Set cnn1 = New ADODB.Connection
strCnn = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
cnn1.Open strCnn
' 打开 pub_info 表。
Set rstPubInfo = New ADODB.Recordset
rstPubInfo.CursorType = adOpenKeyset
rstPubInfo.LockType = adLockOptimistic
rstPubInfo.Open "pub_info", cnn1, , , adCmdTable
' 提示复制徽标。
strMsg = "Available logos are : " & vbCr & vbCr
Do While Not rstPubInfo.EOF
strMsg = strMsg & rstPubInfo!pub_id & vbCr & _
Left(rstPubInfo!pr_info, InStr(rstPubInfo!pr_info, ",") - 1) & _
vbCr & vbCr
rstPubInfo.MoveNext
Loop
strMsg = strMsg & "Enter the ID of a logo to copy:"
strPubID = InputBox(strMsg)
' 将徽标复制到大块中的变量。
rstPubInfo.Filter = "pub_id = '" & strPubID & "'"
lngLogoSize = rstPubInfo!logo.ActualSize
Do While lngOffset < lngLogoSize
varChunk = rstPubInfo!logo.GetChunk(conChunkSize)
varLogo = varLogo & varChunk
lngOffset = lngOffset + conChunkSize
Loop
' 从用户得到数据。
strPubID = Trim(InputBox("Enter a new pub ID:"))
strPRInfo = Trim(InputBox("Enter descriptive text:"))
' 添加新记录,将徽标复制到大块中。
rstPubInfo.AddNew
rstPubInfo!pub_id = strPubID
rstPubInfo!pr_info = strPRInfo
lngOffset = 0 ' 重置位移。
Do While lngOffset < lngLogoSize
varChunk = LeftB(RightB(varLogo, lngLogoSize - lngOffset), _
conChunkSize)
rstPubInfo!logo.AppendChunk varChunk
lngOffset = lngOffset + conChunkSize
Loop
rstPubInfo.Update
' 显示新添加的数据。
MsgBox "New record: " & rstPubInfo!pub_id & vbCr & _
"Description: " & rstPubInfo!pr_info & vbCr & _
"Logo size: " & rstPubInfo!logo.ActualSize
' 删除新记录,因为这只是演示。
rstPubInfo.Requery
cnn1.Execute "DELETE FROM pub_info " & _
"WHERE pub_id = '" & strPubID & "'"
rstPubInfo.Close
cnn1.Close

End Sub
猛禽 2001-10-13
  • 打赏
  • 举报
回复
你是不是其它什么地方不对,比如设置了不下载BLOB字段的选项,我一直这样用都没问题
zbwsh 2001-10-11
  • 打赏
  • 举报
回复
up
zbwsh 2001-10-09
  • 打赏
  • 举报
回复
up
zbwsh 2001-10-09
  • 打赏
  • 举报
回复
cobi(小新国际) :
有用clientdataset1.applyupdates的但无效,
给点帮助吧!
cobi 2001-10-09
  • 打赏
  • 举报
回复
你提交的时候有没有applyupdates
zbwsh 2001-10-09
  • 打赏
  • 举报
回复
help!!!!!!!!!
Tense 2001-09-04
  • 打赏
  • 举报
回复
up
zbwsh 2001-09-04
  • 打赏
  • 举报
回复
希望各位高手发表意见
zbwsh 2001-09-03
  • 打赏
  • 举报
回复
我使用tclientdataset,当向数据库提交TBlobField类型的字段时,程序没有报错 ,
但数据库中,没有保存我提交的数据,数据库使用interbase,请问什么原因??
如可以,望给个例子。
BaldZhang 2001-09-02
  • 打赏
  • 举报
回复

跟做C/S结构没什么两样啊,

(ClientDataSet1.FieldByName('Image') as TBlobField).SaveToStream(...)

zbwsh 2001-09-02
  • 打赏
  • 举报
回复
help me
zbwsh 2001-09-01
  • 打赏
  • 举报
回复
要求:简单,明了,快速,不使用数据库控件.
希望各位大侠,高手,不吝赐教!!!!!!!!!!!!

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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