Des données qui ne s'actualisent qu'au redemarrage du sistème. Comment y remédie

Leader2000 Messages postés 184 Date d'inscription mercredi 24 mai 2006 Statut Membre Dernière intervention 28 août 2015 - 10 juil. 2012 à 18:36
pierrotk10d Messages postés 110 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 2 février 2024 - 11 juil. 2012 à 22:02
Salut!

dans l'evènement onCreate, j'ai écrit ces codes afin d'avoir les noms listés dans un combobox. Curieusement, quand je sors et reviens sur ce form ou se trouve ce combobox. Les noms n'y apparaissent pas (dans le combox). Le dit combobox actualise les données (les noms) quand je redemarre le sisteme. Que faire?
J'ai fait company.Close; company.Open;
sans resultat.

begin
company.Open;
company.DisableControls;
try
while not company.Eof do
begin
cbxnome.Items.Add(company.FieldByName('prenom').AsString);
company.Next;
end;
finally

end;



Merci,
Developper est une dimension pour moi.
Leader2000

4 réponses

pierrotk10d Messages postés 110 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 2 février 2024 3
10 juil. 2012 à 21:27
Bonjour,
Je ne sait pas comment tu appelles ta form si c'est par la méthode Show ou ShowModal mais il ne devrait pas y avoir de problème puisque le TComboBox est rempli à la création de la fiche. Essaies dans l'événement OnShow de la fiche pour voir ce qui ce passe
Il manque le EnableControls; après le Finally
Si la table Company ne sert plus une fois le TComboBox rempli tu peux la refermer. Company.Close;
Le "With Company do begin" permet de ne pas trop s'user le bout des doigts en évitant de retaper x fois Company. Tu verras quand tu seras vieux!!!


pierrot
0
pierrotk10d Messages postés 110 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 2 février 2024 3
10 juil. 2012 à 22:25
Re bonjour,
Petite correction. Une fois le TComboBox rempli la table est sur l'EOF et à l'appel suivant elle y est toujours donc tu n'as rien dans ton TCombobox. Il faut donc mettre la table sur le premier enregistrement avant de remplir le TComboBox ou enregistrer la position de l'enregistrement actif avant le first avec PosEnr := Company.GetBookmark et se repositionner dessus une fois le TComboBox rempli avec un company.GotoBookmark(PosEnr) dans le finally;


pierrot
0
Leader2000 Messages postés 184 Date d'inscription mercredi 24 mai 2006 Statut Membre Dernière intervention 28 août 2015
11 juil. 2012 à 08:49
Je crois que c'est moi qui n'était peut être pas clair dans mon language.
Au fait, quand je rempli ma table avec du "append" et "post", les nouvelles données sont théoriquement dans mon combobox (je dirai dans la mémoire). Mais jusque là pas encore dans le dit combobox. Les données y apparaissent seulement quand je sors totalement du sistème et le relance.
Ma preoccupation est celle-ci: pourquoi les données ne sont pas actualisées à l'instant... il faut d'abord relancer mon programme (delà elles reapparaissent!).

Merci,


Developper est une dimension pour moi.
Leader2000
0
pierrotk10d Messages postés 110 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 2 février 2024 3
11 juil. 2012 à 22:02
Bonjour,
Il y a deux solutions.
Soit la fiche (cbxnome) qui contient le TComboBox est crée dynamiquement (donc détruite à la fermeture). Dans ce cas le TComboBox sera toujours rempli avec tous les enregistrements de ta table lors de sa création, car on parcours toute la table du 1èr au dernier enreg dans l'évènement OnCreate de la fiche.

// Exemple de fiche crée dynamiquement
procedure TForm1.PrenomClick(Sender: TObject);
Var fCombo: TfCombo;  // fCombo est la fiche qui contient le TComboBox
begin
  fCombo := TfCombo.Create(Self);
  Try
    fCombo.ShowModal;
  Finally
    fCombo.Free;
  end;
end;


Soit la fiche est toujours en mémoire (non détruite à la fermeture) dans ce cas il te faut rajouter dans l'événement AfterPost (par exemple)de ta table un bout de code qui ajoute aux items du TComboBox le champs prénom de l'enregistrement que tu viens d'insérer dans la table.

Exemple pour rajouter le prénom dans le TComboBox
fCombo.Items.Add(company.FieldByName('prenom').AsString); 


// Exemple de fiche toujours en mémoire
procedure TForm1.PrenomClick(Sender: TObject);
begin
  fCombo.ShowModal;  // fCombo est la fiche qui contient le TComboBox
end;




Je pense avoir répondu à ta question!!

pierrot
0
Rejoignez-nous