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

 Delphi Discussion :

Faire un reset Des Id d'une base access apres suppression


Sujet :

Delphi

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Amateur devloppeur
    Inscrit en
    Juillet 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amateur devloppeur

    Informations forums :
    Inscription : Juillet 2012
    Messages : 4
    Points : 0
    Points
    0
    Par défaut Faire un reset Des Id d'une base access apres suppression
    Salut,
    comme indique le titre , je suis entrains de traiter une base access (ajout, suppression )....
    par ex :
    après la suppression d'une ligne de la base de donné , on aura un décalage dans les id:
    avant suppression : 1 2 3 4 5
    après suppression : 1 2 4 5

    comment peut on faire réglé se petit soucis pour que les "id" reprennent l'ordre
    cordialement

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    Il est impossible de remettre dans l'ordre un index auto-incrémenté. Sans cette sécurité, la base de données ayant des tables avec clés étrangères serait corrompue. Le principe de l'index auto-incrémenté est, comme son nom l'indique, d'ajouter un au dernier numéro de l'index connu.

    D'ailleurs, je ne vois pas en quoi cela te pose un souci ?

    Maintenant, si tu veux garder ton index avec tous les numéros, il ne faut pas supprimer une ligne, mais simplement prévoir une colonne qui, si elle positionnée, empêche la visualisation de la ligne concernée. Ce principe est souvent utilisé dans le développement des bases de données pour la gestion d'une comptabilité.

    Je ne connais pas en détail Access, mais il me semble qu'il est en conformité avec ce principe.

    A+

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Amateur devloppeur
    Inscrit en
    Juillet 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amateur devloppeur

    Informations forums :
    Inscription : Juillet 2012
    Messages : 4
    Points : 0
    Points
    0
    Par défaut
    Merci pour votre répance seabs.
    Beh j'ai une autre question concernant une requete Update SQL
    après le click,message d'erreur "Erreur de syntaxe dans l'istruction UPDATE"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    procedure TForm3.BitBtn1Click(Sender: TObject);
    var
      strcle : string ;
    begin
        Form1.ADOQuery1.SQL.Clear;
        if EditNom.Text='' then
         showmessage (' écrire un non svp ')  else
        if MessageDlg('modifié ?', mtConfirmation,[mbYes,mbNo],0)=mrYes then
    begin
       strcle := Form1.DBGrid1.Fields[0].Value;
       Form1.ADOQuery1.SQL.Clear;
       Form1.ADOQuery1.SQL.add('UPDATE into Contribuable (Nom)values('+quotedstr(EditNom.Text)+','+quotedstr(EditAdresse.Text)+','+quotedstr(EditTlPersonnel.Text)+','+quotedstr(EditTlphoneMobile.Text)+','+quotedstr(EditEmail.Text)+','+quotedstr(DBMemo1.Text)+')');
       Form1.ADOQuery1.SQL.Add('WHERE Nom='+strcle+'');
       Form1.ADOQuery1.ExecSQL;
       Form1.ADOQuery1.Close;
       showmessage('Le film a bien été modifié');
     
       end;
       end;
    ou est l'erreur ??

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    la syntaxe du UPDATE est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE ma_table SET ma_colonne_1 = nouvelle_valeur
    WHERE condition ...
    Merci d'ajouter un sur les tags qui vous ont aidé

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Amateur devloppeur
    Inscrit en
    Juillet 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amateur devloppeur

    Informations forums :
    Inscription : Juillet 2012
    Messages : 4
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par dehorter olivier Voir le message
    la syntaxe du UPDATE est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE ma_table SET ma_colonne_1 = nouvelle_valeur
    WHERE condition ...
    ok mais j'arrive pas tjrs a trouver ma faute ...

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    Ta requête de modification est inexacte.

    Elle devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE Contribuable SET NOM = :pNom WHERE NOM = :pCle
    Pour toi, nous aurons :

    Form1.ADOQuery1.SQL.add('UPDATE Contribuable SET NOM = ' + quotedstr(EditNom.Text));
    Form1.ADOQuery1.SQL.Add('WHERE Nom = ' + strcle);

    Si tu veux modifier d'autres colonnes, il est nécessaire de mettre pour chacune NomColonne = :NomElément.

    La commande INTO est réservée pour l'insertion

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO Contribuable () Values()
    Cela doit répondre à ta demande sauf erreur de syntaxe.

    A+

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    ah bon

    et pourtant elle est triviale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Form1.ADOQuery1.SQL.add('UPDATE into Contribuable (Nom)values('+quotedstr(EditNom.Text)+','+quotedstr(EditAdresse.Text)+','+quotedstr(EditTlPersonnel.Text)+','+quotedstr(EditTlphoneMobile.Text)+','+quotedstr(EditEmail.Text)+','+quotedstr(DBMemo1.Text)+')');
       Form1.ADOQuery1.SQL.Add('WHERE Nom='+strcle+'');
    rien ne te choque la dedans (un petit mixte de UPDATE et de INSERT, à moins qu'ACCESSS l'autorise).

    NB : Il ne faut nous mettre que la partie SQL est pas toutes les autres "fioritures"
    Merci d'ajouter un sur les tags qui vous ont aidé

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 74
    Points : 76
    Points
    76
    Par défaut
    Une manière de reindexé peut-être de vider la table dans une table temporaire, de faire un compactage (en cas de compactage l'index d'une table vide et remis à zéro) et de réinjecter tes enregistrements dans la table d'origine...

    Cependant attention, si ton index sert de clé pour faire le lien avec les enregistrements d'autres tables (ex: TMaitre.ChampCleAuto = TClient.ChampMaitreID), cette méthode devient plus complexe (voir casse-gueule s'il y a vraiment beaucoup de liens), il faut au fur et à mesure de la réinsertion, changé dans toutes les tables liées l'ancien "id" du champ maître par le nouveau "id" obtenu à l'insertion... bref que du bonheur, en soi cette réindexation n'a aucun intérêt dans le fonctionnement interne de ta base, access n'ira pas pour autant plus vite à répondre aux requêtes

  9. #9
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Citation Envoyé par istam3 Voir le message
    Une manière de reindexé peut-être de vider la table dans une table temporaire, de faire un compactage (en cas de compactage l'index d'une table vide et remis à zéro) et de réinjecter tes enregistrements dans la table d'origine...

    Cependant attention, si ton index sert de clé pour faire le lien avec les enregistrements d'autres tables (ex: TMaitre.ChampCleAuto = TClient.ChampMaitreID), cette méthode devient plus complexe (voir casse-gueule s'il y a vraiment beaucoup de liens), il faut au fur et à mesure de la réinsertion, changé dans toutes les tables liées l'ancien "id" du champ maître par le nouveau "id" obtenu à l'insertion... bref que du bonheur, en soi cette réindexation n'a aucun intérêt dans le fonctionnement interne de ta base, access n'ira pas pour autant plus vite à répondre aux requêtes
    conclusion (brutale) : ca ne sert à rien
    Merci d'ajouter un sur les tags qui vous ont aidé

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Amateur devloppeur
    Inscrit en
    Juillet 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Amateur devloppeur

    Informations forums :
    Inscription : Juillet 2012
    Messages : 4
    Points : 0
    Points
    0
    Par défaut
    istam3 & dehorter olivier
    --------------------------
    Merci pour vos réponses.
    C'est vrai que la réindexation ne sert à rien dans le coté de programmation
    mais comme je trouve , notre Base De Données sera pleins de trou
    et mon but était d'éviter ça.

  11. #11
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut


    le côté esthétique n'a aucune importance. Qu'il y ait des trous ou non dans la clé primaire ne change rien à son efficacité

    Conseil : laisse tomber ce genre de chose; tout est perdant là-dedans
    Merci d'ajouter un sur les tags qui vous ont aidé

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 74
    Points : 76
    Points
    76
    Par défaut
    conclusion (brutale) : ca ne sert à rien
    C'est vrai que ça ne sert à rien, mais c'est la réponse à la question posée.
    notre Base De Données sera pleins de trou
    en les comptant tu pourras connaitre le nombre d'enregistrement supprimés

Discussions similaires

  1. [XL-2010] comment faire des insert dans une base access sans avoir access
    Par Poulki dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/08/2012, 07h45
  2. Réponses: 2
    Dernier message: 11/04/2009, 17h29
  3. Stocker / Extraire des fichiers dans une base Access
    Par bryan_fury75 dans le forum Bases de données
    Réponses: 5
    Dernier message: 14/06/2006, 15h17
  4. [Access 2002] Exporter des données vers une base Access 2.0
    Par SamLeChiseuji dans le forum Access
    Réponses: 27
    Dernier message: 01/06/2006, 11h41
  5. [Excel] Récupérer des données d'une base Access
    Par FoxDeltaSierra dans le forum Excel
    Réponses: 8
    Dernier message: 03/09/2005, 10h22

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