"Long binary data" in Access db

J

Jerry

I have an off-the-shelf app that uses an Access database as its
backend. One of the tables contains a field with an "OLE Object"
datatype. I'm writing some reports against this database, and I
believe this field contains data I need. When I view the table in
datasheet view, all I can see in this field is the string "Long
binary data".

So, I've got the problem of needing to extract data from this
field, but I don't know what format the data is in, or how the app
inserts data to begin with. If I can extract the binary data
intact, I may be able to pick it apart and find what I need. I'm
looking for a solution that lets me get at the data for the whole
table, so an export of the whole table including the binary data
would be fine.

I'm not a VB or ASP coder, but if code is needed for this I can
probably copy code samples and make simple modifications to suit my
task. Is there any hope of extracting this data?
 
S

Stephen Lebans

It depends whether the App inserted the data as an OLE object or simply
as data in some format.

Create a form bound to this table. Add a BOUND Object Frame control
bound to the OLE field in question.

Now open the form in Form view. If you can see the data and interact
with it then you have an OLE object.
Otherwise you just have binary data in an unknow format. Perhaps it is
simply an actual copy of a file, say a JPG image, copied in its
entirety. In this case you would simply save off the field data to a
temp disk file. As long as you know the proper file extension for this
data your issue is solved.

FInally, it could simply be a blob of private data used by the App in an
unknow format. Heres some code to copy the contents of the current
record displayed in a Bound Object Frame control to a disk file. If this
temp file contains Text only then you can view it in Wordpad etc. If it
is a mixture of data types then you will need a HEX editor to view the
data. There are many freeware/shareware HEX editors on the Web.

Just add a CommandButton control to the form you created as per the
above instructions.

Private Sub cmdSave_Click()
On Error GoTo Err_cmdSave_Click


Dim a() As Byte
Dim lTemp As Long
Dim sl As String


lTemp = LenB(Me.olePicture.Value)
ReDim a(0 To lTemp) ' should be -1


' Copy the contents of the OLE field to our byte array
a = Me.olePicture.Value


sl = "OLEfieldTest" & ".dat"
Open sl For Binary Access Write As #1
Put #1, , a
Close #1


Exit_cmdSave_Click:
Exit Sub


Err_cmdSave_Click:
MsgBox Err.Description
Resume Exit_cmdSave_Click


End Sub




--

HTH
Stephen Lebans
http://www.lebans.com
Access Code, Tips and Tricks
Please respond only to the newsgroups so everyone can benefit.
 
J

John Nurick

Hi Jerry,

Start by creating a form with a BoundObjectFrame bound to the OLE field.
This will usually let you see what the fields contain (typically in an
Access database they will contain something like an Excel workbook, an
image, or other application data, packaged with OLE header information
that often includes a preview image). If that's the case, the simplest
way to access the data within the object is to automate the
BoundObjectFrame; see e.g.:

ACC: How to Save a Copy of an Embedded MS Word Document
http://support.microsoft.com/id=?132003

ACC: Programmatically Link or Embed an Object in a Form (95/97)
http://support.microsoft.com/id=?158929
This article shows you how to programmatically link or embed an object
in an unbound object frame on a form by using the object frame
properties in Microsoft Access.

ACC2000: How to Embed a Bitmap Object in a Report at Run Time
http://support.microsoft.com/id=?198463
This article shows you how to use code to embed a bitmap image in a
report at run time. The example uses an image control instead of an OLE
object frame to store the bitmap. You can use Visual Basic for
Applications code to embed an OLE object into a...

ACC2000: How to Programmatically Link or Embed an Object on a Form
http://support.microsoft.com/id=?209990
This article shows you how to programmatically link or embed an object
in an unbound object frame on a form by using the object frame
properties in Microsoft Access.

How to embed a bitmap object in a report at run time in Access 2002
http://support.microsoft.com/id=?286459 - Explains how to use VBA code
to embed an OLE object into a control on a form at run time. You need to
se the Enabled property of the control to Yes and the Locked property to
No. In a report, you can embed bitmaps in an image control.

ACC2000: How to Embed a Bitmap Object in a Report at Run Time
http://support.microsoft.com/id=?198463
This article shows you how to use code to embed a bitmap image in a
report at run time. The example uses an image control instead of an OLE
object frame to store the bitmap. You can use Visual Basic for
Applications code to embed an OLE object into a…
 
P

Peter

Thanks, Stephen. That helps tremendously, and I think I'm on the
right track. I created the form as you suggested, but I can't see
the data. This suggests (as I suspected) that the data is probably
in some proprietary format. That's fine, if I can still get at it.
I have a good hex editor ready to pick this apart.

I tried adding the CommandButton control with the code you
graciously offered, but I get an error: "Compile error: Method or
data member not found" occurs on the line "lTemp = LenB
(Me.olePicture.Value)" (specifically, the debugger highlights the
".olePicture" bit). I assume this means I don't have some library
loaded, or something like that. Do you know how I can resolve
this?
 
P

Peter

Oops, sorry if that looks confusing - I'm the OP, but I'm borrowing
a neighbor's machine! :)
 
S

Stephen Lebans

You need to Substitute the name of your actual Bound Object Frame.
Me.olePicture.Value
to
Me.The NameOfYourBoundObjectFrameControl.Value

--

HTH
Stephen Lebans
http://www.lebans.com
Access Code, Tips and Tricks
Please respond only to the newsgroups so everyone can benefit.
 
J

Jerry

Sorry to be a dunce, but now I get the same error, but highlighting
the ".Value" part of the line. Is there a substitution I need for
that too?
 
J

Jerry

Scratch that, I figured it out. (I had substituted the name of the
command button, not the bound object frame.) This works, and it's
enough to let me start parsing through the data one record at a
time. Next I'll need to modify this to dump a bunch of records at
once, but I'll work on that as an exercise in VB coding (which I
sorely need). Thanks again for the help!
 
G

Guest

The way the data is stored is determined by that OLE Object. You could try to
reverse engineer the format. Another way is perhaps trying to instantiate the
object, and use the interfaces it supports.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top