[AccessD] Insert an ADO Stream (or other) into MICROSOFT ACCESS OLE Object field

Doug Murphy dw-murphy at cox.net
Wed Nov 19 22:22:04 CST 2014


Bill,

I did this for a client who did directed that the documents would be stored
in a sql server back-end. They originally were using the document fields in
an accdb back end but it was slowwwwww, and growing rapidly. 

Following is the procedure that did the storage of a file. We use it for all
kinds of files, just need to save the name and file type extension so the
file can be rehydrated when they want to retrieve

Doug
----------------------------------------------------------------------------
-------------------------------


'---------------------------------------------------------------------------
------------
'
Public Sub subFileStorage(sPath As String, lProjID As Long, iDocumentType As
Integer)
    Dim cn As New ADODB.Connection
    Dim cnStr As String
    Dim rs As New ADODB.Recordset
    Dim sT As New ADODB.Stream
    Dim sDocName As String
     On Error GoTo subFileStorage_Error
     
     'Work with the document, get name parts and load stream
     sDocName = Mid(sPath, InStrRev(sPath, "\") + 1)
     Call subDocInfo(sDocName)
     sT.Type = adTypeBinary
     sT.Open
     sT.LoadFromFile sPath
     
     'PUT IN ACTUAL SERVER AND DATABASE NAMES.
     'Open the connection to sql server
     'cnStr = "Provider=sqloledb;Data Source=2003.local;Initial
Catalog=TestDatabase_beSQL;User Id=xxx;Password=xxxxx;"
     cnStr = "Provider=sqloledb;Data Source=2003.local;Initial
Catalog=RLProjectDatabase_beSQL;User Id=xxx;Password=xxxxx;"
     'USE A TRUSTED CONNECTION
     'cnStr = "Provider=sqloledb;Data Source=myServerAddress;Initial
Catalog=myDataBase;Integrated Security=SSPI;"
     cn.Open cnStr
     
     'Open the recordset
     rs.Open "SELECT DocumentName, DocumentExtension, DocumentTypeID,
Document, ProjectID FROM tblDocuments", cn, adOpenForwardOnly,
adLockOptimistic
     rs.AddNew
     rs.Fields("DocumentName") = sDocumentName
     rs.Fields("DocumentExtension") = sFileExtension
     rs.Fields("DocumentTypeID") = iDocumentType
     rs.Fields("ProjectID") = lProjID
     rs.Fields("Document").Value = sT.Read
     rs.Save
     
subFileStorage_Exit:
   On Error GoTo 0
   sT.Close
   rs.Close
   cn.Close
   Set sT = Nothing
   Set rs = Nothing
   Set cn = Nothing
   Exit Sub

subFileStorage_Error:

    MsgBox "Error " & Err.Number & " (" & Err.Description & " at Line Number
= " & Erl & ") in procedure subFileStorage of Module basDocumentStorage"
    Resume subFileStorage_Exit:
    Resume
End Sub
----------------------------------------------------------------------------
-------------------------------

-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Bill Benson
Sent: Wednesday, November 19, 2014 2:56 PM
To: Access Developers discussion and problem solving
Subject: [AccessD] Insert an ADO Stream (or other) into MICROSOFT ACCESS OLE
Object field

I was toying with the idea of creating a backend document management
database in MS Access. I was going to zip files and then import them into
the database table with ADO, using the ADO Stream object.

All the below code (which doesnt have the ZIPPING code - but that will be
added later) runs fine, and there is no error message. But when I check the
contents of the OLE Object field in the record, it is empty.

Which makes me quite unhappy, I wrote a lot of code and built a userform
dialog assuming this was going to work.

I think these streams used to be able to be stored in dbMemo type fields - I
am sure I had at one time been successful.

I don't think I could even try to think of how to do this with ADO using an
Attachments field instead, since I dount ADO knows what that is. In any
case, I tried making the field type attachment in Access and the code did
not run - runtime error at the assignment of the .Value.

I don't think I can get this to run using inlineSQL ("Insert into blah blah"
because I don't know what I would use for the "Values ( )" clause.

Has anyone succeeded where I am failing?

Public Sub Upload()
Dim stmFileStream As New ADODB.Stream
Dim RS As New ADODB.Recordset
Dim oConn As ADODB.Connection
Const strPath = "C:\Users\wbenson\Documents\Development\Document Database
Project\Doc1.docx"
Set oConn = MyConn 'Trust me, this connection works

With stmFileStream
    .Open
    .Type = adTypeBinary
    .LoadFromFile strPath
End With

With RS
    .ActiveConnection = oConn
    .LockType = adLockOptimistic
    .CursorType = adOpenDynamic
    .Open "SELECT * FROM Revision Where 1 = 2"
    .AddNew
    .Fields("File").Value = stmFileStream.Read
    .Fields("Path") = strPath
    .Update
    .Close
End With
stmFileStream.Close
Set stmFileStream = Nothing
Set RS = Nothing
End Sub
--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com



More information about the AccessD mailing list