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 :

[X10-Firedac]Remplir un combox avec Fquery


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2002
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 394
    Par défaut [X10-Firedac]Remplir un combox avec Fquery
    Bonjour

    J'ai un erreur quand j'essais de remplir mon combobox

    La premiere fois j'ai un erreur mais la 2eme fois ca passe je ne vois pas pourquoi.

    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
     
     
    procedure TFcalcul.CregionChange(Sender: TObject);
    begin
     REGION:=CREGION.Text;
     
       FCALCUL.FDQuery1.Close;
       FCALCUL.FDQuery1.SQL.Clear;
     
     
       FCALCUL.fdquery1.SQL.TEXT:='select * from poste WHERE RRECODE =:R';
                                                    FCALCUL.fdquery1.ParamByName('R').asString:=region;
     
       FCALCUL.FDQuery1.active:=true;
       FCALCUL.fdquery1.First;
       FCALCUL.cSOUSPOSTE.items.clear();
       while  not FCALCUL.fdquery1.Eof do
           begin
             FCALCUL.cSOUSPOSTE.items.add(fdQuery1.FieldByName('rregion').asString);// bloque ici si j'enleve cette ligne show m'affiche bien les résultats
     
           //   showmessage(FCALCUL.fdQuery1.FieldByName('rregion').asString);
     
             FCALCUL.fdquery1.next;
         end;
     
         FCALCUL.fdquery1.active:=FALSE;
     
    end;
     
    message d'erreur
    Nom : erreur_combo.PNG
Affichages : 239
Taille : 6,4 Ko

    Merci encore de partager votre expérience

    Mario

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    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 786
    Par défaut
    Bonjour,
    Citation Envoyé par mario9 Voir le message
    J'ai un erreur quand j'essais de remplir mon combobox

    La premiere fois j'ai un erreur mais la 2eme fois ca passe je ne vois pas pourquoi.

    Merci encore de partager votre expérience
    Pensez à utiliser la balise [ CODE ] et non pas [ QUOTE ]

    Je ne vois rien de problématique sur cette partie de code hormis qu'elle est très mal écrite.
    1. On n'utilise pas une instance de classe dans une méthode de cette même classe, ou alors on utilise Self. cf ceci : http://www.developpez.net/forums/d15...s/#post8208688
    2. Si vous affectez votre requête SQL via la propriété Text, la commande Clear précédente est inutile.
    3. First après l'ouverture de votre ensemble de données est inutile.

    Le code nettoyé :
    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 TFcalcul.CREGIONChange(Sender: TObject);
    begin
      REGION := CREGION.Text;
     
      if FDQuery1.Active then
        FDQuery1.Close;
      //FDQuery1.SQL.Clear;
     
      FDQuery1.SQL.TEXT := 'select * from poste where RRECODE = :R';
      FDQuery1.ParamByName('R').AsString := REGION;
     
      FDQuery1.Active := True;
      //FDQuery1.First;
      cSOUSPOSTE.Items.Clear();
      while not FDQuery1.Eof do
      begin
        cSOUSPOSTE.Items.Add(FDQuery1.FieldByName('rregion').AsString);
     
        // showmessage(FCALCUL.fdQuery1.FieldByName('rregion').asString);
     
        FDQuery1.Next;
      end;
     
      FDQuery1.Active := False;
    end;
    L'erreur doit se produire ailleurs. posez des points d'arrêt dans votre code (F5) et exécutez le pas à pas (F7, F8, etc) pour identifier la ligne réellement en cause.
    En mode Debug, vous pouvez aussi lors du déclenchement capturé par l'EDI, cliquer sur Arrêter puis regarder dans la pile d'appel l'instruction en cause...

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 706
    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 706
    Billets dans le blog
    65
    Par défaut
    Bonjour

    pour rajouter quelques couches à ce que dit Philippe,
    de manière générale il vaut mieux indiquer dans le select les champs que l'on veut obtenir donc

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    select rrRegion from poste where RRECODE = :R
    puisqu'il s'agit certainement d'une requête ponctuelle plutôt que d'encombrer inutilement la forme créez la requête au runtime, en n'oubliant pas de la libérer

    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
    procedure TFcalcul.CREGIONChange(Sender: TObject);
    var AQuery : TFDQuery;
    begin
    //  REGION := CREGION.Text;  // utile ?
      AQuery:=TFDQuery.Create(nil);
      try
        AQuery.Connection:=FDConnection1;
        AQuery.SQL.TEXT := 'select rrRegion from poste where RRECODE = :R';
        AQuery.ParamByName('R').AsString := CREGION.Text;
        AQuery.Active:=True;
        cSOUSPOSTE.Items.Clear();
        while not AQuery.Eof do
        begin
          cSOUSPOSTE.Items.Add(AQuery.FieldByName('rregion').AsString);
          AQuery.Next;
        end;
        AQuery.Active := False;
     finally
        AQuery.Free;
     end;  
    end;

  4. #4
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2002
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 394
    Par défaut [X10-Firedac]Remplir un combox avec Fquery
    Merci pour vos réponses

    J'ai un autre erreur qui arrive quand je veux enregistrer mes données j'ai cette erreur et je ne trouve pas pourquoi.


    Merci

    Mario
    Images attachées Images attachées  

  5. #5
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    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 786
    Par défaut
    Citation Envoyé par mario9 Voir le message
    J'ai un autre erreur qui arrive quand je veux enregistrer mes données j'ai cette erreur et je ne trouve pas pourquoi.
    1. Il s'agit d'un autre problème, il eut été judicieux d'ouvrir une autre fil de discussion et de passer celui-ci en
    2. n'est pas votre ami, car vous auriez trouvé quelques pistes à explorer :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      FDConnection1.Params.Add('SharedCache=False');
      FDConnection1.Params.Add('LockingMode=Normal');
    3. Assurez vous que votre application n'a pas laissé une opération "pendante" (insert, update, delete) qui verrouille la base de données.

Discussions similaires

  1. [VB.NET] Remplir une ComboBox avec une requete sql
    Par graphicsxp dans le forum Windows Forms
    Réponses: 6
    Dernier message: 22/03/2005, 16h29
  2. Réponses: 3
    Dernier message: 19/01/2005, 16h50
  3. Réponses: 2
    Dernier message: 26/07/2004, 14h34
  4. remplir une table avec UTL_FILE.GET_LINE
    Par delphim dans le forum SQL
    Réponses: 9
    Dernier message: 12/03/2004, 11h15
  5. [TChart] comment remplir un histogramme avec du rouge strié.
    Par :GREG: dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/08/2002, 10h37

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