Access Blob und Gifs Binär
Access Blob und Gifs Binär
Hallo Zusammen,
in einer Access Datenbank habe ich unter anderem Bilder gespeichert, und zwar mit einer Function: ReadBlob()
Diese Funktion liest ein BLOB aus einem Verzeichnis und speichert es in einem Access Tabellenfeld.
Mit einer anderen Funktion speichere ich animierte Gifs in die Access Datenbank:
RS("tbl_AG01_BildObjekt").AppendChunk arrBin() 'Binär speichern
Meine Frage geht dahin, ob ich mit PB die Möglichkeit habe diese Bilder und Gifs aus der Access Datenbank aufzurufen und in ein Gadget anzuzeigen?
Wäre toll wenn mir jemand helfen könnte.
Schon mal vielen Dank dafür.
in einer Access Datenbank habe ich unter anderem Bilder gespeichert, und zwar mit einer Function: ReadBlob()
Diese Funktion liest ein BLOB aus einem Verzeichnis und speichert es in einem Access Tabellenfeld.
Mit einer anderen Funktion speichere ich animierte Gifs in die Access Datenbank:
RS("tbl_AG01_BildObjekt").AppendChunk arrBin() 'Binär speichern
Meine Frage geht dahin, ob ich mit PB die Möglichkeit habe diese Bilder und Gifs aus der Access Datenbank aufzurufen und in ein Gadget anzuzeigen?
Wäre toll wenn mir jemand helfen könnte.
Schon mal vielen Dank dafür.
Gruß, TheSaint
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
Re: Access Blob und Gifs Binär
Ist das eine native MS-Access-Funktion?TheSaint hat geschrieben:ReadBlob()
Grüße ... Kiffi
a²+b²=mc²
Re: Access Blob und Gifs Binär
Hallo Kiffi,
Hier ist der Code aus Access den ich zum speichern benutze:
Hoffe das kann die Frage beantworten.
Vielleicht noch eine Anschlussfrage dazu, wäre es besser von Access nach Sqlite oder MySql zu wechseln?? Ist das einfacher?
Schon mal vielen Dank für Deine Hilfe.
Hm, sorry, kann leider nichts im moment mit dem Begriff native anfangen.Kiffi hat geschrieben:Ist das eine native MS-Access-Funktion?TheSaint hat geschrieben:ReadBlob()
Hier ist der Code aus Access den ich zum speichern benutze:
Code: Alles auswählen
Function ReadBLOBNeu(Source As String, T As Recordset, sField As String)
'**************************************************************
' FUNCTION: ReadBLOB() ' ' PURPOSE:
' Reads a BLOB from a disk file and stores the contents in the
' specified table and field. ' ' PREREQUISITES:
' The specified table with the OLE object field to contain the
' binary data must be opened in Visual Basic code (Access Basic
' code in Microsoft Access 2.0 and earlier) and the correct record
' navigated to prior to calling the ReadBLOB() function. '
' ARGUMENTS:
' Source - The path and filename of the binary information
' to be read and stored.
' T - The table object to store the data in.
' Field - The OLE object field in table T to store the data in. '
' RETURN: ' The number of bytes read from the Source file.
'**************************************************************
Dim NumBlocks As Integer, SourceFile As Integer, I As Integer
' Dim FileLength As Long
Dim LeftOver As Long
Dim FileData As String
Dim RetVal As Variant
' On Error GoTo Err_ReadBLOB
' Open the source file.
SourceFile = FreeFile
Open Source For Binary Access Read As SourceFile
' Get the length of the file.
FileLength = LOF(SourceFile)
If FileLength = 0 Then
ReadBLOBNeu = 0
Exit Function
End If
' Calculate the number of blocks to read and leftover bytes.
NumBlocks = FileLength \ BlockSize
LeftOver = FileLength Mod BlockSize
' SysCmd is used to manipulate status bar meter.
RetVal = SysCmd(acSysCmdInitMeter, "Reading BLOB", _
FileLength \ 1000) ' Put first record in edit mode.
' T.MoveFirst
' T.Edit
T.AddNew
' Read the leftover data, writing it to the table.
FileData = String$(LeftOver, 32)
Get SourceFile, , FileData
T(sField).AppendChunk (FileData)
RetVal = SysCmd(acSysCmdUpdateMeter, LeftOver / 1000)
' Read the remaining blocks of data, writing them to the table.
FileData = String$(BlockSize, 32)
For I = 1 To NumBlocks
Get SourceFile, , FileData
T(sField).AppendChunk (FileData)
RetVal = SysCmd(acSysCmdUpdateMeter, BlockSize * I / 1000)
Next I ' Update the record and terminate function.
T.Update
RetVal = SysCmd(acSysCmdRemoveMeter)
Close SourceFile
ReadBLOBNeu = FileLength
Exit Function
Err_ReadBLOB:
ReadBLOBNeu = -Err
MsgBox "ReadBLOB Error " & Err & " : " & Error$
Exit Function
End Function
Vielleicht noch eine Anschlussfrage dazu, wäre es besser von Access nach Sqlite oder MySql zu wechseln?? Ist das einfacher?
Schon mal vielen Dank für Deine Hilfe.
Gruß, TheSaint
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Orginalcode hier: http://support.microsoft.com/kb/103257/de
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Access Blob und Gifs Binär
Nativ wäre es, wenn es eine in Access fest eingebaute Funktion ist (wieTheSaint hat geschrieben:Hm, sorry, kann leider nichts im moment mit dem Begriff native anfangen.
z.B. OpenDatabase(), OpenRecordset(), etc.). In Deinem Fall rufst Du
eine eigenprogrammierte Routine auf. Somit ist ReadBlob nicht nativ.
mh, das ist Geschmackssache. Ich persönlich finde SQLite wesentlichTheSaint hat geschrieben:Vielleicht noch eine Anschlussfrage dazu, wäre es besser von Access nach Sqlite oder MySql zu wechseln?? Ist das einfacher?
einfacher zu handeln als Access. Erstens ist es in PB integriert (also nativ
nutzbar

plattformunabhängig und SQLite unterstützt typenlose Felder, die ich als
sehr nützlich betrachte. Zwar hat Fred (noch) keine direkte Unterstützung
von BLOBs in PB integriert, aber es gibt hier und im englischen Board
einiges an Code von Thomas (ts-soft) und mir.
Wenn Du auf Access-VBS verzichten kannst und eine Single-
User-Datenbank suchst*, bist Du mit SQLite IMO sehr gut beraten.
Grüße ... Kiffi
*: Im englischen Forum gibt es ein, zwei Links zu recht
interessanten SQLite-Servern. Mit Hilfe deren kann man SQLite auch auf
Mehr-User-Systemen einsetzen.
// Edit: Hier der Link, um die in PB noch nicht umgesetzten SQLite-
Funktionalitäten nutzen zu können (das ist doch der aktuellste Code,
Thomas?). Die BLOB-Beispiele sind unten am Posting angehängt:
http://www.purebasic.fr/english/viewtop ... 885#261885
a²+b²=mc²
Hallo Kiffi,
wow, ich bin begeistert.
Deine Hilfestellungen und Erklärungen sind einfach spitze.
Vielen Dank.
Hm, diesen Link den Du aufgezeigt hast, verweist auf die
Bearbeitung der Blobs, die in einer SQlite Datenbank gespeichert sind.
Läßt sich der folgende Code auch so ändern, dass ich ihn für eine
Access Datenbank nutzen kann?
Oder, und das wäre eine neue Baustelle für mich, hast Du daran
gedacht, dass ich die Access Datenbank nach SQlite transferiere?
Ich denke, dass ich es hinbekommen könnte, alle Tabellen von
Access nach SQlite zu transferieren, aber... die Reports die ich in
Access habe,... da weis ich nicht, wie ich das machen soll. Wahrscheinlich neu manuell aufbauen.
Ich hoffe, ich nerve nicht zu viel, wenn ich als letztes noch die Frage stelle, ob es möglich ist diese Access oder SQlite Datenbank in die PureBasic Exe zu integrieren, so dass ich nur eine Datei habe und nicht die Exe und eine Datenbank.
Nochmals vielen Dank, auch für Deine / Eure Geduld mit mir.
wow, ich bin begeistert.
Deine Hilfestellungen und Erklärungen sind einfach spitze.
Vielen Dank.
Hm, diesen Link den Du aufgezeigt hast, verweist auf die
Bearbeitung der Blobs, die in einer SQlite Datenbank gespeichert sind.
Läßt sich der folgende Code auch so ändern, dass ich ihn für eine
Access Datenbank nutzen kann?
Oder, und das wäre eine neue Baustelle für mich, hast Du daran
gedacht, dass ich die Access Datenbank nach SQlite transferiere?
Code: Alles auswählen
EnableExplicit
XIncludeFile "SQLite3.pbi"
Define Mem, File, Size, hDB, lStatement
hDB = OpenDatabase(#PB_Any, "logo.db", "", "")
If hDB = #False
Debug "Can't open database"
End
EndIf
lStatement = SQLitePrepare(hDB, "Select fldBlob From tblBlob")
If lStatement
SQLiteStep(lStatement)
Size = SQLiteColumnByte(lStatement, 0)
Mem = SQLiteColumnBlob(lStatement, 0)
If Mem
; File = CreateFile(#PB_Any, "logo.bmp")
; If File
; WriteData(File, Mem, Size)
; CloseFile(File)
; EndIf
CatchImage(0, Mem)
OpenWindow(0, #PB_Ignore, #PB_Ignore, ImageWidth(0), ImageHeight(0), "blob - example")
ImageGadget(0, 0, 0, ImageWidth(0), ImageHeight(0), ImageID(0))
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
SQLiteFinalize(lStatement)
EndIf
CloseDatabase(hDB)
Access nach SQlite zu transferieren, aber... die Reports die ich in
Access habe,... da weis ich nicht, wie ich das machen soll. Wahrscheinlich neu manuell aufbauen.
Ich hoffe, ich nerve nicht zu viel, wenn ich als letztes noch die Frage stelle, ob es möglich ist diese Access oder SQlite Datenbank in die PureBasic Exe zu integrieren, so dass ich nur eine Datei habe und nicht die Exe und eine Datenbank.
Nochmals vielen Dank, auch für Deine / Eure Geduld mit mir.
Gruß, TheSaint
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
Re: Access Blob und Gifs Binär
Hallo Zusammen,
hallo Kiffi,
Zeile 64: Ungültiger Name. derselbe wie ein externer Befehl.
und zwar bei der Codezeile und noch einige folgende Codezeilen:
Nachdem ich dann herausgefunden habe, dass das wohl die PBOSL_SQLite3 vermutlich verursacht, habe ich sie rausgenommen, den Compiler neugestartet und dann kommen bei dem Code folgende Meldungen:
POLINK: error: Unresolved external symbol 'SQLite3_Blind_Blob'.
und noch weitere Meldungen mit POLINK ...
Hm, damit kann ich im Moment gar nichts anfangen.
Was mache ich den da falsch, oder was muss ich machen, damit es
funktioniert??
Schon mal vielen Dank für Eure Hilfe
hallo Kiffi,
wenn ich den vorgeschlagenen Code benutze, kommt folgende Fehlermeldung:Kiffi hat geschrieben: // Edit: Hier der Link, um die in PB noch nicht umgesetzten SQLite-
Funktionalitäten nutzen zu können (das ist doch der aktuellste Code,
Thomas?). Die BLOB-Beispiele sind unten am Posting angehängt:
http://www.purebasic.fr/english/viewtop ... 885#261885
Zeile 64: Ungültiger Name. derselbe wie ein externer Befehl.
und zwar bei der Codezeile und noch einige folgende Codezeilen:
Code: Alles auswählen
SQLite3_Prepare (hDB.i, Statement.p-utf8, nBytes.i, *hResult, *pzTail = 0)
POLINK: error: Unresolved external symbol 'SQLite3_Blind_Blob'.
und noch weitere Meldungen mit POLINK ...
Hm, damit kann ich im Moment gar nichts anfangen.
Was mache ich den da falsch, oder was muss ich machen, damit es
funktioniert??
Schon mal vielen Dank für Eure Hilfe
Gruß, TheSaint
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Wenn Du PB4.30 verwendest, sollteste die letzte Include, die auch der obige link angibt nutzen. Im Header steht:
> POLINK: error: Unresolved external symbol 'SQLite3_Blind_Blob'.
Blinden Blob gibts nicht
Das ist so definiert:
PBOSL gibts nicht für PB4.30, also weg damit!SQLite3.pbi hat geschrieben:; new Version For PB 4.30 + using static lib from pb
; supports 64-Bit
> POLINK: error: Unresolved external symbol 'SQLite3_Blind_Blob'.
Blinden Blob gibts nicht

Das ist so definiert:
Code: Alles auswählen
sqlite3_bind_blob (lStatement.i, lIndex.i, lBinaryBuffer.i, lBinaryBufferLength.i, *void = -1)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Hallo ts-soft,
Hm, das mit der PBOSL wusste ich nicht. Habe sie jetzt entfernt.
ja diese Include benutze ich. Hier das was im Header steht:ts-soft hat geschrieben: Wenn Du PB4.30 verwendest, sollteste die letzte Include, die auch der obige link angibt nutzen. Im Header steht:PBOSL gibts nicht für PB4.30, also weg damit!SQLite3.pbi hat geschrieben:; new Version For PB 4.30 + using static lib from pb
; supports 64-Bit
Die Version ist doch richtig, oder?; SQLite3 Include for Windows, Linux and MacOS
; based on a example by MLK
; binding functions based on code by Kiffi (PBOSL)
; tested with Ansi and Unicode under WinXP and XUbuntu
; Autor: ts-soft
; new Version For PB 4.30 + using static lib from pb
; supports 64-Bit
; New Version 2008/10/02
; since beta 3 you can mix native commands with API command, so i have make some changes and removed useless functions
Hm, das mit der PBOSL wusste ich nicht. Habe sie jetzt entfernt.
Gruß, TheSaint
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Die sollte funktionieren, gegeteiliges ist mir nicht bekanntTheSaint hat geschrieben:Die Version ist doch richtig, oder?
PBOSL wird wohl bald als Include erscheinen, zuviele Probleme mit TailbiteTheSaint hat geschrieben:Hm, das mit der PBOSL wusste ich nicht. Habe sie jetzt entfernt.
libs, die sind nach fast jedem PB Update nicht mehr lauffähig.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
