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