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 :

transtypage de class incorrect


Sujet :

Delphi

  1. #1
    Membre très actif
    Inscrit en
    Mars 2007
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 209
    Par défaut transtypage de class incorrect
    bonjour
    je suis sous delphi 2010 plaform 64

    sur ce code suivant je reçois le message d'erreur : transtypage de class incorrect

    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
    procedure TFMain.btnPlayClick(Sender: TObject);
    var
      B: TBlobStream;
      M: TMemoryStream;
    begin
      B := TBlobStream.Create(cds.FieldByName('doc')As TBlobField, bmRead); {create blob stream}
      Screen.Cursor := crHourGlass; {wait hourglass}
      try
        M := TMemoryStream.Create; {create memory stream}
        try
          M.CopyFrom(B, B.Size); {copy from blob to memory stream}
          {Attempt to play sound.  Raise exception if something goes wrong}
          Win32Check(PlaySound(M.Memory, 0, SND_SYNC or SND_MEMORY));
        finally
          M.Free;
        end;
      finally
        Screen.Cursor := crDefault;
        B.Free;
      end;
    end;
    
    une idée ou une autre solution pour lire des fichiers son (sound) directement dans un enregistrement TBlobField
    Merci pour votre aide

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 464
    Par défaut
    Bonjour,

    Pourquoi créer un TBlobStream pour le transtyper en TBlobField qui se rapporte plutôt à une base de donnée (il me semble) pour aller remplir un TMemoryStream qui sait très bien faire un M.LoadFromFile(...).
    Il me semble qu'après le LoadFromFile, il faut ramener le pointeur du Stream au début en faisant M.Position:=0;

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 124
    Par défaut
    ShowMessage(cds.FieldByName('doc').ClassName) affiche quoi String ? Blob ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 500
    Par défaut
    Hello,

    +1 pour la question posée @ShaiLeTroll

    Autre question,

    Quelle bibliothèque de composants utilisez-vous pour vous connecter à la base de données ?

    Quels sont les formats de son que vous stockez dans la base de données ?

    • Uniquement des fichiers .WAV ?
    • Ou également d'autres formats comme .MP3, .OGG, etc. ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Membre expérimenté
    Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 585
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par MIWAN Voir le message
    bonjour
    je syis sous delphi 2010 plaform 64

    sur ce code suivant je reçois le message d'erreur : transtypage de class incorrect

    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
    procedure TFMain.btnPlayClick(Sender: TObject);
    var
      B: TBlobStream;
      M: TMemoryStream;
    begin
      B := TBlobStream.Create(cds.FieldByName('doc')As TBlobField, bmRead); {create blob stream}
      Screen.Cursor := crHourGlass; {wait hourglass}
      try
        M := TMemoryStream.Create; {create memory stream}
        try
          M.CopyFrom(B, B.Size); {copy from blob to memory stream}
          {Attempt to play sound.  Raise exception if something goes wrong}
          Win32Check(PlaySound(M.Memory, 0, SND_SYNC or SND_MEMORY));
        finally
          M.Free;
        end;
      finally
        Screen.Cursor := crDefault;
        B.Free;
      end;
    end;
    
    une idée ou une autre solution pour lire des fichiers son (sound) directement dans un enregistrement TBlobField
    Merci pour votre aide
    L’erreur "transtypage de class incorrect", Cela signifie que le champ 'doc' n’est pas reconnu comme un TBlobField

    Vérifier le type du champ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if cds.FieldByName('doc') is TBlobField then
      B := TBlobStream.Create(TBlobField(cds.FieldByName('doc')), bmRead)
    else
      ShowMessage('Le champ "doc" n''est pas un TBlobField');
    Alternative avec CreateBlobStream
    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
    var
      B: TStream;
      M: TMemoryStream;
    begin
      Screen.Cursor := crHourGlass;
      try
        B := cds.CreateBlobStream(cds.FieldByName('doc'), bmRead);
        try
          M := TMemoryStream.Create;
          try
            M.CopyFrom(B, B.Size);
            Win32Check(PlaySound(M.Memory, 0, SND_SYNC or SND_MEMORY));
          finally
            M.Free;
          end;
        finally
          B.Free;
        end;
      finally
        Screen.Cursor := crDefault;
      end;
    end;
    On ne peut pas faire confiance à un code qu'on n'a pas entièrement écrit soi‑même, et encore moins à celui qu'on a écrit entièrement. :aie:

  6. #6
    Membre très actif
    Inscrit en
    Mars 2007
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 209
    Par défaut
    bonjour et grand merci a votre interpelation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Bernard B 
    ShaiLeTroll 
     fred1599
    *******************
    XeGregory votre code a réussi je doit vous remercie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      
    B := TBlobStream.Create(cds.FieldByName('doc')As TBlobField, bmRead);
    j'ai une demande si vous avez le temps : comment lire un fichier .mp3 ?

    je dois faire Résoudre

  7. #7
    Membre expérimenté
    Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 585
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par MIWAN Voir le message
    Comment lire un fichier .mp3 ?
    Utiliser le composant TMediaPlayer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.ButtonPlayClick(Sender: TObject);
    begin
      MediaPlayer1.FileName := 'C:\chemin\fichier.mp3';
      MediaPlayer1.Open;
      MediaPlayer1.Play;
    end;
     
    procedure TForm1.ButtonStopClick(Sender: TObject);
    begin
      MediaPlayer1.Stop;
    end;
    Alternative si ton MP3 est dans un TBlobStream : Sauvegarder temporairement le MP3
    La solution consiste à écrire le contenu du TBlobStream dans un fichier temporaire, puis le lire avec TMediaPlayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var
      TempFile: string;
      FileStream: TFileStream;
    begin
      TempFile := GetTempFileName + '.mp3';
      FileStream := TFileStream.Create(TempFile, fmCreate);
      FileStream.CopyFrom(BlobStream, BlobStream.Size);
      FileStream.Free;
     
      MediaPlayer1.FileName := TempFile;
      MediaPlayer1.Open;
      MediaPlayer1.Play;
    end;
    On ne peut pas faire confiance à un code qu'on n'a pas entièrement écrit soi‑même, et encore moins à celui qu'on a écrit entièrement. :aie:

  8. #8
    Membre très actif
    Inscrit en
    Mars 2007
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 209
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    var
      TempFile: string;
      FileStream: TFileStream;
    begin
      TempFile := GetTempFileName + '.mp3';
      FileStream := TFileStream.Create(TempFile, fmCreate);
      FileStream.CopyFrom(BlobStream, BlobStream.Size);
      FileStream.Free;
     
      MediaPlayer1.FileName := TempFile;
      MediaPlayer1.Open;
      MediaPlayer1.Play;
    end;
    Merci et excuse de votre Temps

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

Discussions similaires

  1. HRESULT 0x800401f3 Chaîne de classe incorrecte
    Par 3aychoucha dans le forum MFC
    Réponses: 3
    Dernier message: 01/12/2010, 11h28
  2. [D4]type originel après transtypage de classe
    Par omen999 dans le forum Langage
    Réponses: 7
    Dernier message: 10/03/2009, 11h37
  3. Transtypage de classe incorrect
    Par Shibron dans le forum Rave
    Réponses: 1
    Dernier message: 09/02/2009, 16h45
  4. Transtypage de classe
    Par A&Z dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 13/08/2008, 11h21
  5. chaine de classe incorrecte!
    Par snoop94 dans le forum Langage
    Réponses: 4
    Dernier message: 26/01/2006, 17h44

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