如何使用 RDO 和 ADO 对象的 GetChunk 和 AppendChunk 方法

简介: 如何使用 RDO 和 ADO 对象的 GetChunk 和 AppendChunk 方法察看本文应用于的产品注意:这篇文章是由无人工介入的自动的机器翻译系统翻译完成。这些文章是微软为不懂英语的用户提供的, 以使他们能够理解这些文章的内容。

如何使用 RDO 和 ADO 对象的 GetChunk 和 AppendChunk 方法
察看本文应用于的产品
注意:这篇文章是由无人工介入的自动的机器翻译系统翻译完成。这些文章是微软为不懂英语的用户提供的, 以使他们能够理解这些文章的内容。微软不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的使用所引起的任何直接的, 或间接的可能的问题负责。
文章编号 : 153238
最后修改 : 2004年7月13日
修订 : 1.0
概要
本文介绍如何使用 GetChunk 和 AppendChunk 方法的 RDO 和 ADO 列对象。 包含是有关如何实现此行为的工作示例代码。

GetChunk 和 AppendChunk 方法使用 LongVarChar 和 LongVarBinary 列类型, 称为 TEXT 和 IMAGE 列, MicrosoftSQLServer 中。 使用列  .Type 属性返回常量 rdLongVarChar 或 rdLongVarBinary, 或使用  .ChunkRequired 属性来确定是否需要用以访问列 AppendChunk Get/Setmethods@@ 确定 RDO, 中这些列类型。 每个这些列类型通常称为二进制大对象 (BLOB), 因此术语 BLOB 将用于本文其余部分。

下面是一些有关使用 RDO BLOB 建议:
• SQL 表中使用 BLOB 列将导致性能下降您服务器上并在应用程序代码, 可避免添加一个额外的复杂性层。 如果要存储文件如画笔 (.bmp)、 Microsoft Word .doc) 或只文本 (.txt) 文件, 则效率将这些文件存储在文件系统比表中。 要做到这通过 UNC 路径对文件存储在列的表, 然后让 VisualBasic 代码读取路径并适当处理文件。  
• 选择包含 BLOB 列, 结果集时应该将 BLOB 列在选择列表末尾。 如果您通常使用选择从表 " 语法, 应更改此处 " Select char1, text1, image1 从表以明确引用列并将 BLOB 列末尾 " * "。  
• 编辑使用 AppendChunk 方法, BLOB 列时您应您结果集中选择至少一个其他编辑非 BLOB 列并编辑非 BLOB 列以及 BLOB 列。 如果您不要编辑非 BLOB 列, RDO 将不引发错误但没有数据可能会保存回基表。  
• 无法绑由于 rdoParameter 对象上 AppendChunk 方法无效, BLOB 值定到参数标记。 如果要将 BLOB 作为输入参数传递到存储过程, 将需要利用 ODBC 柄从 RDO 来通过 ODBCAPI 调用处理此。 幸好, 能够这样做将实现所有未来版本的 RDO 以下版本 1.0 中 x。  
• 如果您尝试在 LongVarBinary 列, 中所存储图片控件显示位图请记住, VisualBasic 中图片控件没有通过 Visual Basic Applications (VBA) 代码位数流中采取的功能。 要将图片置于图片控件通过代码, 代码, 通过获取回掉的图片控件位或唯一方法是: 使用磁盘上文件。 还可使用 RDC 并将图片框绑定到 BLOB 列。 这适用于读取 (显示图片), 但更新是由于对 VisualBasic 绑定经理中问题稳定 Visual Basic 4.0 中。 要执行更新, 代码, RDC 而请使用。  
与 ODBC 游标库, 它并不能够从存储过程返回结果集上使用 GetChunk 或 AppendChunk 方法。 这是因为 BLOB 数据不是通过与其余部分 resultset 管道。 RDO 须回到, 列上使用 SQLGetData 或 SQLPutData ODBC AP 函数与 RDO GetChunk 或 AppendChunk 方法要求它时。 当存储过程创建结果集在结果集中, RDO 可以使用数据但它无法回到基表和列, 是所有它知道 SQL 语句是东西执行 SQLGetData / SQLP tData 是返回给应用, 喜欢 " { 调用 myproc(...) } ", 有是游标库来知道如何不足没有基表或列表示有索取 BLOB 数据没有办法。

与服务器端游标, 它也可以到达您 BLOB 数据。 服务器端游标知道内容的存储过程并可因此获取基表上。 是这限制是您无法创建服务器端游标基于它 (SQLServer 限制), 中具有除了一个单个选择语句任何存储过程因此是相当限制和 doubtful 您将能够作为主方法使用因此是相当限制和 doubtful 您将能够作为主方法使用此。

用户要更新其 BLOB 列事实要求他们暴露其基表并创建通过标准选择语句从该基表游标。 即使您已编码直接向 ODBC (没有一个 RDO 事情), 以及 dbLibary (专用 SQLServer API) 这是 true。 如果您使用 Jet, 不能更新游标因为它们总是成为只读根本基于存储过程。
回到顶端

更多信息
以下示例分为三个单独过程, Command 1 _ Click、 ColumnToFile 和 FileToColumn。 ColumnToFile 和 FileToColumn 是两个独立的过程, 您应该能够将直接粘贴到代码如果您是将 BLOB 数据来回移动到磁盘上文件表中。 每个过程接受参数, 可由应用程序提供。 Command 1 _ Click 包含示例代码与数据库建立连接, 如果不存在, 调用 ColumnToFile 和 FileToColumn 过程带有正确参数创建 CHUNKTABLE 表。
1. VisualBasic 中启动新项目。 默认情况下创建 Form 1。  
2. 向 Form 1 添加一个 Command 按钮, Command。  
3. 以下代码粘贴到 Form 1 的 GeneralDeclarations 部分:
  Private Sub Command1_Click()
    MousePointer = vbHourglass
    Dim cn As rdoConnection
    Dim rs As rdoResultset, TempRs As rdoResultset
    Dim cnstr As String, sqlstr As String
    cnstr = "Driver={SQLServer};Server=myserver;Database=pubs;Uid=sa;Pwd="
    sqlstr = "Select int1, char1, text1, image1 from chunktable"

    rdoEnvironments(0).CursorDriver = rdUseServer
    Set cn = rdoEnvironments(0).OpenConnection( _
      "", rdDriverNoPrompt, False, cnstr)
    On Error Resume Next
    If cn.rdoTables("chunktable").Updatable Then
      'table exists
    End If
    If Err > 0 Then
      On Error GoTo 0
      Debug.Print "Creating new table..."
      cn.Execute "Create table chunktable(int1 int identity, " & _
                 "char1 char(30), text1 text, image1 image)"
      cn.Execute "create unique index int1index on chunktable(int1)"
    End If
    On Error GoTo 0
    Set rs = cn.OpenResultset(Name:=sqlstr, _
      Type:=rdOpenDynamic, _
      LockType:=rdConcurRowver)
    If rs.EOF Then
      rs.AddNew
      rs("char1") = Now
      rs.Update
      rs.Requery
    End If
    Dim currec As Integer
    currec = rs("int1")
    rs.Edit
    FileToColumn rs.rdoColumns("text1"), App.Path & "\README.TXT", 102400
    FileToColumn rs.rdoColumns("image1"), App.Path & "\SETUP.BMP", 102400
    rs("char1") = Now  'need to update at least one non-BLOB column
    rs.Update

    'this code gets the columnsize of each column
    Dim text1_len As Long, image1_len As Long
    If rs("text1").ColumnSize = -1 Then
      'the function Datalength is SQL Server specific
      'so you may have to change this for your database
      sqlstr = "Select Datalength(text1) As text1_len, " & _
               "Datalength(image1) As image1_len from chunktable " & _
               "Where int1=" & currec
      Set TempRs = cn.OpenResultset(Name:=sqlstr, _
        Type:=rdOpenStatic, _
        LockType:=rdConcurReadOnly)
      text1_len = TempRs("text1_len")
      image1_len = TempRs("image1_len")
      TempRs.Close
    Else
      text1_len = rs("text1").ColumnSize
      image1_len = rs("image1").ColumnSize
    End If

    ColumnToFile rs.rdoColumns("text1"), App.Path & "\text1.txt",  _
      102400, text1_len
    ColumnToFile rs.rdoColumns("image1"), App.Path & "\image1.bmp",  _
      102400, image1_len
    MousePointer = vbNormal
 End Sub

  Sub ColumnToFile(Col As rdoColumn, ByVal DiskFile As String, _
    BlockSize As Long, ColSize As Long)
    Dim NumBlocks As Integer
    Dim LeftOver As Long
    Dim byteData() As Byte   'Byte array for LongVarBinary
    Dim strData As String    'String for LongVarChar
    Dim DestFileNum As Integer, i As Integer

    ' Remove any existing destination file
    If Len(Dir$(DiskFile)) > 0 Then
      Kill DiskFile
    End If

    DestFileNum = FreeFile
    Open DiskFile For Binary As DestFileNum

    NumBlocks = ColSize \ BlockSize
    LeftOver = ColSize Mod BlockSize
    Select Case Col.Type
      Case rdTypeLONGVARBINARY
        byteData() = Col.GetChunk(LeftOver)
        Put DestFileNum, , byteData()
        For i = 1 To NumBlocks
          byteData() = Col.GetChunk(BlockSize)
          Put DestFileNum, , byteData()
        Next i
      Case rdTypeLONGVARCHAR
        For i = 1 To NumBlocks
          strData = String(BlockSize, 32)
          strData = Col.GetChunk(BlockSize)
          Put DestFileNum, , strData
        Next i
        strData = String(LeftOver, 32)
        strData = Col.GetChunk(LeftOver)
        Put DestFileNum, , strData
      Case Else
        MsgBox "Not a ChunkRequired column."
    End Select
    Close DestFileNum

  End Sub

  Sub FileToColumn(Col As rdoColumn, DiskFile As String, _
  BlockSize As Long)
    'moves a disk file to a ChunkRequired column in the table
    'A Byte array is used to avoid a UNICODE string
    Dim byteData() As Byte   'Byte array for LongVarBinary
    Dim strData As String    'String for LongVarChar
    Dim NumBlocks As Integer
    Dim filelength As Long
    Dim LeftOver As Long
    Dim SourceFile As Integer
    Dim i As Integer
    SourceFile = FreeFile
    Open DiskFile For Binary Access Read As SourceFile
    filelength = LOF(SourceFile) ' Get the length of the file
    If filelength = 0 Then
      Close SourceFile
      MsgBox DiskFile & " empty or not found."
    Else
      ' Calculate number of blocks to read and left over bytes
      NumBlocks = filelength \ BlockSize
      LeftOver = filelength Mod BlockSize
      Col.AppendChunk Null

      Select Case Col.Type
        Case rdTypeLONGVARCHAR
          ' Read the 'left over' amount of LONGVARCHAR data
          strData = String(LeftOver, " ")
          Get SourceFile, , strData
          Col.AppendChunk strData
          strData = String(BlockSize, " ")
          For i = 1 To NumBlocks
            Get SourceFile, , strData
            Col.AppendChunk strData
          Next i
          Close SourceFile
        Case rdTypeLONGVARBINARY
          ' Read the left over amount of LONGVARBINARY data
          ReDim byteData(0, LeftOver)
          Get SourceFile, , byteData()
          Col.AppendChunk byteData()
          ReDim byteData(0, BlockSize)
          For i = 1 To NumBlocks
            Get SourceFile, , byteData()
            Col.AppendChunk byteData()
          Next i
          Close SourceFile
        Case Else
          MsgBox "not a chunkrequired column."
      End Select
    End If

  End Sub
     
 
4. 需要更改才能连接到数据库服务器、 数据库、, UID 和 PWD 值 cnstr 变量中。  
5. Command 1 _ Click 事件中代码希望查找当前目录中名为 README.TXT 和 SETUP.BMP 两文件。 Windows 目录中通常找到这些文件。 可将这些文件移到当前目录或更改路径以匹配另一个位图和文本文件在硬盘上。  
6. 按 F 5 键以启动程序。  
7. 单击 Command 按钮来执行 RDO 代码。 代码将自动创建一个名为 chunktable, 如果它不尚未存在, 和文本和位图文件移动到和掉的 BLOB 列表。  
有关 ADO 对象, 请单击以下链接:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/off2000/html/acmthAppendChunkADOX.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/off2000/html/acmthAppendChunkADOX.asp)
回到顶端

参考
VisualBasic 和 SQLServer, MicrosoftPress hitchhiker 的指南。 55615 906 ISBN: 1 - - - 4。

有关其他信息, 请参见以下 Microsoft 知识库文章:

152715 RDO 1.0b 立即释放可用:
回到顶端


--------------------------------------------------------------------------------

这篇文章中的信息适用于:
• Microsoft Visual Basic 6.0 Learning Edition
• Microsoft Visual Basic 6.0 Professional Edition
• Microsoft Visual Basic 6.0 Enterprise Edition
• Microsoft Visual Basic 5.0 Enterprise Edition
• Microsoft Visual Basic 4.0 32-Bit Enterprise Edition

回到顶端

目录
相关文章
|
27天前
|
人工智能 JSON API
手把手教你配置 AI 调度官,实现任务自动化流转
本文详解2026年企业级AI调度官(AI Orchestrator)实战配置:以多智能体协同为核心,构建“意图理解—动态规划—智能分发”闭环系统,覆盖四层架构、任务拆解、反思审计与跨境电商落地场景,助你实现真正自动化业务流转。(239字)
122 9
|
2月前
|
机器学习/深度学习 人工智能 运维
别只盯着 CPU 爆了!一篇文章带你看懂:从指标到根因的 AIOps 自动化故障定位流水线
别只盯着 CPU 爆了!一篇文章带你看懂:从指标到根因的 AIOps 自动化故障定位流水线
405 15
|
10月前
|
人工智能 自然语言处理 Cloud Native
【攻略】Bolt.diy 云端部署与应用实战:快速生成你的创意助手
随着AI应用从实验室走向大众,构建低门槛、高效率的AI助手平台成为开发者关注焦点。阿里云推出的Bolt.diy解决方案,开源灵活且部署快捷,支持函数计算FC与百炼大模型服务集成,大幅降低全栈AI应用开发难度。本文分享了实际部署Bolt.diy的全过程,并通过创建个人AI项目助理演示其强大功能。无论是生成项目计划、技术文档,还是搭建工具页面,Bolt.diy都能助力开发者快速实现创意,提升效率。文章还探讨了使用中的小问题及优化建议,适合对AI开发感兴趣的读者体验尝试。
299 10
|
10月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于FPGA的SNN脉冲神经网络之LIF神经元verilog实现,包含testbench
本项目展示了 LIF(Leaky Integrate-and-Fire)神经元算法的实现与应用,含无水印运行效果预览。基于 Vivado2019.2 开发,完整代码配有中文注释及操作视频。LIF 模型模拟生物神经元特性,通过积分输入信号并判断膜电位是否达阈值产生脉冲,相较于 Hodgkin-Huxley 模型更简化,适合大规模神经网络模拟。核心程序片段示例,助您快速上手。
|
人工智能 资源调度 监控
破解人才管理难题,人力资源驾驶舱助力企业效能升级
易知微推出的企业人力资源管理驾驶舱,整合多源数据,实现数据互通与智能分析,提升决策效率。通过3D饼图等可视化形式,覆盖员工招聘、人才盘点、绩效薪酬管理等场景,简化中小企业日常事务,提高管理效率,助力企业实现数字化转型与管理升级。点击链接体验:[企业人力资源管理驾驶舱](https://easyv.cloud/m/market/387.html?t=gzh)。
破解人才管理难题,人力资源驾驶舱助力企业效能升级
|
Web App开发 前端开发 测试技术
构建响应式设计的七个最佳实践
本文介绍了构建响应式设计的七个最佳实践,包括使用流体布局、媒体查询、灵活的图片和媒体、响应式框架、可伸缩的字体、测试与优化及渐进增强和优雅降级,帮助开发者创建适应多设备的网站。
|
安全 区块链 数据库
|
前端开发 JavaScript
前端 JS 经典:下载的流式传输
前端 JS 经典:下载的流式传输
291 1
|
数据可视化 算法 Java
了解go语言运行时工具的作用
【5月更文挑战第16天】本文简介`runtime`库提供系统调用包装、执行跟踪、内存分配统计、运行时指标和剖析支持。`internal/syscall`封装系统调用,保证uintptr参数有效。`trace`用于执行跟踪,捕获各种事件,如goroutine活动、系统调用和GC事件。`ReadMemStats`提供内存分配器统计。`metrics`接口访问运行时定义的度量,包括CPU使用、GC和内存信息。`coverage`支持代码覆盖率分析,`cgo`处理C语言交互,`pprof`提供性能剖析工具集成。这些功能帮助优化和理解Go程序的运行行为。
269 6