Storing "Paint Brush" images in a Access DB

This example demonstrates how to store a "Paint Brush" image in a Access DB. In my code I have created a CDaoRecordset derived class for handling and reading the binary data. Class Wizard binds a CLongBinary to the Ole Object field when creating the recordset. CLongBinary is difficult to manage, so in the recordset, that is to receive the binary data, I bind a CByteArray variable to the field.

Example :

::DoFieldExchange(CDaoFieldExchange* pFX) 

DFX_LongBinary(pFX, _T("[Images]"), m_Images);


DFX_Binary(pFX, _T("[Images]"), m_Images); 

In CDAORecordSet the public member "CLongBinary m_Images" become "CByteArray m_Images"

The function code is :
BOOL CBLOBSDlg::ReadFromBLOB(CByteArray & DBArray) 
  CByteArray Array; 
  Array.Copy( DBArray); 
  // the header of BLOB is OLE stuff like "Paint Brush Application" .... ecc.. 
  // the len is 78 byte ( I do not know for other headers ) 
  int HeaderLen =   78 + sizeof(BITMAPFILEHEADER); 
  Array.RemoveAt( 0, HeaderLen ); // I cut all Headers 
  // some BMP information 
  BITMAPINFO &bmInfo = *(LPBITMAPINFO)Array.GetData() ; 
  // If bmiHeader.biClrUsed is zero we have to infer the number 
  // of colors from the number of bits used to specify it. 
  int nColors = bmiHeader.biClrUsed ? bmiHeader.biClrUsed : 1 << bmiHeader.biBitCount; 

  LPVOID lpDIBBits; 
  if( bmInfo.bmiHeader.biBitCount > 8 ) 
      lpDIBBits = (LPVOID)((LPDWORD)(bmInfo.bmiColors + bmInfo.bmiHeader.biClrUsed) + 
                        ((bmInfo.bmiHeader.biCompression == BI_BITFIELDS) ? 3 : 0)); 
      lpDIBBits = (LPVOID)(bmInfo.bmiColors + nColors); 

  CClientDC dc(NULL); 
  HBITMAP hBmp = CreateDIBitmap( dc.m_hDC,   // handle to device context 
                                 &bmiHeader,     // pointer to bitmap size and format data 
                                 CBM_INIT,       // initialization flag 
                                 lpDIBBits,      // pointer to initialization data 
                                 &bmInfo,        // pointer to bitmap color-format data 
                                 DIB_RGB_COLORS);                // color-data usage 
  OleBmp.Attach( hBmp ); 

  Array.RemoveAll(); //Relese Memory 

  return TRUE; 


1: In the example the DB path in "CString CDaoRecorset::GetDefaultDBName()" must be changed!!

2: This code is for VC++ 5

Download source - 36KB

Update regarding storing a BLOB in an Access DB:
Download Project including saving BLOB - 60 KB

Date updated : 12 Feb. 1999


  • tee shirt diesel homme tee shirt perso

    Posted by efmzboyt on 03/19/2013 08:10am


  • tee shirt handball tee shirt dinosaure

    Posted by nnzzqzzl on 03/18/2013 05:56am


  • impression de tee shirt pas cher tee shirt creation

    Posted by miqjijyz on 03/17/2013 10:39pm


Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Anthony Christie, the Chief Marketing Officer for Level Communications, is responsible for customer experience, worldwide marketing and product management. In this informative asset, he shares his insights into why a private network connection to cloud-bases applications is the right decision for your enterprise. Download now to find out more.

  • Moving from an on-premises environment to Office 365 does not remove the need to plan for disruptions or reduce the business risk requirements for protecting email services. If anything, some risks increase with a move to the cloud. Read how to ease the transition every business faces if considering or already migrating to cloud email. This white paper discusses: Setting expectations when migrating to Office 365 Understanding the implications of relying solely on Exchange Online security Necessary archiving …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date