[GELÖST]BLOB ein & auslesen

25. September 2007 08:13

Guten Morgen
Ich habe eine Frage zu BLOB's.
Da mich auch die Suchfunktion nicht so richtig schlau gemacht hat, nun hier dieses Thema.

Ich habe mittels eines Outstream ein BLOB-Feld in einer Tabelle gefüllt:

Code:
SignaturTabelle.Signatur.CREATEOUTSTREAM(return);
variable.WRITE(return); //Variable ist BigText und wird vorher befüllt
SignaturTabelle.INSERT;


Das klappt, wie ich mittlerweile festgestellt habe auch nicht richtig.
Ich sehe zwar in der Tabelle das "*" in der BLOB-Spalte,
jedoch wenn ich mit HASVALUE abfrgae, sagt er mir das keine Werte enthalten sind.
Was mache ich falsch??
Ich bin ja genauso vorgegangen wie im Reference Guide beschrieben

Vielen Dank im Voraus
Zuletzt geändert von Schaarschi am 25. September 2007 16:25, insgesamt 1-mal geändert.

25. September 2007 11:08

Benutze vor der Abfrage den Befehl CALCFIELDS.

Code:
SignaturTabelle.CALCFIELDS(Signatur)

Gruß, Marc

25. September 2007 11:24

Nein, das bringt es leider auch nicht.
Ich krieg immer noch die Meldung: Sie können ein leeres BLOB () nicht streamen"

25. September 2007 14:28

Mach ein CALCFIELDS wie Marc schon vorgeschlagen hat und erst anschließend kannst du mit

BLOBField.HASVALUE

abfragen, ob dein Feld einen Inhalt hat.

25. September 2007 15:15

Kann mir noch mal jemand betreffs des Einfügens der Daten in das BLOB-Feld helfen.
Mein Einfücode sieht mittlerweile so aus:

Code:

SignaturTabelle.INIT;
SignaturTabelle.Signatur.CREATEOUTSTREAM(return);
variable.WRITE(return);
SignaturTabelle.PK:='1';
SignaturTabelle.INSERT(SignaturTabelle.PK='1');


Wenn ich danach gleich damit weiterarbeite sind die Daten im BLOB-Feld.
Aber wenn ich die Anwendung schließe und neu lade findet er keine Daten mehr im BLOB

Bsp.:
Code:
SignaturTabelle.Signatur.EXPORT('c:/SignFile.txt.',FALSE);

25. September 2007 15:27

Gegenfrage:

was versuchts du mit folgendem Code zu bezewcken?
Code:
SignaturTabelle.INSERT(SignaturTabelle.PK='1');


In deinem Beispiel entspricht das
Code:
SignaturTabelle.INSERT(TRUE);

was dazu führt, dass der "OnInsert" Trigger deiner Tabelle ausgeführt wird.

Ist dort eventuell was programmiert, was deinen Record oder Felder aus deinem Record initialisiert?

Versuchs doch mal mit
Code:
SignaturTabelle.INSERT;

Was passiert dann?

25. September 2007 15:45

Da passiert eben nichts
Das ist das Problem.
Er schreibt dann die Daten nicht ordentlich in das BLOB-Feld.
So bald ich etwas andres mache, sind die Daten wie aus dem Cache und er findet keine Daten im BLOB-Feld

25. September 2007 15:56

Ist deine Recordvariable eventuell als "Temporary" definiert?

25. September 2007 16:00

Noch was:
wie sieht denn der Primärkey deiner Tabelle aus?

25. September 2007 16:00

Nein das Record ist nicht Temporary

25. September 2007 16:02

Der PK ist eine einzelne Nummer, eben diese PK wie ich sie oben im Codebeispiel habe.

25. September 2007 16:15

Also ich hab jetzt mal was gebastelt um das zu testen:

Table 90000 "BLOB Test"
Field 1 Name = "Code", Data Type = Code, Length = 10
Field 5 Name = "TextBLOB", Data Type = BLOB

PimaryKey = Code

Codeunit 90000 "BLOB Test"
Globals:
BLOBTest = Record "BLOB Test "
BigTextVar = BigText
OutstreamVar = OutStream
InstreamVar = InStream
TextVar = Text 100
CR = Char
LF = Char

Code:

CR := 13;
LF := 10;

BigTextVar.ADDTEXT(STRSUBSTNO('Zeile 1%1%2',CR,LF));
BigTextVar.ADDTEXT(STRSUBSTNO('Zeile 2%1%2',CR,LF));
BigTextVar.ADDTEXT(STRSUBSTNO('Zeile 3%1%2',CR,LF));
BigTextVar.ADDTEXT(STRSUBSTNO('Zeile 4%1%2',CR,LF));

BLOBTest.INIT;
BLOBTest.Code := '1';
BLOBTest.TextBLOB.CREATEOUTSTREAM(OutstreamVar);
BigTextVar.WRITE(OutstreamVar);
BLOBTest.INSERT;

CLEAR(BLOBTest);
BLOBTest.GET('1');
BLOBTest.CALCFIELDS(TextBLOB);
BLOBTest.TextBLOB.CREATEINSTREAM(InstreamVar);

WHILE NOT InstreamVar.EOS DO BEGIN
  InstreamVar.READTEXT(TextVar);
  MESSAGE(TextVar);
END;


Der Code liefert nacheinander 4 Messages mit dem Inhalt
Zeile 1
Zeile 2
Zeile 3
Zeile 4

Ich kann da kein Problem feststellen.
Der Datensatz ist nachher auch in der Tabelle drin und kann jederzeit wieder ausgelesen werden.

25. September 2007 16:24

Jup.
Ih weiß auch nicht was bei mir da so richtig los war.
Entweder heute durchgehend betriebsblind.
Denn mir hat er andauernd Fehler um die Ohren gehauen.
Ich danke dir rkaufmann für deine Hilfe.