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 :

Utilisation de TSimpleDataset : Problème de Delete


Sujet :

Bases de données Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut Utilisation de TSimpleDataset : Problème de Delete
    Bonjour,

    Pour une petite application , j'utilise des fichiers locaux (cds) via le composant TSimpleDataSet .
    Je crée le fichier de cette manière :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    with Etodo do
     begin
       try  Active:=False; except   end;
       if FileExists(EFile.Text) then DeleteFile(EFile.Text);
       try
         Active:=True;
         EmptyDataSet;
       except
         with FieldDefs do
           begin
            Clear;
            Add('NUMART',ftString,10,true); //EAN modele+Coloris
            Add('NOM',ftString,30,true);
            for i := 1 to 24 do
             begin
               Add('PT'+inttostr(i),ftString,3,false);
               Add('QT'+inttostr(i),ftInteger,0,false);
             end;
            Add('PRIX',ftCurrency,0,false);
            add('NOMDA',ftString,80,false);
           end;
         CreateDataSet;
         Active:=True;
         with IndexDefs do
           begin
             AddIndex('PKNUM','NOMDA',[ixPrimary]);
           end;
         SaveToFile;
       end;
     end;
    et le remplit généralement par code, à l'occasion les quantités (Champs QT1-QT24 sont modifiées) via un DbCtrlGrid. Jusque là pas de difficultés.
    Un DbNavigator permet de naviguer au sein du fichier. Je n'avais jusque là pas utilisé le (-) de ce dernier et là, ça coince !

    Si je clique dessus (exécution en mode debug) j'ai un joli ding-dong, pas de message d'erreur et plantage du programme !
    J'ai essayé de passer un message avec le BeforeDelete : ça se passe avant !
    J'ai essayé de vérifier lors de l'utilisation du bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
    begin
    if Button=nbDelete then Showmessage('nav : '+EtodoNOMDA.Value);
    même chose cela se passe avant !
    Moralité, j'ai raté quelque chose (certainement au niveau du SimpleDataSet), mais quoi ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bon, cela n'a inspiré personne et je le comprends

    j'ai contourné le problème en virant le bouton delete du DBNavigator et en en mettant un à part .
    Je ne connais toujours pas la cause exact de ce comportement , j'ai fait un programme test simple (même table, un dbgrid puis un dbctrlgrid, un dbnavigator) qui a parfaitement fonctionné . Repris le programme , supprimé puis remis le TSimpleDataset et obtenu le même comportement !

    La seule différence notable est le fait que le programme à fournir est prévu multilingue (utilisation de DKLang ) le test bien évidement non ! hors un message de confirmation de suppression d'enregistrement s'affiche lors du test et pas avec le programme réel . Si j'ai le temps , je ferais un test plus précis .

    En attendant , je suis sorti du pétrin , donc
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    TClientdataset, pas Tsimpledataset (c'est la même chose?????, peut êtres!!!!!)
    en plus; un champs clé primére doit êtres "required":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    add('NOMDA',ftString,80,false);
    AddIndex('PKNUM','NOMDA',[ixPrimary]);
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    je m'apperçoit que je n'avait pas indiqué la version de Delphi (D2010)
    TClientdataset, pas Tsimpledataset (c'est la même chose?????, peut êtres!!!!!)
    non , ce n'est pas la même chose , enfin pas tout à fait . Un TSimpleDataSet inclus un SQLConnection,un Provider et un ClientDataset , une simplification bien pratique en général
    en plus; un champ clé primaire doit être "required":
    oui ça , j'avais corrigé , une modification après ajout d'une fonctionnalité du programme , au départ c'était NUMART la clé primaire , dans ma modification du message je n'avais pas bien modifié le code
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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

Discussions similaires

  1. Problème RunSql Delete
    Par lito74 dans le forum Access
    Réponses: 5
    Dernier message: 29/05/2006, 13h13
  2. Réponses: 6
    Dernier message: 20/01/2006, 19h28
  3. [version 8.1] problème de delete massif
    Par XPierrot dans le forum DB2
    Réponses: 6
    Dernier message: 12/01/2006, 16h01
  4. [VB]problème avec DELETE
    Par jogu dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/01/2006, 10h53
  5. Problème de DELETE
    Par WinZy dans le forum Access
    Réponses: 2
    Dernier message: 21/09/2005, 12h58

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