[ACCESS 2003] Numero automatique genere "manuellement"

Numero automatique genere "manuellement" [ACCESS 2003] - VB/VBA/VBS - Programmation

Marsh Posté le 23-12-2009 à 00:40:22    

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 :
  1. Public Function cpt() As Integer
  2.     Dim selectQuery As Recordset
  3.    
  4.     Set selectQuery = CurrentDb.OpenRecordset("SELECT * FROM table_compteur" )
  5.     selectQuery.MoveFirst
  6.     cpt = selectQuery.Fields(0).Value
  7.     selectQuery.Close
  8.     Call CurrentDb.execute("UPDATE table_compteur SET field1=field1+1" )
  9.    
  10. End Function


 
Cela marche tres bien si je fais des ajouts de type

Code :
  1. 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 :
  1. 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

Reply

Marsh Posté le 23-12-2009 à 00:40:22   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed