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

Bases de données Delphi Discussion :

Message d'erreur (instruction privilégiée) base de donnees paradox sous delphi7


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    11
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 11
    Points : 11
    Points
    11
    Par défaut Message d'erreur (instruction privilégiée) base de donnees paradox sous delphi7
    salut tous le monde ,
    j'ai un problème avec ce code il m'affiche un message d'erreur (instruction privilégiée),quand il y a une checkbox cochée et il m'affiche indice hors limite quand il y a plusieurs checkbox cochées, je suis sur delphi7et paradox.
    merci d'avance pour votre aide.

    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
    procedure TForm1.BitBtn_enregistrerClick(Sender: TObject)
     
    var i:integer;
     
       begin //1
       for i := 1 to (form1.ComponentCount)  do
     
       begin //2
        if (form1.Components[i]) is tcheckbox then
     
       begin //3
         if Tcheckbox(components[i]).Checked then
     
       begin //4
         form1.Table1.Open;
         form1.table1.Append;
         with form1.Table1 do
        begin //5
    fieldbyname('operation').Value:=(Tcheckbox(Components[i]).Caption);
     
        end;//5
           form1.table1.post;
    end; //4
     
          end;//3
          end;//2
     
    end//1

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Il y a une balise [ CODE ] ... [ / CODE ] pour fournir un extrait de code; elle est accessible par le bouton # !

    Ensuite, il y a des horreurs dans ce code !
    On ne fait JAMAIS référence à une variable globale du type de la classe en question à l'intérieur d'une de ses méthodes !

    Les composants ou les contrôles sont stockés dans un tableau dont l'indice débute à 0 et non pas 1 ! on s'arrête donc à Component.Count - 1

    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
    procedure TForm1.BitBtn_enregistrerClick(Sender: TObject);
    var
      i: Integer;
    begin
      for i := 0 to  self.ComponentCount - 1 do // form1.ComponentCount)  do
      // On peut aussi écrire en sous entendant Self
      // for i := 0 to  ComponentCount - 1 do
      begin
        if Self.Components[i] is TCheckBox then  // form1.Components[i] is tcheckbox then
        begin
          if TCheckBox(Components[i]).Checked then
          begin
            Self.Table1.Open;  // form1.Table1.Open;
            Self.Table1.Append;  // form1.table1.Append;
            with Self.Table1 do  // with form1.Table1 do
            begin
              fieldbyname('operation').Value := TCheckBox(Components[i]).Caption;
            end;
            Self.Table1.Post;  // form1.table1.post;
          end;
        end,
      end;
    end;
    En traçant le code à l'exécution, vous auriez trouvé le problème...
    Philippe.

  3. #3
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    L'indice de ComponentCount commence à 0 donc il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      for i := 0 to form1.ComponentCount -1  do
    [tourlourou EDIT] message fusionné à partir d'un autre fil de discussion en doublon [/EDIT]

  4. #4
    Membre à l'essai
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    11
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 11
    Points : 11
    Points
    11
    Par défaut toujours même message d'erreur
    malheureusement votre code n'a pas résolu le problème ,toujours même erreur(instruction privilégiée ) merci quand même.

  5. #5
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Je réponds à votre message privé...
    Citation Envoyé par fouad_algo
    j'ai essayer votre code mais toujours même erreur
    (instruction privilégiée) je crois que le problème viens du paradox qui ne prends pas en charge des instructions trop imbriqués
    merci quand même et merci pour l'astuce #
    Non, ce n'est pas Paradox qui est en cause mais le code où la ligne suivante présente une ambiguïté que résout le compilateur de manière logique par rapport au jeu d'instructions, mais pas comme vous le souhaiteriez d'où le message d'erreur que vous obtenez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    with Self.Table1 do
      begin
        fieldbyname('operation').Value := (Tcheckbox(Components[i]).Caption);
        // Ici du fait de l'inclusion dans le bloc with Self.Table1, le compilateur
        // considère que Components[i] est une propriété de l'objet Table1
        // car la classe TTable dispose de cette propriété !
        // Vous, vous pensiez que le compilateur allait considérer la propriété
        // de l'objet Self (ou form1 l'objet fiche de la classe TForm1)
        // il faut donc apporter une précision au compilateur en lui indiquant
        // que vous considérez la propriété de l'objet Self en écrivant
        // Self.Components[i]
      end;
    D'autre part, vous n'êtes pas obligé de vouloir ouvrir la table à chaque passage dans la boucle avant chaque ajout, par contre fermer la table en fin de traitement pourrait être souhaité.
    Vous devriez donc écrire :
    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
    var
      i: Integer;
    begin
      Self.Table1.Open;
      try
        for i := 0 to  self.ComponentCount - 1 do
        begin
          if Self.Components[i] is TCheckBox then
          begin
            if TCheckBox(Self.Components[i]).Checked then
            begin
              Self.Table1.Append;
              with Self.Table1 do
              begin
                FieldByName('operation').Value := TCheckBox(Self.Components[i]).Caption;
              end;
              Self.Table1.Post;
            end;
          end;
        end;
      finally
        Self.Table1.Close;
      end;
    Philippe.

  6. #6
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    J'aurais écrit le code comme ceci :
    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
     
     
    var
      i: Integer;
    begin
      Table1.Open;
      try
        for i := 0 to  self.ComponentCount - 1 do
        begin
          if Self.Components[i] is TCheckBox then begin
            if TCheckBox(Self.Components[i]).Checked then begin
              Table1.Append;
              Table1.FieldByName('operation').AsString := TCheckBox(Self.Components[i]).Caption;
              Table1.Post;
            end;
          end;
        end;
      finally
        Table1.Close;
      end;
    Je ne vois pas l'utilité d'ajouter Self à Table1 pas plus que de l'ajouter à ComponentCount et Components !

  7. #7
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Citation Envoyé par akli_agha Voir le message
    Je ne vois pas l'utilité d'ajouter Self à Table1 pas plus que de l'ajouter à ComponentCount et Components !
    Je suis à moitié d'accord avec vous.
    Effectivement Self n'apporte rien au code que vous avez proposé et où vous avez supprimé le raccourci with.

    Cependant, sa présence permet à toute personne qui relira et fera évoluer le code d'identifier sans ambiguïté les objets qu'il manipule surtout s'il réintroduit le raccourci with ou s'il crée une variable locale de même nom qu'une variable de classe. Ainsi, cela évitera que le compilateur adresse une propriété homonyme d'un objet sur lequel on ne souhaite pas intervenir ! Par la même, on évitera des erreurs d'exécution qui peuvent être moins évidentes à corriger que celle à laquelle a été confonté @fouad_algo...
    Philippe.

  8. #8
    Membre à l'essai
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    11
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 11
    Points : 11
    Points
    11
    Par défaut merci MR ph.B
    merci beaucoup,pour votre réponse elle marche très bien et ça m'a permis de comprendre un petit peu ce langage formidable qui ne laisse rien au par hasard.
    merci infiniment

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

Discussions similaires

  1. erreur connection netbeans base de donnees
    Par dalidali86 dans le forum NetBeans
    Réponses: 0
    Dernier message: 12/08/2009, 11h13
  2. erreur de la base de donnee
    Par philo71 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 22/01/2008, 00h43
  3. [Ditto] Erreur d'ouverture Base De Donnees
    Par jharscoet dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 18/06/2007, 00h46
  4. [requête] message d'erreur : moteur de base de données
    Par romika dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 18/01/2007, 22h39

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