lenteur avec ODBC ADODB
Mer 9 Jan 2008 - 10:52
Bonjour,
À chaque fois que j'envoie un SELECT * FROM TransactionHeader pour créer une facture a requête prend vraiment beaucoup de temps (3 à 4 minutes ou time out).
Y'a-t-il un moyen d'accélérer le processus ?
ADODB.Connection CNN = ADOConnect();
Object outRecord = Type.Missing;
CNN.Execute("BEGIN_TRANSACTION_IN", out outRecord, -1);
ADODB.Recordset rstTransHeader = new ADODB.Recordset();
//Header
rstTransHeader.Open("SELECT * FROM TransactionHeader", CNN, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockPessimistic, -1);
rstTransHeader.AddNew(Type.Missing, Type.Missing);
rstTransHeader.Fields["InInvoiceType"].Value = 1;
rstTransHeader.Fields["InReference"].Value = Reference;
rstTransHeader.Fields["InDescription"].Value = Description;
rstTransHeader.Fields["InCurrentDay"].Value = -1;
rstTransHeader.Fields["InTransactionActive"].Value = -1;
ADODB.Recordset rstCustomerData = new ADODB.Recordset();
rstCustomerData.Open("SELECT * FROM Customer WHERE RecCardPos=" + cardPos + "", CNN, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic, -1);
rstTransHeader.Fields["InTaxGroupCP"].Value = rstCustomerData.Fields["CuTaxGroupCP"].Value;
Re: lenteur avec ODBC ADODB
Jeu 10 Jan 2008 - 11:48
Voilà ce qui résolu le problème :
SELECT * FROM TransactionHeader WHERE RecCardPos = 1
SELECT * FROM TransactionHeader WHERE RecCardPos = 1
- Lartis
- Nombre de messages : 640
Ville : Laval
Date d'inscription : 03/04/2007
Fiche d'Entreprise
Nom de l'entreprise: Groupe Conseil Lartis Inc.
filtrer la requête...
Jeu 10 Jan 2008 - 12:03
Bonjour,
Je confirme. J'ai eu le même problème et je l'ai réglé d'une façon similaire:
RstTransAPData.Open "select * from TransAPHeader WHERE RecCardPos = 0", cnn, adOpenForwardOnly, adLockOptimistic
Le OpenForwardOnly améliore aussi peut-être un peu, et j'ai filtré dans mon cas avec RecCardPos = 0. Ça ne retourne rien, mais ce n'est pas grave puisqu'on se sert de ce recordset pour ajouter.
Petit commentaire: dans Access, ça vaut la peine d'ajouter un "DoEvents" à la fin de l'insertion. Sinon, si on fait plusieurs insertions, Access finit par ne plus répondre et être gelé tant que la dernière insertion n'est pas fini. Le DoEvents oblige à terminer l'insertion en cour avant de continuer.
Bonne journée!
Je confirme. J'ai eu le même problème et je l'ai réglé d'une façon similaire:
RstTransAPData.Open "select * from TransAPHeader WHERE RecCardPos = 0", cnn, adOpenForwardOnly, adLockOptimistic
Le OpenForwardOnly améliore aussi peut-être un peu, et j'ai filtré dans mon cas avec RecCardPos = 0. Ça ne retourne rien, mais ce n'est pas grave puisqu'on se sert de ce recordset pour ajouter.
Petit commentaire: dans Access, ça vaut la peine d'ajouter un "DoEvents" à la fin de l'insertion. Sinon, si on fait plusieurs insertions, Access finit par ne plus répondre et être gelé tant que la dernière insertion n'est pas fini. Le DoEvents oblige à terminer l'insertion en cour avant de continuer.
Bonne journée!
_________________
Sylvain Laurence, partenaire, revendeur et développeur Acomba
Groupe Conseil Lartis Inc. www.lartis.com
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum