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

Langage Delphi Discussion :

Problème pointeur et string


Sujet :

Langage Delphi

  1. #1
    Membre régulier Avatar de jodan33
    Homme Profil pro
    DEveloppeur interoperabilité
    Inscrit en
    Mars 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : DEveloppeur interoperabilité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 95
    Points : 71
    Points
    71
    Par défaut Problème pointeur et string
    Bonjour,
    j'ai un souci avec des pointeurs , je dois récupérer des libelllés pour les afficher dans des tlmdShapecontrol, cependant j'ai un message d'erreur qui bloque ma procedure.
    message : impossible de convertir le variant (Null) en type (String).Voici le bout de code impliqué:
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
     while (not eof) do
        begin
       // MessageDlg('entrée boucle parcours', mtWarning, [mbOK], 0);
          if (nextSectionDisp<8) then
          begin
         //   MessageDlg('Cas où nb Categ <= 8', mtWarning, [mbOK], 0);
            nextSectionDisp:=nextSectionDisp+1;
            codeSectionUniq:=FieldByname('CODPAR_SECTION').Value;
           // showmessage(codesectionuniq);
            //MessageDlg('nbControls= '+Inttostr(gb_plat.ControlCount-1), mtWarning, [mbOK], 0);
            for i:=0 to gb_plat.ControlCount-1 do
            begin
            // MessageDlg(IntToStr(i)+'ème Parcours des boutons Categ', mtWarning, [mbOK], 0);
              if gb_plat.Controls[i] is TLMDShapeControl then
              begin
                if (gb_plat.Controls[i] as TLMDShapeControl).name = 'b_s_'+inttostr(nextSectionDisp) then
                begin
                 MessageDlg('Le bouton '+IntToStr(i)+' sélectionné est celui à afficher', mtWarning, [mbOK], 0);
                  with (gb_plat.Controls[i] as TLMDShapeControl) do
                  begin
                  //  Caption.Caption := String(FieldByname('LIBSECTION').Value);
                  //requete remplace ligne dessus
     
                            paraext2:=i;
                            showmessage(inttostr(paraext2)) ;
                            DMTactile.NewQry(Qry1);
                                   with Qry1 do
                                      begin
                                      if active then close;
                                      Sql.Clear;
                                      sql.Add('select par_codtbl,par_lib as LIBSECTION, par_ext2');      //AS LIBSECTION
                                      sql.Add('from  parametres');
                                      Sql.Add('  WHERE    par_ext2=:paraext2 and par_codtbl=''CATEG''');           //order by par_ext2
                                      open;
                                        Caption.Caption := String(FieldByname('LIBSECTION').Value);
     
                                       end;
                                      Qry1.close;
     
     
                 MessageDlg('Libellé='+String(FieldByname('LIBSECTION').Value), mtWarning, [mbOK], 0);
                    Visible:=true;
                    Font.Color:=clBlack;
                    if tag <> 0 then
                      FreeMem(PProd(Tag));
                    New (produit);
                    produit^.id_tag:=SECTION;
                    produit^.code_categ:=String(FieldByname('COD_SECTION').Value);
                    tag:=Integer(produit);
                  //MessageDlg('Tag= '+ IntToStr(tag), mtWarning, [mbOK], 0);
                  end;
                end
              end;
            end;
          end
          else
            fini:=false;
          Next;
        end;
        DMTactile.DestroyQRY(QrySection);
         DMTactile.DestroyQRY(Qry1);
      end;
      ISBSDNUP(fini);
    Si quelqu'un a eut une idée , elle sera super bienvenue. Merci .

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    s'il te dit ça c'est que tu dois avoir des valeurs nulles parmi les valeurs dans ton DataSet. Du coup comme tu utilises .Value qui retourne un variant il ne sait pas convertir null en string.

    Première remarque String(FieldByname('').Value) par exemple n'est pas du tout utile car un variant est capable de se transformer en string automatiquement à partir du moment où la valeur dans le variant n'est pas nulle. Donc écrire FieldByname('').Value est suffisant.

    Ensuite pour corriger ton problème je te conseilles d'utiliser .AsString plutôt que .Value qui lorsque la valeur est nulle s'occupe de renvoyer une chaîne vide et sinon la chaîne représentant la valeur.

  3. #3
    Membre régulier Avatar de jodan33
    Homme Profil pro
    DEveloppeur interoperabilité
    Inscrit en
    Mars 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : DEveloppeur interoperabilité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 95
    Points : 71
    Points
    71
    Par défaut deja essayé
    Merci , pour la réponse , c'est une solution que j'avais testé , cela fonctionne pour eliminer le message d'erreur cependant je récupére que des champs vide , alors que quand je fait ma requette sur IBO console je recupére bien le champs suivant la valeur de para_ext2.
    je vois plus trop comment faire.

  4. #4
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Bonjour,

    Tu ne récupères que des champs vides lorsque tu écris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      Caption.Caption := FieldByname('LIBSECTION').AsString;
    à la place de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      Caption.Caption := String(FieldByname('LIBSECTION').Value);
    c'est surprenant
    Ne confonds-tu pas le passage de paramètre qui lui doit se faire par variant et la récupération des données ?

    Remets un peu de code avec
    - ta déclaration de variable
    - ta méthode NewQuery
    - et localise le message d'erreur dans ton code

  5. #5
    Membre régulier Avatar de jodan33
    Homme Profil pro
    DEveloppeur interoperabilité
    Inscrit en
    Mars 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : DEveloppeur interoperabilité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 95
    Points : 71
    Points
    71
    Par défaut Solution OK
    Bonjour ,
    j'ai trouvé une solution à mon probleme , j'ai fait une autre requete qui utilise un paarametre 2 et un order by , ainsi je classe dans l'ordre mes pavés qui apparaissent à l'écran en suivant cet ordre.
    M
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    begin
     // MessageDlg('Disp Section', mtWarning, [mbOK], 0);
      _mode:=categorie;
     // MessageDlg('_Mode = '+FloatToStr(categorie), mtWarning, [mbOK], 0);
      _mode_s:='Section';
      SetInvisible;
      DMTactile.NewQry(QrySection);
      with QrySection do
      begin
        if active then close;
        sql.Clear;                                                                                      /////////  Joseph
        sql.Add('select par_lib AS LIBSECTION, par_codpar   AS CODPAR_SECTION, par_ext1 AS COD_SECTION ' /////Le 19/08/2008  remplacement de   par_codpar    par_ext2
               +'from parametres '
               +'where par_codtbl= '''+ PARAM_CATEG + ''' order by par_ext2 ');
        open;
        nextSectionDisp:=0;
        try
          //for i:=1 to _range do
          for i:=1 to _gap do
          begin
            next;
          end;
        except
          raise;
        end;
        fini:=true;
        while (not eof) do
        begin
       // MessageDlg('entrée boucle parcours', mtWarning, [mbOK], 0);
          if (nextSectionDisp<8) then
          begin
         //   MessageDlg('Cas où nb Categ <= 8', mtWarning, [mbOK], 0);
            nextSectionDisp:=nextSectionDisp+1;
            codeSectionUniq:=FieldByname('CODPAR_SECTION').Value;
           // showmessage(codesectionuniq);
            //MessageDlg('nbControls= '+Inttostr(gb_plat.ControlCount-1), mtWarning, [mbOK], 0);
            for i:=0 to gb_plat.ControlCount-1 do
            begin
            // MessageDlg(IntToStr(i)+'ème Parcours des boutons Categ', mtWarning, [mbOK], 0);
              if gb_plat.Controls[i] is TLMDShapeControl then
              begin
                if (gb_plat.Controls[i] as TLMDShapeControl).name = 'b_s_'+inttostr(nextSectionDisp) then
                begin
                 //MessageDlg('Le bouton '+IntToStr(i)+' sélectionné est celui à afficher', mtWarning, [mbOK], 0);
                  with (gb_plat.Controls[i] as TLMDShapeControl) do
                  begin
                 Caption.Caption := String(FieldByname('LIBSECTION').Value);
                  //requete remplace ligne dessus
     
     
                // MessageDlg('Libellé='+String(FieldByname('LIBSECTION').Value), mtWarning, [mbOK], 0);
                    Visible:=true;
                    Font.Color:=clBlack;
                    if tag <> 0 then
                      FreeMem(PProd(Tag));
                    New (produit);
                    produit^.id_tag:=SECTION;
                    produit^.code_categ:=String(FieldByname('COD_SECTION').Value);
                    tag:=Integer(produit);
                  //MessageDlg('Tag= '+ IntToStr(tag), mtWarning, [mbOK], 0);
                  end;
                end
              end;
            end;
          end
          else
            fini:=false;
          Next;
        end;
        DMTactile.DestroyQRY(QrySection);
    Merci , à tous pour votre aide.

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

Discussions similaires

  1. Problème avec ArrayList <String>
    Par fiphi dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 29/08/2006, 09h30
  2. Problème de conversion string->int
    Par seheiahs dans le forum Langage
    Réponses: 4
    Dernier message: 28/06/2006, 10h42
  3. Sale problème avec les strings et les fichiers
    Par acieroid dans le forum C++
    Réponses: 18
    Dernier message: 26/04/2006, 09h47
  4. problème fin de string sous windows 98
    Par LAPLACE dans le forum Windows
    Réponses: 1
    Dernier message: 07/03/2006, 11h09
  5. [MFC] Problème pointeur sur une classe
    Par mick74 dans le forum MFC
    Réponses: 7
    Dernier message: 14/04/2004, 14h17

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