Announcement

Collapse
No announcement yet.

Stream, Blob und InterBase6

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

  • #16
    Hallo,

    OPEN SOURCE wäre natürlich viel besser als FreeWare (eine DCU ist nur für eine bestimmte Delphi-Version zu gebrauchen). Und in Projekten verlässt man sich nur ungern darauf, dass ein Dritter auch in Zukunft diese DCUs für neue Delphi-Versionen bereitstellt

    Comment


    • #17
      Hallo Herr Kosch,<br>
      <br>
      Sie haben recht, ich habe den Quellcode mit auf meine HP gestellt.<br>
      Jetzt können dies auch User mit Delphi 6 nutzen.<br>
      <br>
      Gruss M.Müller<br&gt

      Comment


      • #18
        Hallo,

        hier bin ich wieder. Natürlich mit einem Problem. Das mit den Streams habe ich inzwischen umsetzen können (ich glaub's wenigstens). Aber beim Schreiben meiner Daten in den IB bekomme ich folgende Fehlermeldung:<br>
        Im Projekt ... ist eine Exception der Klasse EIBInterBaseError aufgetreten. Meldung:'feature is not supported. Blob and array data types are not supported for compare (?) operation. Prozess wurde ...

        Hier der Aktuelle Code in auszügen:

        uses<br>
        Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
        StdCtrls, comobj, Buttons, CPort, comportdll, Db, IBCustomDataSet;<br>
        procedure Tfrm_save.bbt_msaveClick(Sender: TObject);<br>
        var<br>
        mwObjekt : TMemoryStream;<br>
        blobwert : TStream;<br>
        neumwert, mwert, swert, fname : string;<br>
        neumwstrlen, mwstrlen, i : integer;<br>
        begin<br>
        if MessageDlg('Möchten Sie die Messung wirklich speichern ?',mtConfirmation, [mbYes, mbNo], 0) = mrYes then<br>
        begin<br>
        repeat<br>
        swert:= InputBox('Messung Speichern',<br>
        'Eine Beschreibung eingeben.Max.40 Zeichen','');<br>
        until length(swert)<=40;<br>
        swert:=swert+' '+DateToStr(Date)+','+TimeToStr(Time);<br>
        dbmod.ibdb_savemess.Open;<br>
        dbmod.ibt_savemess.StartTransaction;<br>
        dbmod.ibds_sm_save.Active:=true;<br>
        dbmod.ibds_sm_save.Append;<br>
        dbmod.ibds_sm_saveNAME.Value:=swert;<br>
        .....<br>
        mwert:=manu.tprec.messwert;<br>
        mwstrlen:=Length(mwert);<br>
        mwObjekt:=TMemoryStream.Create;<br>
        mwObjekt.WriteBuffer(Pointer(mwert)^,mwStrLen);<br >
        mwObjekt.Position:=0;<br>
        blobwert:=dbmod.ibds_sm_save.CreateBlobStream(dbmo d.ibds_sm_saveMESSWERT,bmWrite);<br>
        blobwert.WriteBuffer(Pointer(mwert)^,mwStrLen);<br >
        //Verwende ich hier die UNIT STREAMS von Herrn Schumann und blobwert.WriteComponent(xxx) erhalte ich beim compilieren die Fehlermeldung "incompatible Typen TComponent und TMemoryStreamExt". Versuche ich es mit blobwert.WriteComponent(mwObjekt) kommt "incompatible Typen TComponent und TMemoryStream".<br>
        delay(1000);<br>
        { neumwstrlen:=blobwert.Size;<br>
        setlength(neumwert,neumwstrlen);<br>
        blobwert.Position:=0;<br>
        blobwert.ReadBuffer(Pointer(neumwert)^,neumwStrLen );}<br>
        dbmod.ibds_sm_save.Post; //hier kommt die Fehlermeldung<br>
        dbmod.ibds_sm_save.Active:=false;<br>
        dbmod.ibt_savemess.Commit;<br>
        dbmod.ibdb_savemess.Close;<br>
        end;<br>
        end;<br>

        Die Umwandlung vom String in TMemoryStream und wieder zurück ist ok.

        Vielen Dank Walte

        Comment


        • #19
          Hallo Walter,<br>
          " ... blobwert.WriteComponent(xxx) erhalte ich beim compilieren die Fehlermeldung <br>
          "incompatible Typen TComponent und TMemoryStreamExt". Versuche ich es mit blobwert.<br>
          WriteComponent(mwObjekt) kommt "incompatible Typen TComponent und TMemoryStream ...".<br>
          Das ist auch richtig. Die Methode WriteComponent erwartet einen TComponent Nachfahren. TMemoryStremExt ist ein TMemoryStream<br>
          Nachfahre. Daher kann das gar nicht klappen. <br>
          Woher die Fehlermeldung kommt weiß ich leider auch nicht.<br>
          Jens Schumann<br&gt

          Comment


          • #20
            Hallo Hr. Röder,<br><br>Haben Sie in Ihrer Messwertreihe auch #00- Werte?<br>
            Wenn ja, so hat IB Probleme solche Zeichen in die DB zu speichern.<br> Interbase speichert Streams ähnich wie PChar als #0-Terminierte<br>Strings.<br><br>Gruss, M.Mülle

            Comment


            • #21
              Hallo,

              erst mal Dank für die prompte Reaktion.

              Wie die Messreihe ausschaut kann man weiter oben im Forum sehen. Da es sich um Integerwerte handelt kann ich nicht absehen ob irgendwo mal ein #00 auftritt. Kann bei einem Bild nicht auch zufällig die Zeichenkombination #00 kommen? Des Weiteren habe ich auch versuche unternommen eine lange Zeichenkette von chr(0) bis chr(255) per Zufall erzeugen zu lassen, es kommen fast alle Zeichen (auch die nicht Darstellbaren) vor, dieses Blob wird in die DB einwandfrei übernommen.

              Danke Gruß Walter

              Comment

              Working...
              X