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

Delphi Discussion :

TMemoryStream en Delphi 10.3.3


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    developpeur
    Inscrit en
    Mars 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Bénin

    Informations professionnelles :
    Activité : developpeur

    Informations forums :
    Inscription : Mars 2010
    Messages : 25
    Par défaut TMemoryStream en Delphi 10.3.3
    Bonjour à tous, j'ai un petit souci avec l'utilisation du MemoryStream pour insérer une image bmp dans une table de ma base de données PostgreSQL 9.5
    Voici la structure de la table

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE utilisateur."UTILISATEUR"
    (
      "MOTPASS" character varying NOT NULL,
      "NOMUTI" character varying,
      "IMAGE" bytea,
      CONSTRAINT "UTILISATEUR_pkey" PRIMARY KEY ("MOTPASS")
    );

    Voici mon code

    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
    procedure TSIGNATAIRE.BitBtn1Click(Sender: TObject);
    var IMG:TBitmap;
          MS:TMemoryStream;
    begin
    MS:=TMemoryStream.Create;
    IMG:=TBitmap.Create;
    IMG.CleanupInstance;
    IMG.LoadFromFile('D:\SIGN.BMP');
    IMG.SaveToStream(MS);
    MS.position:=0;
     
    FDTable1.Edit;
    TBlobField(FDTable1.FieldByName('IMAGE')).LoadFromStream(MS);
    FDTable1.Post;
    end;
    Mais à l'exécution un méssage d'erreur s'affiche <<Transtypage de classe incorrect>>, veuillez m'orienter sur la source de l'erreur.
    Merci!

  2. #2
    Membre chevronné Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Par défaut
    Je suppose que la ligne impliquée est celle du TBlobField

    Essayez à la place :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FDTable1.FieldByName('IMAGE').LoadFromStream(MS,ftBlob)
    ne pas oublier MS.position := 0 après l'appel.

  3. #3
    Membre averti
    Profil pro
    developpeur
    Inscrit en
    Mars 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Bénin

    Informations professionnelles :
    Activité : developpeur

    Informations forums :
    Inscription : Mars 2010
    Messages : 25
    Par défaut
    D'accord je retoure à mon code rapidement pour la correction.

  4. #4
    Membre averti
    Profil pro
    developpeur
    Inscrit en
    Mars 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Bénin

    Informations professionnelles :
    Activité : developpeur

    Informations forums :
    Inscription : Mars 2010
    Messages : 25
    Par défaut
    Citation Envoyé par blonde Voir le message
    Je suppose que la ligne impliquée est celle du TBlobField

    Essayez à la place :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FDTable1.FieldByName('IMAGE').LoadFromStream(MS,ftBlob)
    ne pas oublier MS.position := 0 après l'appel.
    Avec ça, le compilateur effiche <<Trop de paramètres originaux>>

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 619
    Billets dans le blog
    65
    Par défaut
    Pourquoi pas directement un LoadfromFile ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TSIGNATAIRE.BitBtn1Click(Sender: TObject);
    begin
    FDTable1.Edit;
    TBlobField(FDTable1.FieldByName('IMAGE')).LoadFromFile('D:\SIGN.BMP');
    FDTable1.Post;
    end;
    non testé car bientôt en rendez-vous

  6. #6
    Membre chevronné Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Pourquoi pas directement un LoadfromFile ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TSIGNATAIRE.BitBtn1Click(Sender: TObject);
    begin
    FDTable1.Edit;
    TBlobField(FDTable1.FieldByName('IMAGE')).LoadFromFile('D:\SIGN.BMP');
    FDTable1.Post;
    end;
    non testé car bientôt en rendez-vous
    Mais oui, tu as raison. Hi hi, je n'avais même pas lu le début du code

  7. #7
    Membre averti
    Profil pro
    developpeur
    Inscrit en
    Mars 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Bénin

    Informations professionnelles :
    Activité : developpeur

    Informations forums :
    Inscription : Mars 2010
    Messages : 25
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Pourquoi pas directement un LoadfromFile ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TSIGNATAIRE.BitBtn1Click(Sender: TObject);
    begin
    FDTable1.Edit;
    TBlobField(FDTable1.FieldByName('IMAGE')).LoadFromFile('D:\SIGN.BMP');
    FDTable1.Post;
    end;
    non testé car bientôt en rendez-vous
    Y a plus d'erreur, ça marche bien

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 619
    Billets dans le blog
    65
    Par défaut
    Donc, il s'agit d'un problème de définition de champ (ce code fonctionne parfaitement avec Firebird et SQLite)
    comme il s'agit de PostGreSQL et Firedac il faut aller en chercher les spécificités et vérifier les paramètres de connexion
    https://docwiki.embarcadero.com/RADS...eSQL_(FireDAC)
    Regardez en particulier les options ExtendedMetatadata, OidAsBlob et unKnownFormat du FDConnection, testez en définissant les champs pour vérifier que le champ image est considéré comme un ftBlob
    car ce qui ne semble pas être apprécié dans l'instyrcution est le transtypage TBlobField( )

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

Discussions similaires

  1. Différences entre Delphi et Visual Basic ?
    Par Anonymous dans le forum Débats sur le développement - Le Best Of
    Réponses: 75
    Dernier message: 30/03/2009, 20h09
  2. Réponses: 1
    Dernier message: 13/05/2002, 09h19
  3. [Kylix] Migration delphi -> kylix
    Par Christian dans le forum EDI
    Réponses: 1
    Dernier message: 03/04/2002, 22h50
  4. Réponses: 4
    Dernier message: 27/03/2002, 11h03
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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