Results 1 to 6 of 6

Thread: StringList in een Blob-field

  1. #1

    StringList in een Blob-field

    Hallo

    Ik probeer een Stringlist in een blob-veld te zetten en deze later natuurlijk
    ook weer eruit te lezen.

    Naast het zip-bestand zet ik hieronder de code waarmee ik bezig ben
    om juist dat te behalen. Zoals je zoet heb ik al vele methodes uitgeprbeerd
    waarvan ik dus drie toon. Als je bv in Memo1 text met meer dan een regel
    ingeeft, wordt ebkel de eerste regel teruggelzen. Of dat betekent, dat alles
    kerig in de blob-field wordt gezet weet ik niet. Een alternatief of correctie
    zou ik erg apprecieren. Bedankt:

    Code:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids, DBGrids, StdCtrls, Buttons, DB, DBTables
      {DB, DBTables added by myself};
    
    type
      TForm1 = class(TForm)
        DBGrid1: TDBGrid;
        Memo1: TMemo;
        Edit1: TEdit;
        BitBtn_Store: TBitBtn;
        BitBtn_Retrieve: TBitBtn;
        Memo2: TMemo;
        procedure BitBtn_StoreClick(Sender: TObject);
        procedure BitBtn_RetrieveClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
      ComponentStringList: TStringList;
    
    implementation
    
    {$R *.dfm}
    
    uses Unit_Datamodule;
    
    procedure TForm1.BitBtn_StoreClick(Sender: TObject);
    var BlobStream: TStream;
        MemoryStream: TMemoryStream;
    begin
        // POGING 1
      MemoryStream := TMemoryStream.Create;
      try
       MemoryStream.Position := 0;
       ComponentStringList := TStringList.Create;
       try
    
        ComponentStringList.Add(memo1.Lines.Text);
        ComponentStringList.Add(Edit1.Text);
    
        ComponentStringList.SaveToStream(MemoryStream);
        MemoryStream.Position := 0;
    
        Datamodule2.ABSTable1.edit;
        TBlobField(Datamodule2.ABSTable1.FieldByName('StringGriidBlobField')).LoadFromStream(MemoryStream);
        Datamodule2.ABSTable1.post;
    
       finally
        ComponentStringList.free;
      end;
    
      finally
        MemoryStream.Free;
      end;
    
    {   // POGING 2
     Datamodule2.ABSTable1.edit;
     BlobStream := Datamodule2.ABSTable1.CreateBlobStream(Datamodule2.ABSTable1.FieldByName('StringGriidBlobField'),bmWrite);
     try
      BlobStream.Seek(0, soFromBeginning);
      BlobStream.position := 0;
    
      ComponentStringList := TStringList.Create;
      try
        ComponentStringList.Add(memo1.Lines.Text);
        ComponentStringList.Add(Edit1.Text);
    
         memo2.Lines.Text := ComponentStringList[0];
    
         ComponentStringList.SaveToStream(BlobStream);
       finally
        ComponentStringList.free;
      end;
    
     finally
      BlobStream.free;
     end;
     Datamodule2.ABSTable1.post;
    }
    end;
    
    procedure TForm1.BitBtn_RetrieveClick(Sender: TObject);
    var BlobStream: TStream;
        MemoryStream: TMemoryStream;
    begin
    {==
      // POGING 1
      //alternatief dat ook niet werkt
      ComponentStringList := TStringList.Create;
      try
         memo1.Lines.Clear;
         Edit1.Text := '';
    
         ComponentStringList.Assign(Datamodule2.ABSTable1.FieldByName('StringGriidBlobField'));
    
         memo1.Lines.Text := ComponentStringList[0];
         //Edit1.Text := ComponentStringList[1];
    
       finally
        ComponentStringList.free;
      end;
    ==}
    
      // POGING 2
      MemoryStream := TMemoryStream.Create;
      try
       MemoryStream.Position := 0;
    
       ComponentStringList := TStringList.Create;
       try
    
        TBlobField(Datamodule2.ABSTable1.FieldByName('StringGriidBlobField')).SaveToStream(MemoryStream);
        MemoryStream.Position := 0;
    
        ComponentStringList.LoadFromStream(MemoryStream);
    
         memo1.Lines.Text := ComponentStringList[0];
         //Edit1.Text := ComponentStringList[1];
    
       finally
        ComponentStringList.free;
      end;
    
      finally
        MemoryStream.Free;
      end;
    
    {  // POGING 3
     BlobStream := Datamodule2.ABSTable1.CreateBlobStream(Datamodule2.ABSTable1.FieldByName('StringGriidBlobField'),bmRead);
     try
      BlobStream.Seek(0, soFromBeginning);
      BlobStream.position := 0;
    
      ComponentStringList := TStringList.Create;
      try
         memo1.Lines.Clear;
         Edit1.Text := '';
    
         ComponentStringList.LoadFromStream(BlobStream);
    
         memo1.Lines.Text := ComponentStringList[0];
         //Edit1.Text := ComponentStringList[1];
    
       finally
        ComponentStringList.free;
      end;
    
     finally
      BlobStream.free;
     end;
    }
    end;
    
    
    end.
    Attached Files Attached Files

  2. #2
    Even een stapje terug: waarom zo ingewikkeld met blobs en streams? Een stringlist bevat toch gewoon tekst?
    Marcel

  3. #3

    egenlijk wil ik dit

    Eigenlijk wil ik components eerst in strings converteren,
    deze in een stringlist opnemen en de hee stringlist in de
    blob-veld.

    Dit is dus enkel de eerste stap daarnartoe....

    Bedankt

  4. #4
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Dat is nog geen antwoord op Marcel's vraag
    Waarom Blobs en streams?

    Ieder type data heeft zo z'n eigen type field.
    Zo heb je StringFields voor strings, IntegerFields voor Integers, MemoFields
    voor lijsten met tekst (hé, dat klinkt goed in jouw geval), GraphicFields voor
    plaatjes en BlobFields voor grote hoeveelheden data waarvoor geen specifiek
    ander type veld bestaat.

    Sla alles dus op in een gewoon MemoField (daar is dit type tenslotte voor) en
    je bent klaar

    Click image for larger version. 

Name:	NLDStringsDB.png 
Views:	218 
Size:	18.2 KB 
ID:	5268

    Greetz,

    Peter.
    Attached Files Attached Files
    TMemoryLeak.Create(Nil);

  5. #5

    en toch kan ik stringlists in een blob-veld opslaan...

    Bedankt VideoRipper, maar toch kan ik dat hier niet gebruiken;
    ik moet de componenten die opgeslagen ijn in het table-veld
    (seperaat) ook terughalen en op hun plaats terug kunnen zetten.

    Daarom gebruik ik StringList met in elk element een component,
    omgezet naar string en opgeslagen in de stringlist. Deze stringlist
    zet ik dus in de blob-veld.

    Het werkt, hier sla ik de texten van memo1 en Edit1 in de
    stringlist en zet deze stringlist in de blob-veld. Ook kan k het
    daarna vanelfsprekend terughalen.

    De rest is vrij eenvoudig....

    Code:
    procedure TForm1.BitBtn_StoreClick(Sender: TObject);
    begin
       ComponentStringList := TStringList.Create;
       try
    
         ComponentStringList.Add ( memo1.lines.Text );
         ComponentStringList.Add( Edit1.Text);
    
         Memo2.Lines.Text := memo1.lines.Text ;
    
         Datamodule2.ABSTable1.edit;
         DataModule2.ABSTable1.FieldByName('StringGriidBlobField').AsString := ComponentStringList.CommaText;
           //StringGriidBlobField is en blijft een BLOB-veld
         Datamodule2.ABSTable1.post;
    
         memo1.Lines.Text := ComponentStringList[0];
         Edit1.Text := ComponentStringList[1];
    
       finally
        ComponentStringList.free;
      end;
    end;
    
    //=======================================================================
    
    procedure TForm1.BitBtn_RetrieveClick(Sender: TObject);
    begin
       ComponentStringList := TStringList.Create;
       try
    
         ComponentStringList.CommaText := DataModule2.ABSTable1.FieldByName('StringGriidBlobField').AsString;
    
         memo1.Lines.Text := ComponentStringList[0];
         Edit1.Text := ComponentStringList[1];
    
       finally
        ComponentStringList.free;
      end;
    end;

  6. #6
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Ik snap nog steeds je probleem niet, maar als jij gelukkig bent, ben ik het ook

    Greetz,

    Peter.
    TMemoryLeak.Create(Nil);

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •