AO中保存二进制大对象(BLOB)

示例代码演示如何保存一个.lyr文件,作为资料保存

//保存
Private Sub UIButtonControl1_Click()
' Get the IPersistStream for the first layer from the map
Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument

Dim pPersist As IPersistStream
Set pPersist = pMxDoc.FocusMap.Layer(0)

' Now persist the layer to the memory BLOB stream
Dim pMemoryStream As IMemoryBlobStream
Set pMemoryStream = New MemoryBlobStream

pPersist.Save pMemoryStream, False

' Finally, save the BLOB into the database
Dim pWorkspaceFactory As IWorkspaceFactory
Set pWorkspaceFactory = New AccessWorkspaceFactory

Dim pFeatureWorkspace As IFeatureWorkspace
Set pFeatureWorkspace =
pWorkspaceFactory.OpenFromFile("C:\Source\BLOB.mdb", 0)

Dim pTable As ITable
Set pTable = pFeatureWorkspace.OpenTable("MyLayers")

Dim pRow As IRow
Set pRow = pTable.CreateRow

pRow.Value(pRow.Fields.FindField("Layers")) = pMemoryStream
pRow.Store
End Sub


//读取
Private Sub UIButtonControl2_Click()
Dim pWorkspaceFactory As IWorkspaceFactory
Set pWorkspaceFactory = New AccessWorkspaceFactory

Dim pFeatureWorkspace As IFeatureWorkspace
Set pFeatureWorkspace =
pWorkspaceFactory.OpenFromFile("C:\Source\BLOB.mdb", 0)

Dim pTable As ITable
Set pTable = pFeatureWorkspace.OpenTable("MyLayers")

Dim pCursor As ICursor
Set pCursor = pTable.Search(Nothing, False)

Dim pRow As IRow
Set pRow = pCursor.NextRow

If (pRow Is Nothing) Then Exit Sub

Dim pMemoryStream As IMemoryBlobStream
Set pMemoryStream = pRow.Value(pRow.Fields.FindField("Layers"))


Dim pLayer As ILayer
Set pLayer = New FeatureLayer

Dim pPersist As IPersistStream
Set pPersist = pLayer

pPersist.Load pMemoryStream

Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument

pMxDoc.FocusMap.AddLayer pLayer
End Sub
posted @ 2009-02-13 13:22  尤文之鹤  阅读(355)  评论(0编辑  收藏  举报