VB 5/6-Tipp 0444: ADO Binärdaten in einer DB speichern und wieder auslesen
von ActiveVB
Beschreibung
Ein Beispiel wie man Binärdaten wie Bilder, Dokumente oder anderes in einer Datenbank speichert und wieder ausliest. Diese Daten nennt man Blob, Image oder in Access "OLE-Objekt". Es sei jedoch darauf hingewiesen, daß diese Vorgehensweise bedacht sein muß! Gerade bei Access oder ähnlichen Jet-Datenbanken sollte man diesen Weg vermeiden da die Datenbank so sehr schnell an Größe zunimmt und langsam wird. Bei solchen Datenbanken sollte man stattdessen nur den Verweis auf die Datei im Filesystem speichern und dann von dort laden.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: keine | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '-------------- Anfang Projektdatei BLOBs.vbp -------------- ' Es muss ein Verweis auf 'Microsoft ActiveX Data Objects 2.5 Library' gesetzt werden. ' Die Komponente 'Microsoft Common Dialog Control 6.0 (SP3) (comdlg32.ocx)' wird benötigt. '------- Anfang Formular "frmMain" alias frmMain.frm ------- ' Steuerelement: Listen-Steuerelement "lstDateien" ' Steuerelement: Schaltfläche "cmdDelete" ' Steuerelement: Standarddialog-Steuerelement "dlgDialog" ' Steuerelement: Schaltfläche "cmdAddFile" ' Steuerelement: Beschriftungsfeld "lblHinweis" Option Explicit Dim Cn As ADODB.Connection Dim Rs As ADODB.Recordset Dim Doc As ADODB.Stream Public Sub Aktualisieren() On Error Goto Fehler lstDateien.Clear Rs.MoveFirst Do While Not Rs.EOF = True lstDateien.AddItem Rs.Fields("Beschreibung").Value Rs.MoveNext Loop Exit Sub Fehler: If Err.Number = 3021 Then MsgBox "Keine Datensätze vorhanden", vbInformation End If End Sub Private Sub cmdAddFile_click() On Error Goto Fehler Set Doc = New ADODB.Stream dlgDialog.ShowOpen With Doc .Type = adTypeBinary .Open .LoadFromFile dlgDialog.FileName End With Rs.AddNew Rs.Fields("File") = Doc.Read Rs.Fields("Beschreibung") = InputBox("Beschreibung;") Rs.Update Aktualisieren Exit Sub Fehler: If Err.Number = 32755 Then Exit Sub End Sub Private Sub cmdDelete_Click() Rs.MoveFirst Rs.Move lstDateien.ListIndex Rs.Delete Rs.Update Aktualisieren End Sub Private Sub Form_Load() Set Cn = New ADODB.Connection Set Rs = Nothing With Cn .Provider = "Microsoft.Jet.OLEDB.3.51" .ConnectionString = "Data Source=" & App.Path & "\Tips.mdb" .Open End With Set Rs = New ADODB.Recordset With Rs .Source = "select Beschreibung, File from tblTips" .LockType = adLockOptimistic .CursorType = adOpenStatic Set .ActiveConnection = Cn .Open End With Aktualisieren End Sub Private Sub Form_Unload(Cancel As Integer) Set Rs = Nothing Set Cn = Nothing Set Doc = Nothing End Sub Private Sub lstDateien_DblClick() On Error Goto Fehler Set Doc = New ADODB.Stream dlgDialog.ShowSave With Doc .Type = adTypeBinary .Open Rs.MoveFirst Rs.Move lstDateien.ListIndex .Write Rs.Fields("File") .SaveToFile dlgDialog.FileName .Close End With Exit Sub Fehler: If Err.Number = 32755 Then Exit Sub End Sub '-------- Ende Formular "frmMain" alias frmMain.frm -------- '--------------- Ende Projektdatei BLOBs.vbp ---------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 12 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von Renate Brandt am 04.02.2009 um 11:52
Ich erhalte die Fehle´rmeldung
benutzerdefinierter Typ nicht definiert bei ADODB.STREAM
Was habe ich vergessen?
Gruß
Renate
Kommentar von Volker am 31.03.2005 um 11:44
Hi,
es gibt die Möglichkeit, eine Datei nicht in Einem, sondern z.B. Kb- weise runterzuladen. Weiß jemand, wie das fuktioniert ? Ich brauche diese Funktion, um einen Fortschritts- Balken während des Downloads einer 20MB- Datei aus einer Oracle- Datenbank anzuzeigen.
Kommentar von Falk am 25.08.2004 um 14:07
AddNew funktioniert bei mir auch nicht und es kommt zu einem Fehler. Der sagt mir das eine Einschränkung seitens des Providers handelt oder des LockType. Ich benutze den MSDAORA, weil ich in einem Long Raw Feld in Oracle die Bilder speichern will.
Insert Into geht gar nicht.
Was mache ich Falsch??
Kommentar von J"Org am 08.09.2003 um 09:58
Hallo,
also bei mir funktioniert dieses alles in Abhängigkeit von dem DBMS! Ich habe z.B. mit Ingres keine Probleme, mit MySQL und Oracle funktioniert dieser Code nicht, hier müssen bestimmt DMBS-Eigenheiten (Einstellungen) berücksichtigt werden.
J"Org
Kommentar von ariesdave am 15.07.2003 um 14:04
hallo,
bei mir funktioniert der o.g. tipp nicht. ich erhalte die fehlermeldung, dass ein benutzerdefinierter typ nicht definiert ist.
offensichtlich kennt meine vb version die 'stream' eigenschaft des 'adodb' objektes nicht...
wer kann mir hier einen tipp geben?
danke
-dave
Kommentar von Hartmann Horst am 04.07.2003 um 16:19
nochmal....
Hat sich erledigt. Das Recordset muss im gebundenen Modus sein. Eigendlich logisch :-)
thx, Harti
Kommentar von Hartmann Horst am 04.07.2003 um 15:11
Hallo zusammen
Der Source ist nicht schlecht...
Leider funktioniert bei mir "rs.AddNew" nicht ?!
Weiss jemand an was das liegen könnte ?
Vielen Dank, Harti
Kommentar von Matthias am 11.02.2003 um 10:02
Hi,
wo finde ich die Tips.mdb Datei.
Vielen Dank.
Kommentar von Said am 20.01.2003 um 15:55
Hallo,
das Beispiel greift auf eine Accessdatenbank zu, wie sieht es aus mit SQL-Server 2000, und was ein Datentyp sollte man nehmen?
vielen Dank.
Kommentar von Stefan am 13.08.2002 um 06:50
Ich kann mir die Datei leider nicht runtrladen weil der Server nicht gefunden wird. Kann mir jemand die Datei zugänglich machen?
Kommentar von Johannes am 09.04.2002 um 13:46
Bei mir funktioniert das Beispiel, jedoch sobal ich versuche ein zweites Datenfeld mit Binärdaten in der DB zu füllen, tritt ein Fehler auf. Gibt es da eine Beschränkung, das in einer AcessDb nur ein OLEObjekt - Feld sein darf ? Danke
Gruß
Johannes
Kommentar von Frank am 07.03.2002 um 09:10
Bei mir funktioniert das Beispiel leider nicht. Fehlermeldung "Micrsoft ActiveX Data Objects 2.5 Libary" nicht vorhanden. Kann ich diese Libary irgendwo heunterladen!
Danke! Gruß Frank