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 :

Afficher la valeur d'un générateur


Sujet :

Bases de données Delphi

  1. #1
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut Afficher la valeur d'un générateur
    Bonjour,

    Je viens de trouver un post qui n'est pas vieux et qui traite presque la même chose (http://www.developpez.net/forums/sho...eur+generateur... Je rencontre un probleme, je voudrais utiliser la valeur retourné par la requete...

    Par exemple, je voudrais afficher la valeur dans un TEdit, voici ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    var nombre :integer;
     
    begin
     Form1.IBDatabase1.LoginPrompt:=false;
     Form1.IBDatabase1.Connected:=true;
     
     IBQuery1.SQL.Clear;
     nombre:=IBQuery1.SQL.Add('select GEN_ID(autonum,0) from Devis;');
     IBQuery1.open;
     Edit1.Text:=IntToStr(nombre);
     IBQuery1.Close;
     IBDatabase1.Connected:=false;
    J'ai une dizaine d'enregistrement dans ma base, mais le chiffre qui s'affiche dans le TEdit est toujours 0...

    Je pense qu'il y à quelque chose que je fais mal. Merci de votre aide !

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut !

    Le code que tu proposes est bon, mais tu n'affectes pas la valeur de retour à ta variable nombre!
    Je ne vois pas d'affectation ... donc nombre vaudra toujours zéro

    Personnellement, je ferai un truc de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    begin
     Form1.IBDatabase1.LoginPrompt:=false;
     Form1.IBDatabase1.Connected:=true;
     
     IBQuery1.SQL.Clear;
     nombre:=IBQuery1.SQL.Add('select GEN_ID(autonum,0) as Gen from Devis;');
     IBQuery1.open;
     Edit1.Text:=IBQuery1.FieldByName('Gen').AsString;
     IBQuery1.Close;
     IBDatabase1.Connected:=false;
    end;
    J'ai utilisé la méthode FieldByName('NomDuChamp') qui permet de récupérer directement la valeur (dans le bon type en plus grâce à AsString ...). Le nom du champ dans ce cas là c'est Gen (j'ai fait un alias) )
    De plus, ça te fait gagner une variable

    A+
    Si besoin est, n'hésites pas!

    PS: Code non testé

  3. #3
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Ce n'est pas tout à fait au point ton code.

    Essaye ceci (connexion faite à la base):
    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
     
    function TForm1.GetNextID(const GeneratorName: string): Integer;
    var
      Qry: TIBSQL;
    begin
      Qry := TIBSQL.Create(nil);
      with Qry do
      begin
        Database := IBDatabase1;
        Transaction := IBTransaction1;
        // Requête sur RDB$DATABASE pas sur ta table !
        SQL.Text := 'SELECT GEN_ID(' + GeneratorName + ', 0) FROM RDB$DATABASE;'; 
        try
          ExecQuery;
          result := Fields[0].AsInteger;
          Close;
        finally
          Free;
        end;
      end;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ShowMessage('Valeur actuelle du générateur = ' + IntToStr(GetNextID('MON_GENERATEUR')));
    end;
    @+ Claudius

  4. #4
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Oops! Aurai-je fait une bêtise en disant que c'étant bon ? Je ne connais pas les compos IB et je pensais que ça se comportait comme un TQuery normal... donc un simple Open pour dire d'effectuer la requête vu que c'est un select ... (je me suis en plus permis de mettre le FieldByName puisque lors de la lecture du code, c'est plus clair ... quoi que dans ce cas là, c'est pas trop génant).

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    @Ero-sennin

    L'utilisation d'un Open avec un TIBQuery est parfaitement correcte. Dans mon exemple j'utilise un TIBSQL (qui est plus rapide et utilise moins de ressources), qui a une utilisation un peu différente: pas de méthode Open.

    @jojo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      nombre:=IBQuery1.SQL.Add('...');
    Ceci ne fonctionne pas et ne renverra en aucun cas le résultat de la requête.
    La méthode Add de TStrings te renvoie l'index de la ligne insérée qui est toujours 0 dans le cas présent puisque la requête ne fait qu'une seule ligne.

    Voilou.

    @+ Claudius

  6. #6
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    Merci de vos réponse, mais j'aimerais plus de detail à ce sujet :

    Requête sur RDB$DATABASE pas sur ta table
    Il faut que je mette RDB$+nom de ma base ??? c'est ça???

  7. #7
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par jojo86 Voir le message
    Il faut que je mette RDB$+nom de ma base ??? c'est ça???
    Non non, pas du tout !!

    RDB$DATABASE est un table système présente sous Interbase/Firebird.
    Cette table a la particularité de ne posséder qu'un seul enregsitrement. C'est en fait une simple astuce.

    Lorsque que tu fais une requête de ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      SQL.Text := 'SELECT GEN_ID(' + GeneratorName + ', 0) FROM RDB$DATABASE;';
    l'appel au GEN_ID ne se fera qu'une seule fois. Par contre si tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL.Text := 'SELECT GEN_ID(' + GeneratorName + ', 0) FROM Devis;';
    si ta table devis contient 1000 enregistrements alors le GEN_ID sera appelé 1000 fois.

    Voilou.

    @+ Claudius

  8. #8
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    Donc si j'ai bien compris ,

    Poitera vers la base de donnée qui est utilisée c'est ça???

  9. #9
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    RDB$DATABASE fait parti de ta base de données. Comme beaucoup d'autres tables système qui commencent toutes par RDB$.

    @+

  10. #10
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    Ah d'accord... et bien merci de ton aide, je vais tester le code.

    Merci !!!

  11. #11
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    Je ne peut compiler... Delphi me dit que result est un identificateur non déclaré...

  12. #12
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    C'est bon, tout est Ok, il fallait que je déclare la variable result !

    Merci à vous !!!

  13. #13
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Citation Envoyé par jojo86 Voir le message
    C'est bon, tout est Ok, il fallait que je déclare la variable result !

    Merci à vous !!!
    C'est très bizarre! Si c'est bien une fonction, il ne doit pas y avoir d'erreur ..., pas besoin de déclarer le result

  14. #14
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par ero-sennin Voir le message
    pas besoin de déclarer le result
    Ah, cela t'a interpelé aussi.
    La déclaration de la variable de retour result est implicite quand on définit une fonction.

    Tu peux nous montrer comment est écrite ta fonction/procédure.

    @+

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

Discussions similaires

  1. [dblookup] afficher une valeur par programmation
    Par let_me_in dans le forum Bases de données
    Réponses: 1
    Dernier message: 11/05/2005, 14h42
  2. [TMS320C31] Afficher une valeur à l'écran
    Par miminou dans le forum Autres architectures
    Réponses: 3
    Dernier message: 17/04/2005, 18h48
  3. [TP] Afficher une valeur avec outtext
    Par Bouilla dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 06/03/2005, 09h57
  4. Réponses: 3
    Dernier message: 28/01/2004, 14h55
  5. Afficher une valeur du context
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 13
    Dernier message: 28/04/2003, 13h49

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