Autor Thema: Attachment als Binary in Textfeld ablegen  (Gelesen 3923 mal)

Offline zysmo

  • Aktives Mitglied
  • ***
  • Beiträge: 107
  • Geschlecht: Männlich
Attachment als Binary in Textfeld ablegen
« am: 02.06.10 - 16:58:46 »
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

Funktioniert so aber nicht....
Das
Code
Call object.ExtractFile("c:\tmp\")
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%
, gibt mit das
Code
Get #fileNum%, ,tempimage
den Fehler, dass der Datentyp falsch ist  ???

Wo liegt mein Denkfehler  :-:

Grüße
Alex


Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Attachment als Binary in Textfeld ablegen
« Antwort #1 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.

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Attachment als Binary in Textfeld ablegen
« Antwort #2 am: 02.06.10 - 21:48:14 »
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
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline zysmo

  • Aktives Mitglied
  • ***
  • Beiträge: 107
  • Geschlecht: Männlich
Re: Attachment als Binary in Textfeld ablegen
« Antwort #3 am: 07.06.10 - 10:18:24 »
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.

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

Offline zysmo

  • Aktives Mitglied
  • ***
  • Beiträge: 107
  • Geschlecht: Männlich
Re: Attachment als Binary in Textfeld ablegen
« Antwort #4 am: 08.06.10 - 10:18:22 »
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

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)

Ich mein iss ja auch klar, weil er einen String erwartet....
Aber wie geht es richtig  ???


Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline zysmo

  • Aktives Mitglied
  • ***
  • Beiträge: 107
  • Geschlecht: Männlich
Re: Attachment als Binary in Textfeld ablegen
« Antwort #6 am: 09.06.10 - 22:18:39 »
hmmm...
Per SQL-Statement ist klar... aber wie bekomm ich das in LS verpackt....??

Ich habe jetzt mit ns.ReadText(), statt ns.Read() rumgespielt.
Das liefert mir eine String zurück. Bei Textdateien funktioniert das auch wunderbar, bei Binärfiles scheint aber das Problem zu sein, dass bestimmte Sonderzeichen zum Abbruch des Strings führen  >:(
Ich bekomme in meiner Variable nämlich immer nur Fragmente und nicht das komplette Binary des Bildes....

Ich denke ich muss mich nach einer Alternative (außerhalb von Lotus) umschauen  :-[
Falls jemand aber noch eine Idee hat, immer her damit  ;)


Gruß
Alex

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz