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

Requêtes et SQL. Discussion :

Numero automatique généré "manuellement"


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Numero automatique généré "manuellement"
    Bonjour a tous,

    Tout d'abord veuillez m'excuser pour l'absence d'accents dans ce post mais bon c'est pas facile avec les claviers qwerty!

    Je rencontre un probleme avec une base access 2003 qui existe deja et qui utilise dans pratiquement toutes les tables des numeros automatiques. Or il s'avere que cette base va devoir etre dupliquee et reconciliee tous les jours, en consequence il va etre impossible de la gerer correctement avec des num auto. Je souhaite donc migrer vers une incrementation "automatique" (gere grace a un compteur) mais modifiable, c'est a dire que cela sera transparent pour l'utilisateur mais le developpeur pourra tjrs s'il le souhaite modifier la cle primaire
    Ex: table1(Id,Nom,Prenom)
    Avant: l'utilisateur rentrait 'Nom' et 'Prenom'=>'Id' etait le num Auto gere par Access

    Apres: l'utilisateur rentre 'Nom' et 'Prenom'=>'Id'=cpt() ou cpt est la fonction suivante ('table_compteur' etant une table de la base):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Public Function cpt() As Integer
        Dim selectQuery As Recordset
     
        Set selectQuery = CurrentDb.OpenRecordset("SELECT * FROM table_compteur")
        selectQuery.MoveFirst
        cpt = selectQuery.Fields(0).Value
        selectQuery.Close
     
        Call CurrentDb.execute("UPDATE table_compteur SET field1=field1+1")
     
    End Function
    Cela marche tres bien si je fais des ajouts de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO table1(id,Nom,Prenom) VALUES(cpt(),'Onyme','Anne')
    En revanche si je fais des ajouts dans la table via des queries du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO table1(id,Nom,Prenom) SELECT cpt(),Nom,Prenom FROM tableFamille
    alors la valeur pour id dans table1 est tjrs la meme (ie access a appelle une seule fois la fonction cpt et non une fois pour chaque enregistrement de tableFamille).

    Ma premiere idee etait d'imposer dans la definition de la table1 que le champ Id soit egale a la valeur de cpt(), j'ai donc mis dans le champ 'Defaut Value', cpt(), met Access m'a jete, idem dans 'validation Rule' (il dit qu'il ne connait pas la fonction). Cette solution serait la plus pratique car cela me permettrais de ne pas changer les requetes d'append deja creees... Donc si quelqu'un a des idees pour faire fonctionner cette technique ou une autre merci d'avance

    Cordialement

    Arthur

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 348
    Points : 19 593
    Points
    19 593
    Billets dans le blog
    65
    Par défaut
    Salut,

    en fait pour créer un numéro auto personnel il faut se placer au niveau du formulaire basé sur la table1:

    Par exemple, tu peux mettre la propriété Valeur par défaut de ta zone de texte liée au champ Id

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Valeur par défaut : nz(MaxDom("id";"Table1");0)+1
    ou alors t'inspirer de ce lien notamment pour initialiser tous les numéros auto...

    Sinon pour une numérotation dans une requête il y a cet autre lien.

  3. #3
    Candidat au Club
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Hi User,

    Tout d'abord merci pour ces elements de reponses, mais malheureusement cela ne resoud pas vraiment mon pb (ou peut etre ai-je mal compris tes indications). Concernant le Form, est ce correct si je dis que cela impose de passer par lui pour inserer chaque element dans la table 'table1'? Le pb est que ma base actuelle telecharge tous les jours des donnees qui sont inserees dans table1 et donc toute une batterie de requetes append existent deja mais elles inserent les data directement dans la table. Ainsi la proposition du form parait ne parait marcher dans ce cas

    Concernant la numerotation des queries, toutes les propositions indiquees impliquent l'utilisation d'un champ numerique, or dans le present exemple (table1) il n'y en a pas (a part le champ Id mais c'est celui que l'on cherche a renseigner!)

    Ai je bien tout compris? Vois tu d'autres pistes de solutions?

    Merci!!

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 219
    Points : 1 707
    Points
    1 707
    Par défaut
    bonsoir,
    question.......bête......?
    pourquoi renseigner le champ ID ? il suffit d'importer où d'alimenter la table simplement avec Nom et prénom et le champ ID en N°auto s'incrémente tout seul au fur et a mesure des enregistrements ...ou des ajouts où j'ai mal compris. si après on souhaite connaitre pour une raison x l'ID affecté on peut faire un DLookup.

  5. #5
    Candidat au Club
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    En fait le pb c'est qu'il y a deux bases qui sont "reconciliees" tous les jours (ie on insere les nouveaux enregistrements de l'une des bases dans l'autre). Or dans le cas ou les id sont geres avec des num auto il n'y a aucune raison pour que l'import d'un nouvel enregistrement de la base A vers la base B ait la meme valeur, or si derriere cet id est present dans d'autre tables (dans le cas de tables liees) alors il faudra mettre a jour dynamiquement la valeur de ce dernier, ce qui represente une procedure tres tres lourde (c'est plus ou moins ce qui est actuellement utilise dans ma base et ce n'est pas satisfaisant)

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