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 :

suppression phisique d'un enregistrement "1 enregistrement et pas toute la table"


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2003
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 118
    Points : 39
    Points
    39
    Par défaut
    bonjour a tous
    j'ai une question a poser
    voici un code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    table1.Delete;
    l_dbi:= BDE.DbiPackTable(table1.dbHandle, table1.Handle, nil, nil, True);
    je veux savoir si DbiPackTable supprime l'enregistrement marque pour suppression apres un delete ou bien la table doit etre vide pour pouvoir supprimer l'enregistrement phisiquement

    DbiPackTable ne me supprime pas les enregistrement physiquement ou peut etre je ne sais pas comment l'utiliser exactement.
    merci.

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut Colombe,

    Jette un coup d'oeil à ce thread, cela devrait t'aider !
    http://www.developpez.net/forums/sho...d.php?t=142004

    @+

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2003
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 118
    Points : 39
    Points
    39
    Par défaut merci
    j'ai consulter mais je n'arrive toujour pas a supprimer mon enregistrement physiquement.
    aidez moi SVP.
    merci

  4. #4
    Nouveau membre du Club
    Inscrit en
    Janvier 2003
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 118
    Points : 39
    Points
    39
    Par défaut merci
    avec se code la

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.Button2Click(Sender: TObject);
    var l_dbi:integer;
    begin
    table1.Delete;
    table1.Active:=false;
    table1.Exclusive:=true;
    //table1.Open;
    //l_dbi:= BDE.DbiPackTable(table1.dbHandle, table1.Handle, nil, szDBASE, True);
    l_dbi:= DbiPackTable(Table1.dbHandle, Table1.Handle, nil, nil, True);
    if l_dbi<> 0 then
    begin
    showmessage('pb pack '+ inttostr(l_dbi));
    end;
    j'ai le message suivant qui s'affiche
    pb pack 9990 donc mon l_dbi=9990

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re,

    Essaye plutôt ce code, tu auras un message d'erreur plus explicite qu'un n° d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      with Table1 do begin
        Delete;
        Close;
        Exclusive := True;
        Open;
        Check(DBIPackTable(dbHandle, Handle, nil, nil, True));
      end;
    end;
    [EDIT]
    La valeur 9990 correspond à la constante DBIERR_INVALIDHNDL (The specified database handle or cursor handle is invalid or NULL
    )
    Ce qui parait logique puisque, en regardant ton code, tu ne réouvre pas ta table avant de faire un Pack.
    [/EDIT]
    @+

  6. #6
    Nouveau membre du Club
    Inscrit en
    Janvier 2003
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 118
    Points : 39
    Points
    39
    Par défaut
    si je met table1.open
    message d'erreur table1 occupée.
    c'est pour je ne l'ai pas mis...

    Apres execution du code suivant:

    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
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    table1.DatabaseName := 'c:\test\tables';
    table1.TableName := 'fig11.dbf';
    table1.TableType := ttDBase ;
    dbgrid1.DataSource:=datasource1;
    table1.Active := true;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    var l_dbi:integer;
    begin
    table1.Delete;
    table1.Active:=false;
    table1.Exclusive:=true;
    table1.Open;
    Check(DBIPackTable(table1.dbHandle,table1.Handle, nil, nil, True));
    BDE.DbiRegenIndexes (table1.Handle);
    end;

    je n'arrive plus a acceder a ma table index endomager Fig.MDX
    comment faire?
    merci

  7. #7
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut,

    Citation Envoyé par colombe
    si je met table1.open
    message d'erreur table1 occupée.
    c'est pour je ne l'ai pas mis...
    Cela siginifie que la table ne peut-être ouverte en mode exclusif, car déjà ouverte ailleurs. Vérifies donc si c'est bien le cas (dans une autre form par exemple).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    BDE.DbiRegenIndexes (table1.Handle);
    Cette dernière ligne de code est inutile car la reconstruction des index de la table a déjà été demandée lors du Pack (dernier paramètre à True).

    @+

  8. #8
    Nouveau membre du Club
    Inscrit en
    Janvier 2003
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 118
    Points : 39
    Points
    39
    Par défaut pas possible d'acceder a la table
    alors pourquoi se message

    impossible d'acceder a la table index endomage fig.MDX

    merci

  9. #9
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par colombe
    alors pourquoi se message

    impossible d'acceder a la table index endomage fig.MDX

    merci
    Ce message intervient-il sur le PackTable ou sur le RegenIndexes ?

  10. #10
    Nouveau membre du Club
    Inscrit en
    Janvier 2003
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 118
    Points : 39
    Points
    39
    Par défaut merci
    sur le packtable

  11. #11
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Visiblement tu es face à un index corrompu.
    Reconstruit les index manuellement (quitte à les supprimer puis les reconstruire), puis relance ton code.

    Une dernière remarque:
    Je suppose que le Button2 doit être un bouton 'Supprimer l'enregistrement'.
    Dans ce cas tu effectues un Pack à chaque fois que tu supprimes un enreg.
    Je pense qu'il serait plus judicieux de ne faire uniquement qu'un Delete sur le OnClick et d'effectuer un Pack sur ta table avant de quitter l'application.

    @+ Claudius

  12. #12
    Nouveau membre du Club
    Inscrit en
    Janvier 2003
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 118
    Points : 39
    Points
    39
    Par défaut merci pour la reponse
    j'ai une table .dbf avec trois index maitenue (MAT, NOMPRENOM, IND_AGEN)
    comment le recreer car l'index fig.mdx existe deja mais il est inaccessible.

  13. #13
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par colombe
    j'ai une table .dbf avec trois index maitenue (MAT, NOMPRENOM, IND_AGEN)
    comment le recreer car l'index fig.mdx existe deja mais il est inaccessible.
    Euh là !! Comme je n'utilise plus les tables DBF depuis des années...
    Je ne voies par trop, désolé !

  14. #14
    Nouveau membre du Club
    Inscrit en
    Janvier 2003
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 118
    Points : 39
    Points
    39
    Par défaut
    merci de votre aide

  15. #15
    Nouveau membre du Club
    Inscrit en
    Janvier 2003
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 118
    Points : 39
    Points
    39
    Par défaut creation d'index
    comment créer un index exp fig.mdx avec trois champ (MAT, NOMPREN,CODAGENCE)
    se sont des index mainetenue(MAT, NOMPREN,IND_AGEN).
    merci
    avec addindex j'ai
    table1.AddIndex('','MAT',[ixPrimary]); mais a la execution je n'ai que fig.mdx avec un seul champ maintenue (MAT).
    merci.
    aidez moi SVP .

Discussions similaires

  1. Enregistrer sous-formulaire meme si pas rempli
    Par mat75019 dans le forum Access
    Réponses: 3
    Dernier message: 22/04/2006, 09h32
  2. Réponses: 2
    Dernier message: 09/04/2006, 17h05
  3. enregistrer les données d'un FORMULAIRE sur une TABLE
    Par godzinho dans le forum Access
    Réponses: 15
    Dernier message: 11/03/2006, 19h03
  4. [JS] Problème de quotes pour enregistrer un formulaire.
    Par polnioumane dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 24/10/2005, 18h04
  5. enregistrer le chelin d'un fichier dans une table
    Par piscine dans le forum Bases de données
    Réponses: 3
    Dernier message: 08/09/2004, 16h13

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