Actualisation en temp réel... Mais lente pourquoi???

Leader2000 Messages postés 184 Date d'inscription mercredi 24 mai 2006 Statut Membre Dernière intervention 28 août 2015 - 11 oct. 2012 à 11:37
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 16 oct. 2012 à 23:41
Bonjour!

Ces codes permettent d'actualiser mes données se trouvant dans le combobox (du moins importées d'un champ donné d'une table).
Curieusement, pour voir que les données sauvegardées sont belle et bien actualisées dans mon combobox . Il faut sortir completement de mon programme et le relancer.
Y a t-il un code a rajouté pour eviter ce genre de relancement.

begin
Logement.Open;
Logement.DisableControls;
try
while not Logement.Eof do
begin
locataire.Items.Add(Logement.FieldByName('nom').AsString);
Logement.Next;
end;
finally

end;


Developper est une dimension pour moi.
Leader2000

7 réponses

cs_walidlam Messages postés 107 Date d'inscription lundi 30 mai 2011 Statut Membre Dernière intervention 29 avril 2013 1
11 oct. 2012 à 13:32
salut!!
utiliser les Evénements
form.onshow
TableAfterPost
...
@+
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
11 oct. 2012 à 15:13
Bonjour,

Si la comboBox ne se met pas à jour ce la vient du fait
que la procédure est vraisemblablement mal située..

il est nécessaire de la placer dans un premier temps sur le OnCreate de la forme et de ce fait à l'ouverture la combo se met à jour.

Puis en cours de modification, d'ajout ou de suppression d'enregistrements de la table logement, il suffit de rafraîchir cette table en relançant la même procédure.


///sur le Oncreate
Logement.Open;
StockCombo;


/// après Insert, append ou delete
Procedure StockCombo;
begin
Logement.DisableControls;

Try
Logement.Refresh;
while not Logement.Eof do
begin
locataire.Items.Add(Logement.FieldByName('nom').AsString);
Logement.Next;
end;

Finally
Logement.EnableControls;
end; 



cantador
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
11 oct. 2012 à 15:16
oubli d'un "end" :

///sur le Oncreate
Logement.Open;
StockCombo;


/// après Insert, append ou delete
Procedure StockCombo;
begin
Logement.DisableControls;

Try
Logement.Refresh;
while not Logement.Eof do
begin
locataire.Items.Add(Logement.FieldByName('nom').AsString);
Logement.Next;
end;

Finally
Logement.EnableControls;
end; 

end;



cantador
0
Leader2000 Messages postés 184 Date d'inscription mercredi 24 mai 2006 Statut Membre Dernière intervention 28 août 2015
11 oct. 2012 à 17:34
En precompilation (ctrl +F9). Il y a un bug à ce niveau là (colorié en rouge)


Logement.Open;
StockCombo;


/// après Insert, append ou delete
Procedure StockCombo;
begin
Logement|
.DisableControls;

Try
Logement.Refresh;
while not Logement.Eof do
begin
locataire.Items.Add(Logement.FieldByName('nom').AsString);
Logement.Next;
end;

Finally
Logement.EnableControls;
end;

end;



Developper est une dimension pour moi.
Leader2000
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
13 oct. 2012 à 17:24
heu...

Logement.DisableControls;

cette écriture était déjà dans ton code précédent..

delphi ne trouve pas le query car
bien entendu il faut soit publier
la procédure ou l'intégrer dans le type de la forme.

c'est le b.a.-ba..

cantador
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
16 oct. 2012 à 13:25
Non, non et non,

Quand on met a jours un composant basé sur TStrings (TListBox, TComboBox, TRadioGroup, TCheckListBox, etc) et/ou basé sur un TCollection (TMenu, TCategoryButton etc) il faut utiliser un tampon TStringList et les procédures BeginUpdate, EndUpdate.


voici un exemple :

procedure TFormX.updateCombo;
var S : TStringList; 
begin
  S := TStringList.create;
  ComboBox.items.beginUpdate;
  try
    // requette de données
    // SI données disponibles
      // BOUCLE ?
        S.Add({donnée});
      // fin BOUCLE
      comboBox.clear;
      comboBox.items.assign(S);
    // fin SI
    // SINON
      LabelErreur.caption := 'les données ne sont pas disponibles.';
  finaly
    S.Free;
    comboBox.items.endUpdate;
  end;
end;



________________________________________________________
besoin de câbles audio, vidèo, informatique pas cher ?
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
16 oct. 2012 à 23:41
oui ok f0xi pour les TStringList, beginupdate et endupdate..
mais le plantage était du à l'absence de :
procedure TFormX.updateCombo;


cantador
0
Rejoignez-nous