Erreur de timeout d'attente lors de l'exécution de la requête

J'exécute la requête suivante dans une procédure stockée, en transférant les transactions d'un an d'une table à une autre:

insert into table2 select * from table1 where dates between '20110101' and 20111231' 

Lorsque j'utilise VB6 pour appeler la procédure stockée, il expire.

J'ai essayé de définir la propriété QueryTimeout sur ma connection RDO à cinq secondes comme suit:

 RdoConn.QueryTimeout = 5000 

Mais il est encore time de sortir.

Comment puis-je empêcher l'exécution de la requête d'expirer?

Si vous utilisez une connection Ado, vous pouvez utiliser le code suivant

 dim myConn Set myConn = CreateObject("ADODB.Connection") myConn.CommandTimeout = 3600 myConn.ConnectionTimeout = 3600 

puis utilisez cette connection pour exécuter votre requête.

Combien de time votre requête prend-elle pour fonctionner sans problème?

Mettre à jour:
En utilisant RdoConnection, vous pouvez essayer de définir l'événement LoginTimeout

 RdoConn.QueryTimeout = 5000 RdoConn.LoginTimeout = 5000 

ou comme l'a souligné Oleg Dok

 RdoConn.QueryTimeout = 0 'disable timeout RdoConn.LoginTimeout = 0 'disable timeout 

Vos deux options (sans changer le schéma de database) sont:

1) Augmentez votre time d'expiration, par exemple:

 RdoConn.QueryTimeout = 30000 

2) Si votre requête prend plus de 30 secondes à s'exécuter, vous devriez probablement essayer de décomposer votre instruction select en plus petites parties:

 Insert into table2 select * from table1 where dates between '20110101' and 20110131' Insert into table2 select * from table1 where dates between '20110201' and 20110228' 

Comme mentionné cependant, vous devriez également regarder les index et les types de données dans votre database pour améliorer les performances