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 :

Effacement de données et numero automatique


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Points : 50
    Points
    50
    Par défaut Effacement de données et numero automatique
    Bonjour j'aimerais savoir deux choses.

    Premièrement est-il possible de supprimer des lignes dans Access et de remettre le numéro automatique à la valeur correcte pour que l'enregistrement suivant suive le précédent. Exemple j'ai 5 lignes de 1 à 5 je supprime les lignes 4 et 5 et quand je rajoute une donnée par après, le numéro reparte de 4 et non de 6.

    Deuxièmement, comment peut-on faire pareille en passant par delphi?

    Merci beaucoup

  2. #2
    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
    Peut etre une solution:
    En delphi avant d'insérer une nouvelle ligne, tu génère toi même ta clé primaire en recherchant la valeur MAX présente dans la base et en l'incrémentant.
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  3. #3
    Membre du Club
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Points : 50
    Points
    50
    Par défaut
    Malheureusement je voudrais justement éviter cela car je dois garder ma clef primaire dans la base de donnée ce qui veux dire (je pense) qu'on ne puisse pas lui assigner de valeur nous même.

  4. #4
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut


    la solution est de compacter ta base.
    je cherche le code pour le faire sous delphi mais je ne le retrouve plus...

  5. #5
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    ah oui voilà la procédure dans la FAQ: Comment compacter une base Access ?

  6. #6
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par cbegood Voir le message
    Malheureusement je voudrais justement éviter cela car je dois garder ma clef primaire dans la base de donnée ce qui veux dire (je pense) qu'on ne puisse pas lui assigner de valeur nous même.
    A moins que tu le fais avec un trigger + generator dans ta base sinon tu peux assigner une valeur à ta clé a partir de delphi

  7. #7
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    Citation Envoyé par Akli f Voir le message
    A moins que tu le fais avec un trigger + generator dans ta base sinon tu peux assigner une valeur à ta clé a partir de delphi
    malheureusement, il n'y a ni trigger ni générateur sous Access.

  8. #8
    Membre du Club
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par evarisnea Voir le message
    la solution est de compacter ta base.
    Il me semblait bien mais je ne comprend pas pourquoi ça ne fonctionne pas je compacte ma base de donnée dans Access et il continue a incrémenter mon numéro automatique sans s'actualiser. C'est énervant car avant ça fonctionnait bien. Merci pour le code Delphi je le testerai.
    Par contre si quelqu'un sais d'ou peut venir le problème que j'ai dans Access?

    Merciii

  9. #9
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    Citation Envoyé par cbegood Voir le message
    C'est énervant car avant ça fonctionnait bien.
    que veux-tu dire par là ?

  10. #10
    Membre du Club
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Points : 50
    Points
    50
    Par défaut
    Et bien je fais des tests avec Delphi donc je rempli parfois involontairement des lignes dans ma base de donnée. Donc j'ouvre de temps en temps ma base de donnée avec Access pour aller supprimer les lignes que j'ai ajouté. Donc comme je l'ai expliqué je vais supprimer les dernières ligne de ma base de donnée. Ex:les lignes 100 a 125 (il n'y a plus de ligne après). Après avoir supprimé ces lignes je compacte la base de donnée ce qui devrait remettre le numero automatique a 100 (pour l'exemple) et plus a 126. Cependant cela ne fonctionne pas alors qu'avant cela fonctionnais bien.

  11. #11
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    bizarre, bizarre
    je viens de faire le test sous Access 2007 et ça ne réinitialise pas les numéros automatiques, pourtant j'aurais juré que je l'avais fait sous des versions précédentes d'Access

  12. #12
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    Salut !

    Je ne suis pas surpris qu'Acces ne génère qu'une fois et une seule les numéros automatiques, car :

    - par définition : type de données NuméroAuto = dans une base de données Microsoft Access, type de données de champ qui stocke automatiquement un numéro unique pour chaque enregistrement au moment de son ajout à une table.

    - par l'usage qu'on fait de ce type de champ, qui sert souvent d'identifiant unique / d'index pour les relations entre tables. Supprimer un index automatique suppose d'en supprimer toutes ses dépendances . De plus, on pourrait vouloir supprimer les derniers enregistrements, mais aussi des enregistrements intermédiaires. Comment alors les renommer ? renuméroter tous les enregistrements suivants ? affecter un numéro automatique inférieur au dernier utilisé ? Bref, que des complications ...


    Ceci, dans l'aide d'Acces , petit "algorithme" pour ce qui veulent s'y frotter :


    Modifier la valeur initiale d'un champ NuméroAuto
    Dans le cas d'une nouvelle table ne comportant aucun enregistrement, vous pouvez remplacer la valeur initiale d'un champ NuméroAuto dont la propriété NouvellesValeurs (NewValues) est définie sur Incrément par un nombre différent de 1.

    Dans le cas d'une table comportant des enregistrements, vous pouvez également utiliser cette procédure afin de remplacer la valeur suivante affectée à un champ NuméroAuto par un nouveau nombre.

    1. Si la définition des paramètres de votre table d'origine n'autorise pas de valeurs Null dans les champs, vous devez modifiez temporairement ces propriétés. La définition de ces propriétés comprend :
      • La valeur Oui est attribuée à la propriété Null interdit (Required) du champ.
      • La valeur Oui - Sans doublons est attribuée à la propriété Indexé (Indexed) du champ.
      • La propriété ValideSi (ValidationRule) d'un champ et/ou d'un enregistrement qui n'autorise pas les valeurs Null dans les champs.

    2. Créez une table temporaire ne contenant qu'un seul champ : un champ Numérique. Attribuez à sa propriété TailleChamp (FieldSize) la valeur Entier long et donnez-lui le même nom que le champ NuméroAuto de la table dont vous souhaitez modifier la valeur.
    3. En mode Feuille de données, entrez une valeur dans le champ Numérique de la table temporaire inférieure d'une unité à la valeur de départ voulue pour le champ NuméroAuto. Si, par exemple, vous voulez que le champ NuméroAuto commence à 100, tapez 99 dans le champ Numérique.
    4. Créez, puis exécutez une requête Ajout afin d'ajouter la table temporaire à la table dont vous souhaitez modifier la valeur NuméroAuto.
    5. Supprimez la table temporaire.
    6. Supprimez l'enregistrement ajouté par la requête Ajout.
    7. Si vous avez désactivé des paramètres de propriété à l'étape 3, rétablissez leurs valeurs d'origine.


    Lorsque vous entrez un enregistrement dans la table restante, Microsoft Access utilise une valeur de champ NuméroAuto qui est supérieure d'une unité à la valeur tapée dans la table temporaire.
    Y-a plus qu'à ... !!
    "Je n'ai jamais rencontré d'homme si ignorant qu'il n'eut quelque chose à m'apprendre."
    Galilée

  13. #13
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Salut;

    Ça marche mais faut juste vider la table puis la compacter donc l'astuce c'est de copier les données vers une nouvelle base de données compacter l'ancienne puis recopier les données dans la base d'origine.

    Bonne chance.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  14. #14
    Membre du Club
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par Kelloucheaeh Voir le message
    Salut;

    Ça marche mais faut juste vider la table puis la compacter donc l'astuce c'est de copier les données vers une nouvelle base de données compacter l'ancienne puis recopier les données dans la base d'origine.

    Bonne chance.
    Yes en effet j'avais remarqué que ça fonctionnait seulement quand on vide completement la table.

    Merci a tous.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/02/2014, 16h27
  2. [ASE][T-SQL]Numéros automatiques
    Par anlob dans le forum Sybase
    Réponses: 1
    Dernier message: 15/05/2006, 11h49
  3. Agrandissement du Numero automatique
    Par valery17 dans le forum Access
    Réponses: 11
    Dernier message: 11/05/2006, 12h58
  4. MVC pour connecter données et vue automatiquement
    Par tonioab dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 31/01/2006, 11h58
  5. saisie de données et génération automatique d'un classement
    Par kcizth dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 23/12/2005, 13h24

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