PDA

Vollständige Version anzeigen : Frage zu "Long binary-Daten"


Hurricane300
05.01.2002, 21:07
hallo an alle,

folgend führe ich zwei funktionen auf, die ansich beide dateien als "Long binary-Daten" in ein OLE-Feld einer Tabelle schreiben sollen.
abgesehen von der ansteuerung und kleinigkeiten sind sie indentisch oder auch nicht!?!?!, da die geschriebenen daten in der tabelle nicht identisch bzw. kompatibel sind...

kann mir wer den unterschied beim lese-/schreibverfahren erklären??


viele grüsse

hurricane

Function BildDateiErstellen(strPixFile, strName)

Dim rs As Recordset
Dim pix() As Byte
Dim i As Long

Set rs = CurrentDb.OpenRecordset("_Buttons", dbOpenSnapshot)
rs.FindFirst "[BildName] = " & Chr(34) & strName & Chr(34)
If rs.NoMatch Then
MsgBox "Ein Bild mit diesem Namen ist nicht in der Datenbank vorhanden."
Else
Open strPixFile For Binary As #1
ReDim pix(rs("Bild").FieldSize)
pix() = rs("Bild").GetChunk(0, rs("Bild").FieldSize)
Put #1, , pix
Close #1
End If
rs.Close

Ende:
Erase pix
Set rs = Nothing
Exit Function

Fehler:
Reset
MsgBox Err.Description
Resume Ende

End Function


Function ReadBLOB(Source As String, T As Recordset, sField As String)

Dim NumBlocks As Integer
Dim SourceFile As Integer
Dim i As Integer
Dim FileLength As Long
Dim LeftOver As Long
Dim FileData As String

On Error GoTo Err_ReadBLOB

SourceFile = FreeFile
Open Source For Binary Access Read As SourceFile ' Open the source file.
FileLength = LOF(SourceFile)
If FileLength = 0 Then
ReadBLOB = 0
Exit Function
End If
NumBlocks = FileLength \ BlockSize
LeftOver = FileLength Mod BlockSize
T.MoveFirst
T.Edit
FileData = String$(LeftOver, 32)
Get SourceFile, , FileData
T(sField).AppendChunk (FileData)
FileData = String$(BlockSize, 32)
For i = 1 To NumBlocks
Get SourceFile, , FileData
T(sField).AppendChunk (FileData)
Next i
T.Update
Close SourceFile
ReadBLOB = FileLength

Exit Function

Err_ReadBLOB:
ReadBLOB = -Err
MsgBox "Function ReadBLOB Fehler " & Err & " : " & Error$
Exit Function

End Function

Manuela Kulpa
05.01.2002, 23:37
<font face="Verdana" size="2">Hallo hurricane!

Die erste Funktion setzt die GetChunk-Methode ein. D.h. mit dieser Methode rufst du von einem Field-Objekt einen Teil der Binär- oder Zeichendaten ab! Das bedeutet, hier wird ein blockweises Kopieren eines Binärfeldes in eine Variable durchgeführt. Welche dann in einer Datenträgerdatei (Put-Anweisung) geschrieben wird.

Die zweite Funktion setzt die AppendChunk-Methode ein. D.h. mit dieser Methode hängst du Daten an ein Field-Objekt an, das Binär- oder Zeichendaten enthält. Das bedeutet, hier wird ein blockweises Kopieren eines Binärfeldes in ein Field-Objekt durchgeführt!

Lies dir mal in der OL-Hilfe die Beschreibungen zur Get- bzw. AppendChunk Methode durch, ist recht hilfreich!

vg</font>

Hurricane300
06.01.2002, 00:45
die funktionsweise gibt die OH ja gut wieder, nur wo liegt der praktische unterschied?

beides binär?
geschwindkeit?
vor- nachteile in der praxis?
was sollt man verwenden?


danke im voraus

hurricane

Manuela Kulpa
06.01.2002, 01:20
<font face="Verdana" size="2">Hallo hurricane!

Zu deinen Fragen:

beides binär?
--> JA

was sollte man verwenden?
--> beides

GetChunk (erste Funktion), um die Binärdaten aus einer Tabelle in eine temporären Datei auszulesen, damit diese dann, z.B. in einem Bild-Steuerelement als Quelle, zugewiesen werden können!!!
AppendChunk (zweite Funktion), um die Binärdaten in einer Tabelle zu speichern!!!

geschwindigkeit??
--> Solltest du ausprobieren

vor- nachteile in der praxis?
--> hmmm, ich denke mal, das ist mit obigen Antworten erledigt

Ähm, ich verweise da doch noch mal gerne auf die <a href="http://www.donkarl.com" target="_blank">FAQs von Karl Donaubauer</a> - speziell

<a href="http://www.donkarl.com/FAQ/FAQ2Allgemein.htm#2.2" target="_blank">FAQ 2.2 - Bilder speichern</a>

vg</font>

Hurricane300
06.01.2002, 01:49
oh shitt, jetzt weiß ich warum ich mit den antworten nicht ganz klar kam....

habe teilweise falschen code abgebildet...

also ich habe insgesamt 4 funktionen:

- lesen variante "a" *
- schreiben variante "a"

- lesen variante "b"
- schreiben variante "b" *

ich habe quasi die mit sternchen versehenen codes abgebildet, so dass es gegenstücken sind, funktionieren aber nicht als gegenstück...
abgesehen davon, dass das eine schreiben, das andere lesen ist, ist da noch irgendein unterschied nur welcher ??????????? (ist es das blockweise???? was bedeutet das, bzw. vor- und nachteile??)

zusatzfrage: zur zeit, abgesehen von a oder b erstelle ich eine temporäre datei im temp verzeichnis und weise diese dann einem pic-element in einem formular zu, gibt es auch einen anderen weg ohne eine richtige temp-datei zu schreiben????

sorry für den teilw. falschen code...


vg

hurricane

Sascha Trowitzsch
06.01.2002, 02:15
Hi Hurri,

da ich oben meinen eigenen Code aus einem anderen Thread wiedererkenne ;) (1.Beispiel), meld ich mal zu Wort.
(siehe auch <a href="http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=53372" target="_blank">Dateigröße durch jpg Bilder zu groß, verkleinerbar?</a> )

Ich sehe im zweiten Beispiel keinen so rechten Sinn. Es ist unnötig kompliziert und teilt die Daten in Blöcke auf; keine Ahnung wozu.

Das mit der temporären Datei ist leider notwendig. Du kriegst in ein Bild-Steuerelement anders kein JPG rein. Und JPG ist ja der Sinn der ganzen Sache, damit Bilddaten in der DB schön klein bleiben.

Ciao, Sascha

Hurricane300
06.01.2002, 02:22
danke soweit...

2. bsp. kommt glaube ich direkt von ms... (kb)

also nur der unterschied mit dem blöcke zerlegen, aha...
kann das denn für irgendwas sinn machen, extreme situationen...?!?!


viele grüße

hurricane