Se utilizarmos o tipo Objeto OLE e guardarmos as fotos em nosso MDB com o tempo se tornará um transtorno pois como você pode perceber o seu banco de dados estará guardando o tamanho dos seus arquivos BMP.
Com isto sugero que você utilize uma outra forma que irei passar a abaixo, que será melhor pela capacidade de armazenamento. Neste caso estaríamos somente guardando o caminho e o nome do arquivo em BMP
Você poderá criar uma rotina para efetuar a verificação do caminho e o nome do arquivo BMP a cada mudança de registro e o LOADPICTURE irá carregar a propriedade PICTURE do objeto Picture com esta foto.
Com isto você somente irá guardar somente o nome do arquivo em BMP, e a sua rotina se encarrega de ir buscar a figura e vinculá-la ao objeto PICTURE do seu formulário.
Exemplo dos dados a serem guardados...
C:SEUARQUIVO.BMP
Abaixo um exemplo de como poderia ser sua rotina...
Picture1.Picture = LoadPicture(tabela("Caminho")) 'para carregar...
Text1 = tabela("Caminho") 'textbox que armazena o caminho da figura
Já para gravar, você deverá utilizar o método AddNew:
tbl.AddNew
tbl("Caminho") = Text1 'guarda o caminho da figura.
tbl.Update
Neste caso o campo que guardará o caminho da foto deverá ser do tipo String e não objeto OLE.
Já se mesmo sabendo destes transtornos você queira continuar usando o campo do tipo objeto OLE para armazenar suas imagens, abaixo seguem as funções que armazenam e lêem as imagens:
Public Sub GetPicture(f As Field, pic As Control)
Dim x() As Byte
Dim ff As Integer
Dim strArqTemp As String
strArqTemp = "c: emppic.bmp"
ff = FreeFile
Open strArqTemp For Binary Access Write As ff
x() = f.GetChunk(0, f.FieldSize)
Put ff, , x()
Close ff
pic.Picture = LoadPicture(strArqTemp)
Kill strArqTemp
End Sub
Public Sub LetPicture(f As Field, pic As Control)
Dim x() As Byte
Dim n As Long
Dim ff As Integer
Dim strArqTemp As String
ff = FreeFile
strArqTemp = "c: emppic.bmp"
SavePicture pic.Picture, strArqTemp
Open strArqTemp For Binary Access Read As ff
n = LOF(ff)
If n Then
ReDim x(n)
Get ff, , x()
f.AppendChunk x()
Close ff
End If
Kill strArqTemp
End Sub
Primeiro você terá que armazenar a imagem no banco de dados no formato em que ele consiga reconhecer (Binários Longos), pra isso use:
rec.AddNew
LetPicture rec("Figura"), Picture1
'rec("OutroCampo") = outrovalor...
rec.Update
Depois sim você poderá ler o registro, para isso use:
GetPicture rec("Figura"), Picture1
onde rec("Figura") é o recordset que contém a figura.