Domino 9 und frühere Versionen > ND7: Entwicklung
Attachment als Binary in Textfeld ablegen
zysmo:
Hallo zusammen,
ich versuche einen Dateianhang aus einen Dokument (CRMdoc) aus einer Datenbank, in eine andere Datenbank im Binärformat in einem Textfeld (doc.Firmenlogo) zu speichern, damit ich es später verwenden kann um als blob in eine sql-Datenbank zu schreiben.
Mein Ansatz sieht so aus:
--- Code: ---
Dim File As Variant
Dim Object As NotesEmbeddedObject
Dim tempimage As Variant
If (CRMdoc.hasitem("$FILE")) Then
Set File = CRMdoc.GetFirstItem("$FILE")
Set Object = CRMdoc.GetAttachment(File.values(0))
Call object.ExtractFile("c:\tmp\")
fileNum% = Freefile()
Open "c:\tmp\" & Object.Name For Binary As fileNum%
Do While Not Eof(fileNum%)
Get #fileNum%, ,tempimage
Loop
doc.Firmenlogo = tempimage
End If
--- Ende Code ---
Funktioniert so aber nicht....
Das
--- Code: ---Call object.ExtractFile("c:\tmp\")
--- Ende Code ---
wirft schon den Fehler, dass es C:\tmp nicht öffnen kann...?
Und selbst wenn ich ein Bild physikalisch auf die Platte lege und so versuche zu öffnen:
--- Code: ---Open "c:\tmp\bild.bmp" For Binary As fileNum%
--- Ende Code ---
, gibt mit das
--- Code: ---Get #fileNum%, ,tempimage
--- Ende Code ---
den Fehler, dass der Datentyp falsch ist ???
Wo liegt mein Denkfehler :-:
Grüße
Alex
Peter Klett:
Bei Call object.ExtractFile("c:\tmp\") fehlt der Dateiname, probiers doch mal mit
Call object.ExtractFile("c:\tmp\" & object.Name).
Wenn ich die Hilfe zu Get richtig verstanden habe, passt die Declaration Dim tempimage As Variant nicht, das muss wohl etwas konkreter sein.
pram:
und weiterhin Achtung: Textfelder eignen sich schlecht zum Speichern von Binarys.
Alle Textfelder *) in Summe dürfen pro Dokument nur eine Größe von 64k haben (~32k Zeichen)
*) sofern sie mit dem Summary-Flag versehen sind, was standardmäßig der Fall ist.
Gruß
Roland
zysmo:
--- Zitat von: Peter Klett am 02.06.10 - 21:24:03 ---Bei Call object.ExtractFile("c:\tmp\") fehlt der Dateiname, probiers doch mal mit
Call object.ExtractFile("c:\tmp\" & object.Name).
Wenn ich die Hilfe zu Get richtig verstanden habe, passt die Declaration Dim tempimage As Variant nicht, das muss wohl etwas konkreter sein.
--- Ende Zitat ---
Call object.ExtractFile("c:\tmp\" & object.Name) funktioniert :)
Komischerweise hatte ich vorher Call object.ExtractFile("c:\tmp\tempimage.bmp") versucht, das hatte nicht funktioniert.... ???
Aber egal. Geht ja jetzt...
Wie muss die Deklaration von tmpimage dann aussehen? Ich hatte die Hilfe so verstanden, dass Variant da passt...
Ich habe damit ja ein Bild einzulesen das zwischen 5 und 15k gross ist..
Muss ich dann ein Byte *15000 deklarieren?
Gruß
Alex
zysmo:
OK. Ich hab es jetzt etwas anders gemacht...
Ich belasse das Bild im Dateisystem und hole mir sie dann erst beim Schreiben in die Datenbank.
Dafür schreibe ich sie dann so in einen Buffer:
--- Code: ---Dim ns As NotesStream
Set ns = session.CreateStream
If Not ns.Open("c:\tmp\" &doc.Firmenlogo(0), "binary") Then
Call rt.AppendText("Öffnen der Datei - " &doc.Firmenlogo(0) & " - fehlgeschlagen")
Call rt.AddNewline(1,True)
Goto theend
End If
buffer = ns.Read()
Call ns.Close
--- Ende Code ---
Der buffer wird auch befüllt, aber wenn ich in in meinem sql-statement unterbringen will, bekomme ich als Fehler 'Falscher Datentyp'... >:(
In etwa so:
--- Code: ---qry.SQL = "INSERT INTO xxx (spalte1, spalte2) VALUES (doc.feldwert(0), buffer)
--- Ende Code ---
Ich mein iss ja auch klar, weil er einen String erwartet....
Aber wie geht es richtig ???
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln