Sikkert, men det kræver viden om hvordan man tager et billede programmæssigt - ved du mere om det? 'ved udfyldelse' kan tilknyttes 'ved indgang' hændelsen - og her skal så kaldes noget der programmæssigt tager et billede og giver en henvisning til en billedfil Fra Access 2007 og op (så vidt jeg ved) er der en felttype hvor man kan gemme billeder - det kan også foregå i tidligere access versioner hvis man ops på at undgå at gemme OLE objekter - bag det i praksis meningsløse OLE interface gemmer sig en BLOB felttype som kan tilgåes fra vba - BLOB= binært Langt Objekt
Her kommer så lidt - det er blot hints til den intesserede på kode niveau. En Løsning vil afhænge af både af Access og windows version - dette er hentet fra access 2000 forsøg under XP. API'et er Microsoft Image Acqustion 1.01 Type Libray (reference)
Dette henter et byte array fra usb webcam:
Function jpgImgOFCS() As Byte() Dim FileName FileName = jpgOfCS() If Len(FileName) Then jpgImgOFCS = file2Binary(FileName) End Function
'Vha. disse kaldes:
I følgende funktion rodes der med filer hvor camaraet gemmer dem - først slettes gamle filer og tilsidst fiskes der en reference til den nyvalgte - der gåes bag om interfaces!
Function jpgOfCS() Const Wiapath = "C:\Documents and Settings\All Users\Application Data\Microsoft\WIA\" Dim pictpath, toKill Dim wiaO As WIALib.Wia
Set wiaO = New WIALib.Wia With wiaO.Devices(0) pictpath = Wiapath & .id & "\" toKill = Dir(pictpath & "*.*") While Len(toKill) Kill pictpath & toKill toKill = Dir(): Wend With .Create() .GetItemsFromUI SingleImage, BestPreview: End With jpgOfCS = Dir(pictpath & "*.jpg") If Len(jpgOfCS) Then jpgOfCS = pictpath & jpgOfCS End With End Function
Function file2Binary(fileN) As Byte() With New ADODB.Stream .Type = adTypeBinary .Open .LoadFromFile fileN file2Binary = .Read() End With End Function
------------------ En tabel: Camshot (id autonumber,besk text,shot OLE) id og besk er eneste felter på formular med følgende i klasseobjektet
Private curfile
Private Sub attach_Click() Dim arr() As Byte, i, binstr$ arr = jpgImgOFCS() For i = 0 To UBound(arr): binstr = binstr & ChrB(arr(i)): Next If Not IsNull(id) Then With rsi("Camshot", , , "id=" & id) .RS.Edit .RS.Fields("shot").AppendChunk binstr .RS.Update End With Form_Current Else MsgBox "change code to save from getting id" End If
End Sub
Private Sub Form_Current() Dim blobLen, binstr$, arr() As Byte If Not IsNull(id) Then With rsi("Camshot", , , "id=" & id) blobLen = .RS.Fields("shot").FieldSize If blobLen Then binstr = .RS.Fields("shot").GetChunk(0, blobLen) arr = binstr binary2File curfile, arr pict.Picture = curfile Else pict.Picture = "" End If: End With End If End Sub
Private Sub Form_Open(Cancel As Integer) curfile = ParentFolder(CurrentDb.name) & "curImg.jpg" End Sub
Sub binary2File(FileName, ByteArray) With New ADODB.Stream .Type = adTypeBinary .Open .Write ByteArray .SaveToFile FileName, adSaveCreateOverWrite End With End Sub
---------------- Man må tænke sig hvordan wrapperen rsi(...) om et ado recordset ser ud - bemærk også refence til ADODB
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.