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

Bill Benson bensonforums at gmail.com
Thu Nov 20 13:37:32 CST 2014


Thank you David, I will keep it in the back of my mind that you have this
solution - however, I was just working on a proof of concept... that giving
files a round trip between an Access backend and disk, using only VBA, was
doable.

I think I have shown myself it is not easily done, if doable at all.

On Thu, Nov 20, 2014 at 12:43 PM, David McAfee <davidmcafee at gmail.com>
wrote:

> I'm joining in late and missed the first part of this, but I also believe
> that storing links to files is the better way to do it.
>
> I think I have an adp (or maybe even an mdb) sample that I can send you
> that might help.
>
> To  insert the attachment:
>
> 1. Grab a PK to relate it to (in one of my examples, I had to attach
> pics/pdfs to a machine ID).
> 2. Create a guid.
> 3. Copy the file to a secure place on the network (preferably unmapped) ,
> renaming it with the guid as the new name (and the old suffix).
> 4. Insert a record with a replated PK as the FK, the guid, the date/time is
> then stamped as well as the entry userID.
>
> I'm a bit tied up at the moment, but if you want I can dig it up, or make a
> new one.
>
> David McAfee
>
>
>
>
> On Thu, Nov 20, 2014 at 9:26 AM, Dan Waters <df.waters at outlook.com> wrote:
>
> > Hi Bill,
> >
> > As you mentioned, database size is a significant issue.  Also, I would
> > worry
> > about two people opening the stored file at the same time, and they both
> > want to edit the document.  This would have to be carefully tested to see
> > what happens and how you could counter any issues.
> >
> > I would also guess that the performance could be very slow - Access is
> not
> > the fastest kid on the block and a document would probably be much larger
> > than anything else.
> >
> > Overall, there is just the principle that it's best to let Windows do its
> > thing and handle files!
> >
> > If you get it working - good luck!
> > Dan
> >
> > -----Original Message-----
> > From: accessd-bounces at databaseadvisors.com
> > [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Bill Benson
> > Sent: Thursday, November 20, 2014 11:02 AM
> > To: Access Developers discussion and problem solving
> > Subject: Re: [AccessD] Insert an ADO Stream (or other) into MICROSOFT
> > ACCESS
> > OLE Object field
> >
> > Dan can you give examples of problems and / or give reasons you feel that
> > this will be difficult? Does unpacking the files from the dbms cause data
> > loss or corruption? Any more so than disk i/o, user error (I remember
> > deleting the wrong files every now and then).
> >
> > I can envision the database size limits for example, constraining how
> many
> > documents can be stored. Also, I think while the code works for sql
> server,
> > I may not find a way to get it done using ADO and an Access backend.
> > What other problems are you concerned with?
> >
> > I have tried DAO + VBA and have had no success either so far, even though
> > code samples indicate that should be productive. I have tried ADO and
> oleDB
> > field type, and that doesn't "fail" but is resulting in an empty field in
> > the backend. I am starting to wonder whether something is going on. If I
> > put
> > the path in windows explorer, the file opens fine - so I cannot imagine
> it
> > having anything to do with the path unless, having spaces within it.
> > However, I have tried both these
> >
> > rstAttachment.Fields("FileData").LoadFromFile = strPathDoc
> >
> > and
> >
> > rstAttachment.Fields("FileData").LoadFromFile = Chr(34) & strPathDoc &
> > Chr(34)
> >
> > neither of which work.
> >
> > The ADO Stream method doesn't have any problem reading to populate the
> > stream, it is after assignment to the oleDB field that I am seeing
> nothing
> > in the backend, despite that the record is added.
> >
> >
> > On Nov 19, 2014 7:36 PM, "Dan Waters" <df.waters at outlook.com> wrote:
> >
> > > Hi Bill,
> > >
> > > I've done this many times.  I do not keep the documents in the
> > > database, I just keep the path to where the file is stored.  Storing
> > > and using the file path is relatively easy.
> > >
> > > I'm going to guess that what you're trying to do is difficult, and has
> > > a potential for problems in production use.
> > >
> > > HTH,
> > > Dan
> > >
> > > -----Original Message-----
> > > From: accessd-bounces at databaseadvisors.com
> > > [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Bill Benson
> > > Sent: Wednesday, November 19, 2014 16: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
> > >
> > > --
> > > AccessD mailing list
> > > AccessD at databaseadvisors.com
> > > http://databaseadvisors.com/mailman/listinfo/accessd
> > > Website: http://www.databaseadvisors.com
> > >
> > --
> > AccessD mailing list
> > AccessD at databaseadvisors.com
> > http://databaseadvisors.com/mailman/listinfo/accessd
> > Website: http://www.databaseadvisors.com
> >
> > --
> > AccessD mailing list
> > AccessD at databaseadvisors.com
> > http://databaseadvisors.com/mailman/listinfo/accessd
> > Website: http://www.databaseadvisors.com
> >
> --
> 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