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

C++Builder Discussion :

gérer un champ auto-incrément ?


Sujet :

C++Builder

  1. #1
    Membre actif Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Points : 214
    Points
    214
    Par défaut gérer un champ auto-incrément ?
    Salut,

    j'aimerai gérer un champ auto-incrément pour cela j'utulise cette fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int __fastcall TForm1::NouvelID(AnsiString Table, AnsiString Clef)
    {
     
        SQLRequeteID->Close(); 
        SQLRequeteID->SQL->Clear();
        SQLRequeteID->SQL->Add("select max(" + Clef + ") as MAX_VALUE from " + Table );
        SQLRequeteID->Open(); 
        int result = SQLRequeteID->FieldByName( "MAX_VALUE")->AsInteger + 1;
        SQLRequeteID->Close(); 
        return( result ) ;
    }
    à l'appel de cette fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int ProchainID= NouvelID('nom', 'Id');/* Id est le champ à gérer et nom le nom du fichier table de ma base de donnée */
    je reçois le message d'erreur suivant:
    Utilisation incorrecte du mot clé.
    Elément: from
    Num de ligne1.
    Merci d'avance pour votre aide.

  2. #2
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Janvier 2008
    Messages : 241
    Points : 204
    Points
    204
    Par défaut
    Bonjour,
    voilà personnellement je fait ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int __fastcall TForm1::NouvelID(AnsiString Table, AnsiString Clef)
    {
     
        SQLRequeteID->Close(); 
        SQLRequeteID->SQL->Clear();
        SQLRequeteID->SQL->Add("select tonchamp from " + Table +"Order by tonchamp DESC");
        SQLRequeteID->Open(); 
        int result = SQLRequeteID->FieldByName( "tonchamp")->AsInteger + 1;
        SQLRequeteID->Close(); 
        return( result ) ;
    }
    voilà Bon courage

  3. #3
    Membre actif Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Points : 214
    Points
    214
    Par défaut
    Merci sam83 pour cette solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int __fastcall TForm1::NouvelID(AnsiString Table, AnsiString Clef)
    {
     
        SQLRequeteID->Close(); 
        SQLRequeteID->SQL->Clear();
        SQLRequeteID->SQL->Add("select Clef from " + Table +"Order by Clef DESC");
        SQLRequeteID->Open(); 
        int result = SQLRequeteID->FieldByName( "Clef")->AsInteger + 1;
        SQLRequeteID->Close(); 
        return( result ) ;
    }
    j'ai eu une erreur pareille concernant le mot clé Order:
    Utilisation incorrecte du mot clé.
    element 7237485Order
    num de ligne 1

  4. #4
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    C'est normal, le nom de ta table et le ORDER sont attaché ensemble! Ajoute un espace! De plus, a moins que ton champ à incrémenter s'appelle "Clef", il faut aussi modifier cette partie.

    Par contre ta table s'appelle apparemment "7237485", est tu sûr que c'est normal et qu'il n'y a pas un problème? Vérifie le paramètre Table que tu passe à la fonction voir si il n'y a pas un soucis.

  5. #5
    Membre actif Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Points : 214
    Points
    214
    Par défaut
    Merci sat83 pour la réponse
    Citation Envoyé par sat83 Voir le message
    C'est normal, le nom de ta table et le ORDER sont attaché ensemble! Ajoute un espace! De plus.
    oui merci j'ai pas fais attention

    a moins que ton champ à incrémenter s'appelle "Clef", il faut aussi modifier cette partie.
    Clef est le paramètre avec le quel je transmis le nom du champ à incrémenter.
    Par contre ta table s'appelle apparemment "7237485", est tu sûr que c'est normal et qu'il n'y a pas un problème? Vérifie le paramètre Table que tu passe à la fonction voir si il n'y a pas un soucis
    je ne sais pas pourquoi, je pense que l'erreur est au niveau du passage des paramètres parce que les deux codes marchent très bien sans passer par la fonction NouvelID.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SQLRequeteID->Close(); 
        SQLRequeteID->SQL->Clear();
        SQLRequeteID->SQL->Add("select Id from nom Order by Id DESC");
        SQLRequeteID->Open(); 
        int result = SQLRequeteID->FieldByName( "Id")->AsInteger + 1;
        SQLRequeteID->Close();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SQLRequeteID->Close(); 
        SQLRequeteID->SQL->Clear();
        SQLRequeteID->SQL->Add("select max(Id) as MAX_VALUE from nom");
        SQLRequeteID->Open(); 
        int result = SQLRequeteID->FieldByName( "MAX_VALUE")->AsInteger + 1;
        SQLRequeteID->Close();

  6. #6
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Effectivement, ca vient probablement de l'appel à la fonction.
    Poste le bout de code où tu appelle la fonction.

  7. #7
    Membre actif Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Points : 214
    Points
    214
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int ProchainID= NouvelID('nom', 'Id');
    et avec ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    AnsiString n=Table1->TableName;
    AnsiString i=Table1->FieldByName("Id")->AsString;
    int ProchainID= NouvelID(n,i);
    j'ai le message d'erreur suivant:
    Fonctionnalité non supportée

  8. #8
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Les chaines de caractères doivent être entourées de double-quote:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int ProchainID = NouvelID("nom", "Id");

  9. #9
    Membre actif Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Points : 214
    Points
    214
    Par défaut
    merci sat83 c'est résolu
    /* mes fautes bêtes bêtes progressent de jour en jour*/

  10. #10
    Membre actif Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Points : 214
    Points
    214
    Par défaut
    juste une question, pourquoi Borland n'accepte il pas ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    AnsiString n=Table1->TableName;
    AnsiString i=Table1->FieldByName("Id")->AsString;
    int ProchainID= NouvelID(n,i);
    merci

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

Discussions similaires

  1. Connaître la valeur d'un champ auto incrémenté
    Par soltani1 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/05/2006, 14h55
  2. [EJB2.1 Entity] [Débutant] Champs auto-incrémenté (identity)et EJB
    Par Houbbba dans le forum Java EE
    Réponses: 9
    Dernier message: 04/04/2006, 19h15
  3. champ auto incrémenté
    Par Kerod dans le forum Langage SQL
    Réponses: 6
    Dernier message: 21/09/2005, 17h29
  4. [BCB5][FB 1.5]IBDataSet et champ Auto-incrémenté
    Par Sitting Bull dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 21/07/2004, 15h37
  5. [JDO]Hibernate : Mapping d'un champ auto-incrémenté
    Par brice.antoine dans le forum Hibernate
    Réponses: 4
    Dernier message: 02/04/2004, 10h36

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