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 :

l'ensemble de donnée n'est pas en mode edition ou insertion


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 95
    Points : 53
    Points
    53
    Par défaut l'ensemble de donnée n'est pas en mode edition ou insertion
    bonjour;
    j'ai un probleme et je veux de l'aide:

    j'ai une table Paradox:

    id date credit debit solde

    voila ; je veux creer un bouton nomé (" calculer solde" ) qui parcourir la table paradox et calculer le solde de chaque ligne
    exemple:
    id date credit debit solde
    0 20/09/2009 1000 0 1000
    1 20/09/2009 0 2000 -1000
    etc.........
    voila le code du boutton:

    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
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      Table1.Edit;
      Table1.Last;
      edit2.text:=Table1.FieldByName('id').Text;
      Table1.First;
      m:=strtoint(edit2.text);
      for i:=1 to m do
      begin
        me:=soldes+strtoint(table1.FieldByName('credit').Value)-strtoint(Table1.FieldByName('debit').Value);
        ce:=soldes+me;
        soldes:=me;
        Table1.FieldByName('solde').Value:=inttostr(soldes);
        Table1.Post;
      end
    end;
    mais quand je clique il ya un message d'erreur du genre:
    table1:
    l'ensemble de donnée n'est pas en mode edition ou insertion

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    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 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    je comprends pas la raison du premier Table1.Edit; vu que tout de suite apres il y a un Last ? A quoi sert le for i=1 to m ?

    1°correction

    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
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    Table1.Active:=True;
    Table1.First;
    While not Table1.EOF do
      begin            me:=soldes+strtoint(table1.FieldByName('credit').Value)-strtoint(Table1.Fi     eldByName('debit').Value);
      ce:=soldes+me;
      soldes:=me;
       table1.Edit
      Table1.FieldByName('solde').Value:=inttostr(soldes);
      Table1.Post;
      Table1.Next;
    end;
    end
    je n'ai pas tout compris , ce correspond / sert a quoi
    si solde est un champ numerique ? pourquoi n'avoir pas écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      Table1.FieldByName('solde').Value:=soldes;

    PS . Utilises les balises de code bouton # pour encadrer 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

  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
    il y a petit hic dans ton code, si t'a un ligne supprimer par example, alors le nombre des lignes retourné est < max(ID), mieux utlise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       Table.close;// pour mise à jour des données
       Table.open; 
       while not Table.eof do
          begin
    ....
            Table.next;
          end;
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      Table1.Edit;
      Table1.Last;
    ????
    aussi: strtoint(table1.FieldByName('credit').Value) et
    strtoint(Table1.FieldByName('debit').Value);
    debit et credit sont des strings dans ta base , ??
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Août 2006
    Messages : 106
    Points : 55
    Points
    55
    Par défaut
    La raison du message d'erreur est que la table n'est pas en mode edition ou insertion à cause du Table1.Last qui enleve le mode edition ou insertion, si tu veux récupérer le nombre d'enregistrements de ta table c'est mieux d'utiliser Table1.RecordCount :
    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);
    Var i:Integer;
    begin
    Table1.First;
    For i:=1 to Table1.RecordCount do
        begin
          Table1.Edit
          Table1.FieldByName('solde').Value:=Table1.FieldByName('solde').Value+Table1.FieldByName('credit').Value-Table1.FieldByName('debit').Value;
          Table1.Next;
        end;
    end;

  5. #5
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 95
    Points : 53
    Points
    53
    Par défaut merci pous réponses
    bonjour;
    j'ai fini par trouvé une réponse: je suis débutant sur delphi merci beaucoup:
    et voila le code :
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids, DBGrids, DB, DBTables, StdCtrls,unit2, frxClass, frxDBSet,
      frxDesgn;
     
    type
      TForm1 = class(TForm)
        DataSource1: TDataSource;
        Table1: TTable;
        DBGrid1: TDBGrid;
        btvalider: TButton;
        RadioButton1: TRadioButton;
        RadioButton2: TRadioButton;
        Edit1: TEdit;
        Label1: TLabel;
        btmouvement: TButton;
        frxDBDataset1: TfrxDBDataset;
        frxDesigner1: TfrxDesigner;
        Button1: TButton;
        frxReport1: TfrxReport;
     
        procedure btvaliderClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure btmouvementClick(Sender: TObject);
        procedure Button1Click(Sender: TObject);
     
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
      soldes: integer;
      m,i,me,ce,tmp:integer;
      c: string;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.btvaliderClick(Sender: TObject);
    begin
     
    Table1.Append;
    table1.Edit;
    Table1.FieldByName('Date').AsDateTime:=TRUNC(Date);
     
    if RadioButton1.Checked then
     begin
     
     Table1.FieldByName('Credit').Value:=Edit1.text;
     Table1.FieldByName('Debit').Value:='0';
     Table1.Post;
     with Table1 do
     begin
      first;
      while not eof do
        begin
          Table1.Edit;
          table1.FieldByName('Solde').Text:='0';
          Table1.Post;
          next;
        end;
     
      end;
     
     
    with Table1 do
     begin
      first;
      while not eof do
        begin
          Table1.Edit;
          soldes:=strtoint(table1.FieldByName('Solde').Text);
     
          me:=tmp+strtoint(table1.FieldByName('credit').Value)-strtoint(Table1.FieldByName('debit').Value);
     
          ce:=soldes+me;
          soldes:=ce;
          tmp:=soldes;
          Table1.FieldByName('solde').Value:=inttostr(soldes);
          Table1.Post;
          next;
        end;
        tmp:=0;
      end
     
     
     end;
     
     
     if RadioButton2.Checked then
      begin
       Table1.FieldByName('Debit').Value:=Edit1.Text;
       Table1.FieldByName('Credit').Value:='0';
       Table1.Post;
       with Table1 do
     begin
      first;
      while not eof do
        begin
          Table1.Edit;
          table1.FieldByName('Solde').Text:='0';
          Table1.Post;
          next;
        end;
     
      end;
     
     
    with Table1 do
     begin
      first;
      while not eof do
        begin
          Table1.Edit;
          soldes:=strtoint(table1.FieldByName('Solde').Text);
     
          me:=tmp+strtoint(table1.FieldByName('credit').Value)-strtoint(Table1.FieldByName('debit').Value);
     
          ce:=soldes+me;
          soldes:=ce;
          tmp:=soldes;
          Table1.FieldByName('solde').Value:=inttostr(soldes);
          Table1.Post;
          next;
        end;
        tmp:=0;
      end
     
     
      end;
     
     
     Edit1.Text:='       ';
     btvalider.Enabled:=false;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    soldes:=0;
    me:=0;
    ce:=0;
    tmp:=0;
    DBGrid1.Columns[0].Width:=30;
    DBGrid1.Columns[1].Width:=100;
    DBGrid1.Columns[2].Width:=120;
    DBGrid1.Columns[3].Width:=120;
    DBGrid1.Columns[4].Width:=120;
    Edit1.Text:='  ';
    btvalider.Enabled:=false;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    with Table1 do
     begin
      first;
      while not eof do
        begin
          Table1.Edit;
          table1.FieldByName('Solde').Text:='0';
          Table1.Post;
          next;
        end;
     
      end;
     
     
    with Table1 do
     begin
      first;
      while not eof do
        begin
          Table1.Edit;
          soldes:=strtoint(table1.FieldByName('Solde').Text);
     
          me:=tmp+strtoint(table1.FieldByName('credit').Value)-strtoint(Table1.FieldByName('debit').Value);
     
          ce:=soldes+me;
          soldes:=ce;
          tmp:=soldes;
          Table1.FieldByName('solde').Value:=inttostr(soldes);
          Table1.Post;
          next;
        end;
        tmp:=0;
      end
     
     
    end;
     
    procedure TForm1.btmouvementClick(Sender: TObject);
    begin
    Edit1.SetFocus;
    btvalider.Enabled:=true;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    frxReport1.LoadFromFile('liste.fr3');
    frxReport1.ShowReport();
    end;
     
    end.

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    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 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Balises ton code SVP (le bouton #)
    et de plus si c'est résolu alors pourquoi ne pas cliquer sur le bouton

    reste quand même quelques remarques

    je ne comprends pas que les valeurs soient définies en string dans ta table
    et si ce n'est pas le cas un strtoint et un inttostr pour des montants semblent-ils monétaires (debit,credit,solde) c'est pas vraiment le top

    a quoi servent les radiobuttons ?

    un code bien indenté , aurait été plus facilement lisible
    exemple :

    Code ton code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    with Table1 do
    begin
    first;
    while not eof do
    begin
    Table1.Edit;
    table1.FieldByName('Solde').Text:='0';
    Table1.Post;
    next;
    end;
     
    end;

    Code le même : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
     with Table1 do 
      begin
        first;
        while not eof do
          begin
             Edit;
             FieldByName('Solde').Text:='0';
             Post;
            next;
          end;  // while
        end;  // with
    end;

    Désolé , c'est mon coté prof, pourtant bien fini, qui ressort
    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

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/05/2014, 14h43
  2. L'ensemble des données n'est pas en mode Edition ou Insertion
    Par devilbyme dans le forum Composants VCL
    Réponses: 5
    Dernier message: 27/09/2010, 19h17
  3. Erreur: Ensemble de donnée n'est pas en mode édition
    Par pascal07 dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/11/2008, 21h20
  4. Réponses: 1
    Dernier message: 15/03/2007, 17h43
  5. ensemble de données pas en mode edition
    Par XloX dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/06/2005, 12h17

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