Solved

Saving/Reading images in SQL7 w/ VB6

Posted on 2000-04-10
1
237 Views
Last Modified: 2010-05-02
How do I save an image that the user has dropped into an OLE control to a SQL7 database.  Also, how do I query that db and display the image in the ole control? What is the property of the OLE control that relates to the image, .data?  I am using ADO 2.1 and 3 tiers architecture.  
0
Comment
Question by:BigJimFrog
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
1 Comment
 
LVL 1

Accepted Solution

by:
scj1 earned 100 total points
ID: 2723882
I've found the answer to your problem....(and mine). Okay some of this code has been used from an answer back in 1999 which came from an example that originally used Oracle. This example connects to whatever open recordset you pass in, with the picture field name.


Method 1: SetPicture puts a picture into the database (this assumes a bitmap file - you can save your OLE image first if you want or modify the code to read the bytes from a IPictureDisp object). To save the picture use the following code:

savePicture(picture1.picture,"d:\test.bmp")

Method 2: GetPicture retrieves the picture from the current record from a passed in recordset. It does use a temporary file to write out the picture object. It returns an IPictureDisp object. To set the picture property of a picture control you would use the following command:

set picture1.picture = getPicture("picFieldName",rsRecSetThatIsOpenObject")

I hope that helps.

The code:

Public Function setPicture(ByVal strPicturePath As String, strPicField As String, ByVal rs As ADODB.Recordset) As Boolean
  ' note: this requires the record to already exist - it will insert the
  ' picture at the current position in the recordset
  ' Returns true if success - false otherwise
  Const BlockSize = 100000
 
  Dim ByteData() As Byte   'Byte array for Blob data.
  Dim SourceFile As Integer
 
  ' Save Picture image to the table column.
  SourceFile = FreeFile
  Open strPicturePath For Binary Access Read As SourceFile
  FileLength = LOF(SourceFile)  ' Get the length of the file.
 
  If FileLength = 0 Then
    Close SourceFile
    setPicture = False
    Exit Function
  Else
    Numblocks = FileLength / BlockSize
    LeftOver = FileLength Mod BlockSize
    ReDim ByteData(LeftOver)
    Get SourceFile, , ByteData()
    rs(strPicField).AppendChunk ByteData()
    ReDim ByteData(BlockSize)
    For i = 1 To Numblocks
      Get SourceFile, , ByteData()
      rs(strPicField).AppendChunk ByteData()
    Next i
    rs.Update   'Commit the new data.
    Close SourceFile
    setPicture = True
  End If
End Function

Public Function getPicture(strPicField As String, ByVal rs As ADODB.Recordset) As IPictureDisp
  Const BlockSize = 100000
  Dim ByteData() As Byte   'Byte array for picture file.
  Dim DestFileNum As Integer
  Dim DiskFile As String

  ' Remove any existing destination file.
  DiskFile = App.Path & "\temp.bmp"
  If Len(Dir$(DiskFile)) > 0 Then
     Kill DiskFile
  End If
 
  DestFileNum = FreeFile
  FileLength = rs(strPicField).ActualSize
  Open DiskFile For Binary As DestFileNum
 
  Numblocks = FileLength / BlockSize
  LeftOver = FileLength Mod BlockSize
   
  rs.Move 0, adBookmarkCurrent
  ByteData() = rs(strPicField).GetChunk(LeftOver)
  Put DestFileNum, , ByteData()
 
  For i = 1 To Numblocks - 1
      ByteData() = rs(strPicField).GetChunk(BlockSize)
      Put DestFileNum, , ByteData()
  Next i
 
  Close DestFileNum

  Set getPicture = LoadPicture(App.Path & "\temp.bmp")
End Function
0

Featured Post

Creating Instructional Tutorials  

For Any Use & On Any Platform

Contextual Guidance at the moment of need helps your employees/users adopt software o& achieve even the most complex tasks instantly. Boost knowledge retention, software adoption & employee engagement with easy solution.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I’ve seen a number of people looking for examples of how to access web services from VB6.  I’ve been using a test harness I built in VB6 (using many resources I found online) that I use for small projects to work out how to communicate with web serv…
When trying to find the cause of a problem in VBA or VB6 it's often valuable to know what procedures were executed prior to the error. You can use the Call Stack for that but it is often inadequate because it may show procedures you aren't intereste…
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…

705 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question