[Access]Auto increment

Auto increment [Access] - SQL/NoSQL - Programmation

Marsh Posté le 28-05-2004 à 21:38:19    

Voilà j'ai une table avec un id en autoincrement (numéro auto), cet identifiant ne fait qu'augmenter malgré que je supprime un des premiers tuple de la table.  
Si bien que je me retrouve avec par exemple des id allant de 130 à 140 si j'ai supprimer les 129 premiers. Moi ce que je veux c'est que si je supprime les 129 premiers, les autres reviennent à zéro, donc ici on aurait de 0 à 10.
Y a t'il une option pour pouvoir gérer ca? En fait ca me pose un problème pour mon appli java. Une solution serait de ne pas utiliser l'autoincrement et d'attribuer sois même les id et de faire une mise à jour à chaque suppression. Mais si j'ai utilisé l'autoincrement c'est pour me faciliter la tâche, parce que je suis un gros flemmard.

Reply

Marsh Posté le 28-05-2004 à 21:38:19   

Reply

Marsh Posté le 29-05-2004 à 12:27:56    

Ouais en fait apprement y pas moyen

Reply

Marsh Posté le 29-05-2004 à 12:30:30    

Tu peux toujours faire un select max(id) pour avoir le plus gros ID pour manuellement mettre l'ID suivant, c'est pas trop compliqué si la gestion des ID d'Access ne te plaît pas ;)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 02-06-2004 à 00:10:26    

Oui mais ce que je recherchais c'était avoir une continuité de zéro à n valeur pour les id sans "trou" dès que je supprime une élément tout ceux qui un id> sont décrémenté afin de garder une harmonie ce qui permettrait d'avoir un traitement des données après ds mon prog. + simple. Mais c'est pas grave. Je fais autrement.
Bon sinon y a moyen de créer une fonction un peu comme ca :
(exemple en PHP)

Code :
  1. Function MiseAJourDesEnregistrements($UneTable, $LaPropriete,$UnNumeroDEnregistrement)
  2.   {
  3.             //Connexion avec le serveur et la base:
  4.             $connection = Connexion (NOM, PASSE, BASE, SERVEUR);
  5.             //Suppression de l'enregistrement:
  6.             $requetedesuppr="DELETE FROM $UneTable WHERE $LaPropriete=$UnNumeroDEnregistrement";
  7.             $resultatdesuppr = ExecRequete ($requetedesuppr, $connection);
  8.             //décrémentation des enregistrements suivants:
  9.             $requeteNbelement="SELECT * FROM $UneTable";
  10.             $resultatNbelement = ExecRequete ($requeteNbelement, $connection);
  11.             $Nbelement=mysql_num_rows($resultatNbelement);
  12.             //On vérifie si l'élément supprimé n'était pas le dernier:
  13.             if($Nbelement>$UnNumeroDEnregistrement)
  14.             {
  15.                       //On décrémente:
  16.                       for($i=$UnNumeroDEnregistrement; $i<$Nbelement; $i++)
  17.                       {
  18.                                 //
  19.                                 $j=$i+1;
  20.                                 $requetedeDecrementation="UPDATE $UneTable SET $LaPropriete = $i WHERE $LaPropriete = $j";
  21.                                 $resultatDecrementation = ExecRequete ($requetedeDecrementation, $connection);
  22.                       }
  23.             }
  24.   }


Message édité par Spir le 02-06-2004 à 00:11:46
Reply

Marsh Posté le 02-06-2004 à 00:13:08    

Ouais un COUNT(*) ou un MAX() aurais été mieux à la place du select * ...

Reply

Marsh Posté le 23-01-2006 à 19:34:06    

j'ai le meme probleme, mais en mysql, je voudrais que l'auto increment reparte à 1.
je crois que l'on peut faire ca en faisant une optimisation ou un truc du genre.
si vous avez des solutions ?
merci. :pt1cable:

Reply

Marsh Posté le 23-01-2006 à 20:21:30    

j'ai voulu faire un "flush" sous phpmyadmin, mais j'ai eu un "permission denied".
je coris qu'en faisant un flush ca marche, mais encore faut il que ca marche.

Reply

Marsh Posté le 23-01-2006 à 20:26:44    

Reply

Sujets relatifs:

Leave a Replay

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