2010-10-06 26 views
0

J'utilise TADOQuery dans Delphi 7.
Dans le constructeur, j'appelle ADOQuery.open.ADOQuery se ferme après le constructeur

Pourquoi le ADOQuery est-il fermé lorsqu'une autre fonction est appelée depuis l'extérieur du formulaire?

constructor TClass1.Create(AOwner: TComponent; 
    MyParam: TProgramParam); 
begin 
    inherited; 
    ADOQuery.Open; 
    ADOQuery.Locate('fieldName',Param,[]); 
end; 
+1

Vous devez fournir quelques informations. Comme quand on appelle quelle fonction? En dehors de quelle forme? où 'Class1' obtient le 'ADOQuery' puisqu'il ne le crée pas ?, etc. –

Répondre

4

Mon conseil pour trouver qui ferme le DataSet:

Créer un nouveau gestionnaire d'événements pour l'événement BeforeClose du AdoQuery, mettez tout ce qui est compilé et exécuté juste pour mettre un point de jonction. Par exemple:

procedure TfrmCreDocCredito.cdsSucursalesBeforeClose(DataSet: TDataSet); 
begin 
    ShowMessage('Closing!!'); 
end; 

Lancez votre programme, effectuer toute action de l'utilisateur nécessaire pour créer votre instance de classe et lorsque le programme cesse sur le point d'arrêt, vous avez la chance d'inspecter la pile d'appels. Cela révèlera qui, et si vous y réfléchissez un peu, vous découvrirez pourquoi l'ensemble de données se ferme. Si votre point d'arrêt ne se déclenche pas, je parie que l'ensemble de données ne s'ouvre jamais vraiment.

Cordialement.

+0

Ceci est une idée de génie, Et je me tiens à demander, comment ne pas penser à cela moi-même :) merci. – none

0
constructor TClass1.Create(AOwner: TComponent; 
    MyParam: TProgramParam); 
begin 
    inherited; 
    ADOQuery.Open; 
    ADOQuery.Locate('fieldName',Param); 
end; 

// 

constructor TClass1.Create(AOwner: TComponent; 
    MyParam: TProgramParam); 
begin 
    inherited; 
    ADOQuery.Open; 
    ADOQuery.Locate('fieldName',Param,[]); 
end; 
+3

Je ne vois pas le point dans votre * réponse *. Si vous essayez de suggérer que le troisième argument est manquant dans 'Locate', postez un * commentaire * à la place. – kobik