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 :

Champ incrementé ne se réinitialise pas après suppression


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 479
    Points : 102
    Points
    102
    Par défaut Champ incrementé ne se réinitialise pas après suppression
    Bonjour

    J'ai un champ incrémenté dans une table paradox et quand je supprime un enregistrement et que j'en rajoute un ensuite il me comptabilise quand même
    la ligne précédente.
    je m'explique

    je supprime la ligne 10 je rajoute une ligne et le n° de la ligne et 11 hors elle devrait-être 10. Pourquoi?

    Merci d'avance.

  2. #2
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    c'est tous a fait normal, les champs autoInc sont unique. si vous voullez une sequence qui ce suis vous devez gérer sa autrement.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 479
    Points : 102
    Points
    102
    Par défaut
    Oui mais comment alors ?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Points : 35
    Points
    35
    Par défaut
    St ttm,
    En plus de ce problèle, le champ auto Inc se sature rapidement et vous ne pouvez pas ajouter d'autres enregistrements, il vaut mieux utiliser un champ de type Integer(I) et l'incrémenter par programmation c'est la meuilleur solution.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 479
    Points : 102
    Points
    102
    Par défaut
    Merci

    Mais comment faire?

  6. #6
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    etant donnée ton Ton Champs clé et Num

    tu appel la requête suivante pour récupérer le numéro le plus grand

    et dans l'évenement onNewRecord de votre Table;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    MyQuery.Close;
    MyQuery.Sql.Clear;
    MyQuery.Sql.Add('SELECT TOP 1  Num FROM MaTable ORDER BY Num DESC');
    MyQuery.Open;
     
    if  MyQuery.RecordCout = 0 Then
      MaTable.FieldByName('Num').Value := 1
    else
    MaTable.FieldByName('Num').Value := MyQuery.FieldByName('Num').Value+1;
    mais cette méthode reste déconseillé si votre base et utilisé en réseau par plu sieur utilisateur (risque de doublon si deux user ajoute simultanément deux enregistrement)

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 479
    Points : 102
    Points
    102
    Par défaut
    Merci

  8. #8
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    pierrot67 j'ai corrigé quelque erreur qui se sont glissés dans ma requête, j'avai pas delphi sous la main.

  9. #9
    Membre habitué
    Inscrit en
    Avril 2003
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 316
    Points : 158
    Points
    158
    Par défaut
    sinon tu peux mettre un trigger dans ta base de données si elle le permet qui va recherche le max de tes clés primaires

  10. #10
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    notre ami utilise certainement Paradox ou access

  11. #11
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    338
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 338
    Points : 383
    Points
    383
    Par défaut
    bonjour

    @pierrot67
    les solutions proposées ne fonctionnent que pour la dernière ligne supprimée, c'est à dire: si tu supprime la ligne 7 (sur 10), une nouvelle ligne prendra le N°11.
    La solution serait peut être de laisser l'index "se débrouiller sans l'afficher" et de créer un champ "N°deligne" à afficher et gérer sois-même.

    @jenteldz47
    En plus de ce problèle, le champ auto Inc se sature rapidement et vous ne pouvez pas ajouter d'autres enregistrements,
    c'est combien la saturation? 100? 10 000? 1000 000?

    à plus

  12. #12
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    Citation Envoyé par banban54
    bonjour

    @pierrot67
    les solutions proposées ne fonctionnent que pour la dernière ligne supprimée, c'est à dire: si tu supprime la ligne 7 (sur 10), une nouvelle ligne prendra le N°11.
    La solution serait peut être de laisser l'index "se débrouiller sans l'afficher" et de créer un champ "N°deligne" à afficher et gérer sois-même.


    à plus
    personnellement j'utilise les champs Incrémenté automatiquement pour les ID. lorsque je veut garder une séquence numérique je rajoute un autre champ (l'un est une clés primaire et l'autre pour le numéro de séquence ) Exp N° Bon de commande, facture etc.

  13. #13
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Points : 35
    Points
    35
    Par défaut
    st ttm,
    banban54 a dit:
    c'est combien la saturation? 100? 10 000? 1000 000?
    tu sais que le champ AutoInc est de type SmallInt C.A.D l'intervalle des valeurs est:-32768..32767 (16*bits signé)

  14. #14
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    338
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 338
    Points : 383
    Points
    383
    Par défaut
    @jenteldz47

    merci de l'info, il faudra que j'en tienne compte car c'est un peu jeune pour certaines appli

    à plus

  15. #15
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    338
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 338
    Points : 383
    Points
    383
    Par défaut
    @jenteldz47

    je ne vais pas tarder à arriver aux 32000 pour tester le AutoInc (c'est un peu long mais j'avais 630 au départ avec plein de sous-tables).
    je vous tiens au courant lorsque ça explosera

    à plus

  16. #16
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    338
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 338
    Points : 383
    Points
    383
    Par défaut
    @jenteldz47

    BDE et le bon vieux Paradox [D6/XP]
    champ ID Autoincrémenté = 37740 (pour 32987 lignes) et aucun dysfonctionnement (ajout, modification, suppression...)

    ouf! je préfère

    à plus

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/03/2009, 18h10
  2. Réponses: 13
    Dernier message: 19/11/2008, 22h02
  3. [MySQL] Décrémenter automatiquement un champ de table après suppression d'une occurrence
    Par hicham_alaoui1 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 15/09/2007, 16h51
  4. réinitialiser le nbre des onglets apres suppression
    Par adilissimo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/06/2007, 16h51
  5. Réponses: 5
    Dernier message: 22/05/2006, 14h53

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