Announcement

Collapse
No announcement yet.

Exception bei TBlobField.LoadfromStream

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Exception bei TBlobField.LoadfromStream

    Hallo,<br>
    Mit folgender Prozedur habe ich versucht, eine eigene Struktur in ein BLOB-Feld einer MSAccess-Tabelle zu laden.<br>

    procedure MyProc(MyRec : TMyRec);<br>
    var<br>
    MyStream : TMemoryStream;<br>
    begin<br>
    MyTable.Edit;<br>
    MyStream := TMemoryStream.Create;<br>
    MyStream.Seek(0, soFromEnd);<br>
    MyStream.Write(MyRec, SizeOf(TMyRec));<br>
    (MyTable.FieldbyName('BLOBFeld') as TBLOBField).LoadfromStream(MyStream);<br>
    MyStream.Free;<br>
    MyTable.Post;<br>
    end;<br>

    Wenn ich das Programm in der Entwicklungsumgebung laufen lasse, funktionert dies (und ebenfalls das Lesen mit SavetoStream und MyStream.Read) einwandfrei.<br>
    Wenn ich jedoch die .exe-Datei starte, endet die Prozedur mit der Fehlermeldung : "Externe Exception EEFFACE".<br>
    Was mache ich falsch, und wie kann ich den Fehler beheben?<br>
    Besten Dank zu Voraus,<br>
    Christof

  • #2
    Hallo
    Procedure WriteStream2DB;
    Var MyStream:TMemoryStream;
    Begin
    try
    MYQuery.Edit;
    MyStream:=TBlobStream.Create(MyQueryMemo,bmWrite);
    NocheinStream.SaveToStream(PICStream);
    finally
    MyStream.free;
    end;
    end;

    Mach den Stream mit dem Blob Feld der Datenbank uns dann lesen und schreiben (bmWrite,bmRead

    Comment


    • #3
      Hallo Andreas,<br>
      besten Dank für den Tip; leider hat mich aber dies auch nicht weitergebracht.<br>
      Wenn ich den Blobstream in einen andern Stream kopiere, oder mit Read lesen will, wird die Exception ebenfalls ausgelöst.<br>
      Komisch ist vor allem, dass der Fehler in der Entwicklungsumgebung nicht vorkommt.<br>
      Wenn ich übrigens die gleiche Prozedur mit einer Paradox-Tabelle laufen lasse, funktioniert es einwandfrei.<br>
      Für weitere Tips bin ich sehr dankbar,<br>
      Christo

      Comment


      • #4
        Hi Christof <br>
        Kann es sein das es verschiedene Blob Typen in Access gibt <br>
        (Unicode Kompression ja/nein)<BR><BR>

        Du verwendest immerhin einen <b>MemoryStream</B> und keinen Strin

        Comment


        • #5
          Hallo Andreas,<br>
          Für binäre Daten gibt es in Access97 nur den Datentyp OLE-Objekt.<br>
          Bei meinen binären Daten handelt es sich um Druckkurven, welche jeweils 4'000 Integer-Werte, die Intervallzeit und einen Umrechnungsfaktor enthalten (und somit nicht in einem String Platz finden).<br>
          Die Real-Werte einzeln abzulegen, erachte ich auch nicht als sinnvoll, weil ich zu jedem Wert zusätzlich einen zusammengesetzten Schlüssel einfügen müsste, der mehr Platz braucht, als der Wert selber.<br>
          Wenn es keinen Weg gibt, diese Daten zur Laufzeit in die Access-Datenbank zu bringen, sehe ich mich gezwungen, das ganze Projekt in eine andere Datenbank zu portieren.<br>
          Aber zuvor hoffe ich natürlich auf weitere Tips zur Lösung des Problems.<br>
          Besten Dank zum Voraus,<br>
          Christo

          Comment


          • #6
            Welchen Sinn macht das Seek ans Ende?! Macht das nicht vielleicht Probleme? Oder 2. Muss vielleicht nach dem schreiben in den Stream Position wieder auf 0 gesezt werden um daraus zu lesen? (Sicher bin ich nicht, versuchs mal

            Comment


            • #7
              Hallo Karsten,<br>
              Das Seek ans Ende ist nur, weil ich den Vorgang mehrmals wiederholen will, bevor ich den Stream wieder freigebe; aber auch ohne seek passiert dasselbe.<br>
              Leider bringt auch das Setzen der Position im Stream auf 0 nichts.<br>
              Trotzdem besten Dank für den Tip.<br&gt

              Comment


              • #8
                Hallo an alle,

                hat jemand dieses Problem schon in den Griff bekommen ? ich habe leider das gleiche Problem wie Herr Schädeli.

                weiß jemand Rat ?

                Dank

                Comment


                • #9
                  Hallo,

                  Access wandelt alle BLOB-Werte intern um. Das kann nicht funktionieren. Ich weiche in solchen Fällen (und wenn es schon eine Desktop-DB sein muß) auf Paradox aus. Da sollte das kein Problem sein.

                  Grüzzlis von
                  Thoma

                  Comment


                  • #10
                    Hallo,

                    &gt;..Das kann nicht funktionieren.

                    Widerspruch - in meinem ADO-Buch ist ein Beispiel, dass BLOb in einer ACCESS-Datenbank verwendet :-)

                    Für dieses Problem gibt es zwei Lösungs-Optionen: <br>
                    1. Registry-Eintrag DisableHeapLookAside (siehe Microsoft Knowlegdebase-Artikel Q195008 und Q195009), oder <br>
                    2. Über die TADOBlobStream-Methode Seek die ersten 78 Byte überspringe

                    Comment

                    Working...
                    X