IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Manipulations Couple DBMemo/(Blob Postgresql) [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 12
    Points : 14
    Points
    14
    Par défaut Manipulations Couple DBMemo/(Blob Postgresql)
    Bonjour à tous,
    Je reviens de nouveau vers la communauté pour essayer de m'aider sur un problème que je n'arrive pas à résoudre ... non faute d'avoir parcouru de long en large les différents fils de discussion & FAQ sur les "BLOBS" et "DBMEMO" !!!
    J'ai une forme avec des "edits" (no problémo avec ceux-ci ) surtout un "DBMemo"/"DBImage" (en fait plusieurs mais pour l'exposé je me cantonne à un seul)

    Quand je veux sauvegarder dans la BD Postgresql (colonnes type : bytea)
    je n'arrive pas à relire et je ne peux pas contrôler du même coup la sauvegarde

    dbmInfo1 est un DBMemo lié à la colonne "Regles_Info1_Save1"

    Code de la Base sous Postgresql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    -- Table: "TRegles"
     
    -- DROP TABLE "TRegles";
     
    CREATE TABLE "TRegles"
    (
      "Regles_ID" serial NOT NULL,
      "Regles_Intitule" character varying(20) NOT NULL,
      "Regles_Libelle" character varying(60),
      "Regles_Data1" integer NOT NULL,
      "Regles_Data2" integer,
      "Regles_Date1" character varying(10),
      "Regles_Date2" character varying(10),
      "Regles_Info1" bytea,
      "Regles_Info1_Save1" bytea,
      "Regles_Info1_Save2" bytea,
      "Regles_Info1_Save3" bytea,
      "Regles_Info1_Save4" bytea,
      "Regles_Info1_Save5" bytea,
      "Regles_Info2" bytea,
      "Regles_Info2_Save1" bytea,
      "Regles_Info2_Save2" bytea,
      "Regles_Info2_Save3" bytea,
      "Regles_Info2_Save4" bytea,
      "Regles_Info2_Save5" bytea,
      CONSTRAINT "pkRegles_ID" PRIMARY KEY ("Regles_ID" )
    )
    WITH (
      OIDS=FALSE
    );
    ALTER TABLE "TRegles"
      OWNER TO postgres;
     
    -- Index: "idx_Regles"
     
    -- DROP INDEX "idx_Regles";
     
    CREATE UNIQUE INDEX "idx_Regles"
      ON "TRegles"
      USING btree
      ("Regles_Intitule" COLLATE pg_catalog."default" );
    le code pour la sauvegarde :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     var AMemStream : TMemoryStream;
     
        with dtmMain,sqlqRegles do begin
     
          ParamByName('peReglInfo1').AsBlob := AnsiString(mRegles_Info1.Lines);
          ParamByName('peReglInfo2').AsBlob := AnsiString(mRegles_Info2.Lines);
     
          AMemStream:= tMemoryStream.Create;
          try
            dbmInfo1.Lines.SaveToStream(AMemStream);
            AMemStream.Seek(0, soFromBeginning);
            ParamByName('peRegles_Info1_Save1').LoadFromStream(AMemStream, ftMemo);
     
            ExecSQL;
          finally
            AMemStream.free;
          end;
    end;
    le code de relecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      with dtmMain.sqlqRegles, frm1Regle do
      begin
        mRegles_Info1.Text    := FieldByName('Regles_Info1').AsString;
        mRegles_Info2.Text    := FieldByName('Regles_Info2').AsString;
     
        dbmInfo1.Text := FieldByName('Regles_Info1_Save1').AsString;
      end;
    voilà quelques jours où je tourne en rond sans échappatoire j'espère trouver réponse et / ou conseil pour résoudre mon problème

    En remerciant par avance.

    Daniel

  2. #2
    Membre averti
    Profil pro
    au repos
    Inscrit en
    Février 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2013
    Messages : 156
    Points : 331
    Points
    331
    Par défaut
    hello tengu,

    moi avec une base postgresql ayant un champ de type text* tout est automatique . J'ai un tdbMemo relié à ce champ. Avec un tdbnavigator, j'arrive à écrire dans le champ de la base ce qu'il y a dans le tdbMemo et je relis bien ce que j'ai écrit. Aucun code supplémentaire.


    Amicalement, nullosse

    * In addition, PostgreSQL provides the text type, which stores strings of any length. Although the type text is not in the SQL standard, several other SQL database management systems have it as well.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Nullosse Voir le message
    hello tengu,

    moi avec une base postgresql ayant un champ de type text* tout est automatique . J'ai un tdbMemo relié à ce champ. Avec un tdbnavigator, j'arrive à écrire dans le champ de la base ce qu'il y a dans le tdbMemo et je relis bien ce que j'ai écrit. Aucun code supplémentaire.
    Mais dans ma base ces champs me serviront à stocker indifféremment des images ou des chaînes ASCII.

    Écriture :
    Le principe est bien de transférer le contenu de la DBMemo vers un TmemoryStream, de charger le buffer du champ du DataSet à partir de la TMemoryStream puis d'enregistrer le tout à partir d'une Query

    Lecture :
    à partir de FieldByName('Colonne_Blob') comme TBlobField le charger dans une TMemoryStream puis le transférer vers le DBMemo

    j'ai essayé et cela ne marche toujours pas.

    Comment m'en sortir de ce mauvais pas

  4. #4
    Membre averti
    Profil pro
    au repos
    Inscrit en
    Février 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2013
    Messages : 156
    Points : 331
    Points
    331
    Par défaut
    hello tengu,
    je ne sais pas si cela va t'inspirer mais voici le code que j'utilise pour écrire une image dans un champ de type bytea d'une base postgresql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    var BlobStream: TStream;
      FileStream: TStream;
    begin
      if SQLQuery1.Active then begin
         OpenDialog1.Filter :=
         'All image files (*.bmp,*.jpg,*.png,*.gif)|*.bmp;*.jpg;*.png;*.gif|' +
         'BMP files (*.bmp)|*.bmp|' +
         'JPEG files (*.jpg)|*.jpg|' +
         'PNG files (*.png)|*.png|' +
         'GIF files (*.gif)|*.gif';
        if OpenDialog1.Execute then begin
          begin
           if SQLQuery1.State <> dsEdit then
              SQLQuery1.Edit;
     
            try
              FileStream := TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
              try
                BlobStream := SQLQuery1.CreateBlobStream(
                SQLQuery1.FieldByName('Pict'), bmWrite);
                BlobStream.CopyFrom(FileStream, FileStream.Size);
                SQLQuery1.Post;
              finally
               FileStream.Free;
              end;
            finally
              BlobStream.Free;
            end;
          end;
        end;
      end;
    Amicalement, nullosse

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Après avoir adapté cela fonctionne Nickel-Chrome. et surtout pour ta collaboration.


    Daniel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD14] Manipuler les champs blobs sous une base externe
    Par devalender dans le forum WinDev
    Réponses: 15
    Dernier message: 20/04/2020, 15h23
  2. Ecriture d'un blob dans une base postgresql
    Par isoman dans le forum Hibernate
    Réponses: 2
    Dernier message: 06/02/2009, 12h24
  3. [MySQL] manipulation de champs blob
    Par phoque.r dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/06/2007, 15h21
  4. DBMemo + Champs BLOB ?
    Par nesbla dans le forum Bases de données
    Réponses: 7
    Dernier message: 23/06/2004, 14h47
  5. [Blob] PostGreSQL Beta4 pour Windows
    Par YanK dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 09/10/2003, 11h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo