Re: Getting BLOB fields

Yuancai Ye <[email protected]> Fri, 10 May 2002 10:35:07 -0700
Newsgroups gmane.comp.windows.devel.oledb.devel
Message-ID <[email protected]>
Hi,
   You use a parameterized statement to retrieve a
rowset. If so, two accessors are involved at least. I
usually use OleDBPro instead of ATL consumer
templates. If you like, see the samples BLOBs and
AOTBLOB inside the OleDBPro module.

Yuancai (Charlie) Ye
See 30 real well-tested advanced OLEDB samples
Use of free SocketPro for creating super client and
server application with numerous samples
www.udaparts.com

--- Michal Blazejczyk
<[email protected]> wrote:
> Hi,
>
> This is not the case since we retrieve only one
> record at a time. We use
> the following command in our accessor: "SELECT Data
> FROM Session WHERE
> (ID=?)". Of course, the accessor also contains a
> LONG m_ID field
> mapped properly.
>
> Regards
>
>         Michal
>
>
> > -----Original Message-----
> > From: Yuancai Ye [mailto:[email protected]]
> > Sent: Friday, May 10, 2002 13:15
> > To: [email protected]
> > Subject: Re: [OLEDB_DEV] Getting BLOB fields
> >
> >
> > Hi,
> >    Did you release the BLOB object after
> retrieving a
> > BLOB before moving to the next record?
> >
> > Yuancai (Charlie) Ye
> > See 30 real well-tested advanced OLEDB samples
> > Use of free SocketPro for creating super client
> and
> > server application with numerous samples
> > www.udaparts.com
> >
> > --- Michal Blazejczyk
> > <[email protected]> wrote:
> > > Hello everyone,
> > >
> > > We have a problem with our database-access code
> that
> > > uses ATL.
> > >
> > > We have a BLOB field in a SQL Server database.
> We
> > > access it using a
> > > specialized accessor class.
> > >
> > > Later on the code look like this:
> > >         CCommand<CAccessor<COurBLOBAccessor> >
> > > BLOBTab;
> > >         BLOBTab.ClearRecord();          // set
> all
> > > fields to 0
> > >         BLOBTab.Open(Session);
> > >         BLOBTab.MoveFirst();
> > >         // use BLOBTab.m_Data to get the BLOB
> data
> > >
> > > The session object is valid, the accessor gets
> bound
> > > properly, Open and
> > > MoveFirst return S_OK. In a normal case, the
> call to
> > > MoveFirst (more
> > > specifically, a call to IRowset::GetData) sets
> > > BLOBTab.m_Data to a valid
> > > ISequentialStream object.
> > >
> > > However, in one case BLOBTab.m_Data isn't set in
> > > IRowset::GetData and is
> > > left NULL. Both IRowset::GetData and MoveFirst
> > > return S_OK but
> > > retrieving the data is impossible.
> > >
> > > What can be the problem?
> > >
> > >         Michal Blazejczyk
> > >
> > > This is how the accessor class looks like:
> > >
> > > class COurBLOBAccessor
> > > {
> > > public:
> > >         ISequentialStream* m_Data;
> > >         ULONG m_Data_Length;
> > >         ULONG m_Data_Status;
> > >
> > > BEGIN_COLUMN_MAP(CSISessionBLOBAccessor)
> > >         BLOB_ENTRY_LENGTH_STATUS(1,
> > > IID_ISequentialStream, STGM_READ,
> > > m_Data, m_Data_Length, m_Data_Status)
> > >         // BLOB_ENTRY_LENGTH_STATUS is our own
> > > macro.
> > >         // It seems to be working fine.
> > > END_COLUMN_MAP()
> > >
> > >         // .... Other stuff
> > > };
> > >
> > > You can read messages from the OLEDB_DEV
> archive,
> > > unsubscribe from OLEDB_DEV,
> > > or subscribe to other DevelopMentor lists at
> > http://discuss.develop.com.
> >
> >
> > __________________________________________________
> > Do You Yahoo!?
> > Yahoo! Shopping - Mother's Day is May 12th!
> > http://shopping.yahoo.com
> >
> > You can read messages from the OLEDB_DEV archive,
> unsubscribe
> > from OLEDB_DEV,
> > or subscribe to other DevelopMentor lists at
> http://discuss.develop.com.
>
> You can read messages from the OLEDB_DEV archive,
> unsubscribe from OLEDB_DEV,
> or subscribe to other DevelopMentor lists at
http://discuss.develop.com.


__________________________________________________
Do You Yahoo!?
Yahoo! Shopping - Mother's Day is May 12th!
http://shopping.yahoo.com

You can read messages from the OLEDB_DEV archive, unsubscribe from OLEDB_DEV,
or subscribe to other DevelopMentor lists at http://discuss.develop.com.