Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Inserire un'immagine in un record Access '97

sotto consiglio di Pal riposto il mio problema...
supponendo che ho un simpatico file bmp e una tabella Access '97 (con un
campo OLE), come faccio a mettere l'immagine dentro il record? (lavoro in
DAO)
dico campo OLE per intuizione, perchè se negli appunti di Windows è presente
un'immagine e seleziono il campo facendo Incolla, effettivamente nel campo
viene messa la bmp... ma se c'è un altro tipo di campo a me va benissimo,
considerate che andrà fatto un report con la tabella in questione
l'importante è che, da VB, riesca a mettere per ogni record un'immagine
(senza scrivere un riferimento ad un file, proprio la bmp)
Come posso fare?
Ringrazio in anticipo
Faber
P.S.: a fine settimana il prg dev'essere pronto...

 DAO)
Ti posto queste due funzioni - una legge un bitmap standard
dalla clipboard e tramite un oggetto PictureBox, la visualizza e
salva l'immagine in un campo nel formato long binary.
L'altra funzione fa l'esatto opposto (senza copiare nella clipboard).
Il "salva l'immagine" è intendo che salva i dati binary, non
l'oggetto. Il che significa che se fai un report con Access
l'immagine non viene direttamente mostrata. Occorre utilizzare
la seconda funzione per decodificarla.
Mi pareva di ricordare che con OleCreatePictureIndirect
si sarebbe potuto facilemente convertire l'immagine in
un oggetto OLE compatibile con il formato "Immagine" di
Access, ma non è così.
Proverò.
'Acquisisce un bitmap dalla clipbord, lo salva come file
'e lo inserisce in un campo del database come long binary
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim arrBuff() As Byte
Dim lngChunk As Long
Dim FileName As String
Dim hFile As Long
   FileName = Environ$("temp")
   FileName = FileName & IIf(Len(FileName) > 0, "\temp.dat", "c:\temp.dat")
   lngChunk = 4096
   ReDim arrBuff(lngChunk)
   Picture1.Picture = Clipboard.GetData
   SavePicture Picture1.Picture, FileName
   Set db = DBEngine.OpenDatabase("<NomeDatabase>")
   Set rs = db.OpenRecordset("<NomeTabella>", dbOpenTable)
   rs.MoveFirst
   hFile = FreeFile(0)
   Open FileName For Binary Access Read As hFile
   rs.Edit
   Do While Not EOF(hFile)
      Get #hFile, , arrBuff
      rs!<NomeCampo>.AppendChunk arrBuff
   Loop
   Close hFile
   rs.Update
   Kill FileName
   Set Picture1.Picture = Nothing
   rs.Close
   db.Close
   Set rs = Nothing
   Set db = Nothing
   Clipboard.Clear
'Carica il bitmap dal campo long binary e lo mostra
'in un oggetto picturebox
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim arrBuff() As Byte
Dim lngChunk As Long
Dim nChunks As Long
Dim lngBitmapOffset As Long
Dim FileName As String
Dim hFile As Long
Dim Counter As Long
   FileName = Environ$("temp")
   FileName = FileName & IIf(Len(FileName) > 0, "\temp.dat", "c:\temp.dat")
   lngChunk = 4096
   ReDim arrBuff(lngChunk)
   Set db = DBEngine.OpenDatabase("<NomeDataBase>")
   Set rs = db.OpenRecordset("<NomeTabella>", dbOpenTable)
   rs.MoveFirst
   lngBitmapOffset = 0
   nChunks = (rs!Campo5.FieldSize / lngChunk) + 1
   hFile = FreeFile(0)
   Open FileName For Binary Access Write As hFile
   For Counter = 1 To nChunks
      arrBuff = rs!<NomeCampo>.GetChunk(lngBitmapOffset, lngChunk)
      Put #hFile, , arrBuff
      lngBitmapOffset = lngBitmapOffset + lngChunk
   Next Counter
   Close hFile
   rs.Close
   db.Close
   Set rs = Nothing
   Set db = Nothing
   Picture1.Picture = LoadPicture(FileName)
   Kill FileName


 L'altra funzione fa l'esatto opposto (senza copiare nella clipboard).
ringrazio infinitamente Jimi per l'aiuto, per problemi di tempo (il prg lo
dovevo mandare 'in testing' questo pomeriggio al piů tardi) non ho potuto
provare le due funzioni... ho risolto mettendo un DataControl con una
PictureBox legata al campo OLE, poi mi muovo fra i record e, quando
necessario, faccio RecordSet.Edit - Carico immagine - RecordSet.Update
cmq la prossima volta che dovrň fare una cosa del genere, da codice, le
proverň senz'altro
grazie Jimi, e grazie Pal che mi dato l'idea per la PictureBox legata al
DataControl (cercavo soluzioni 'difficili' non pensando a quella piů
immediata... che tipo che sono  :))
Faber