Composants ADO CommandTimeout

J'ai un problème avec les paramètres de la requête de délai d'exécution avec TADOQuery, TADOCommand ou TADODataSet (j'ai essayé avec chacun). J'ai une petite application qui se connecte à la base de données et périodiquement exécute des procédures stockées, qui retourne le jeu de données comme un résultat.
Mon but est de garder cette application toujours en ligne, mais mon problème est que lorsque la connexion est perdue, le délai d'attente de simplement la commande en cours d'exécution (par le biais de l'un des composants mentionnés) prend la valeur par défaut de 30 secondes. J'ai été à la recherche de la solution, mais rien ne fonctionne.
Pourriez-vous me donner des conseils, comment définir la CommandTimeout par exemple à 5 secondes, ou pour mieux dire comment modifier ADODB.pas pour le respect de ma propre délai d'attente, s'il vous plaît ?

Il y avait beaucoup de "solutions" pour ce, comme DataComponent.Connexion.CommandTimeout := 1; mais vraiment, rien ne fonctionne. Je suis en utilisant D2009, MSSQL2005 et la connexion avec le composant de données est créé dynamiquement dans le fil.

La dernière, ce que j'ai essayé est ce

// protected variable owned and created in the thread with its own connection
var Query_Object: TADODataSet; 

// connection timeout is set to 3 seconds
Query_Object.Connection.ConnectionTimeout := 3;
...

// this piece of code I'm calling periodically in the only one existing thread
...
SQL_Query := 'EXEC my_procedure_which_returns_dataset'

with Query_Object do
  begin
    Close;    
    CommandType := cmdText;
    CommandText := SQL_Query;
    CommandTimeout := 5;             // doesn't affect the timeout
    CursorLocation := clUseServer;   // let the dataset retreives prepared data
    Open;
  end;

// and here I need to get faster than in the default 15 seconds to let the user
// know that the reading takes more than mentioned 5 seconds
...

Merci beaucoup 🙂

OriginalL'auteur | 2011-02-22