bonjour à tous
ma Question est un peu technique , J'aimerais comprendre en utilisant la
technique currentdb.execute SQL (il s'agit d'ajouter 180 000 enreg dans une
table) je mets 17 secondes
et en utilisant la methode vba par DAO
with rst
.addnew
.field(0)=bla blabla
.field(1)= bla bla bla
.update
end with
je mets plus du double (40 secondes)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Wlad69
Bonjour,
Ma réponse est un peu intuitive et des spécialistes l'expliqueraient surement mieux que moi, mais d'un côté tu effectues un INSERT, et de l'autre une mise à jour enregistrement par enregistrement. A chaque update en DAO le moteur Jet met à jour la table et un certain nombre d'élément comme les index, ou les informations de verrouillage d'enregistrement, etc... . Alors que quand tu fais un INSERT il n'y a qu'une seule opération de MAJ de la table.
bonjour à tous ma Question est un peu technique , J'aimerais comprendre en utilisant la technique currentdb.execute SQL (il s'agit d'ajouter 180 000 enreg dans u ne table) je mets 17 secondes et en utilisant la methode vba par DAO with rst .addnew .field(0)=bla blabla .field(1)= bla bla bla .update end with je mets plus du double (40 secondes)
merci de vos explications
Bonjour,
Ma réponse est un peu intuitive et des spécialistes l'expliqueraient
surement mieux que moi, mais d'un côté tu effectues un INSERT, et de
l'autre une mise à jour enregistrement par enregistrement. A chaque
update en DAO le moteur Jet met à jour la table et un certain nombre
d'élément comme les index, ou les informations de verrouillage
d'enregistrement, etc... . Alors que quand tu fais un INSERT il n'y a
qu'une seule opération de MAJ de la table.
bonjour à tous
ma Question est un peu technique , J'aimerais comprendre en utilisant la
technique currentdb.execute SQL (il s'agit d'ajouter 180 000 enreg dans u ne
table) je mets 17 secondes
et en utilisant la methode vba par DAO
with rst
.addnew
.field(0)=bla blabla
.field(1)= bla bla bla
.update
end with
je mets plus du double (40 secondes)
Ma réponse est un peu intuitive et des spécialistes l'expliqueraient surement mieux que moi, mais d'un côté tu effectues un INSERT, et de l'autre une mise à jour enregistrement par enregistrement. A chaque update en DAO le moteur Jet met à jour la table et un certain nombre d'élément comme les index, ou les informations de verrouillage d'enregistrement, etc... . Alors que quand tu fais un INSERT il n'y a qu'une seule opération de MAJ de la table.
bonjour à tous ma Question est un peu technique , J'aimerais comprendre en utilisant la technique currentdb.execute SQL (il s'agit d'ajouter 180 000 enreg dans u ne table) je mets 17 secondes et en utilisant la methode vba par DAO with rst .addnew .field(0)=bla blabla .field(1)= bla bla bla .update end with je mets plus du double (40 secondes)
merci de vos explications
3stone
Salut,
"keops" | ma Question est un peu technique , J'aimerais comprendre en utilisant la | technique currentdb.execute SQL (il s'agit d'ajouter 180 000 enreg dans une | table) je mets 17 secondes | et en utilisant la methode vba par DAO | with rst | .addnew | .field(0)=bla blabla | .field(1)= bla bla bla | .update | end with | je mets plus du double (40 secondes)
Chouette, le SQL hein ? ;-)
Sache que rien ne peut être plus rapide que le SQL (dans un usage correct) C'est le language des base de données et qu'il faut toujours préférer lorsque l'on arrive à exprimer sa "phrase" correctement.
Le recordset DAO à toutes les raisons d'exister et apporte plus de souplesse lorsqu'il s'agit de traiter les enregistrements un par un ! Ce qui n'est pas possible par SQL (on traite tout le recordset)
Souvent, une combinaison des deux est la meilleure méthode. Tu base ton rst sur un "Select ... From table Where 'restiction' "
"keops"
| ma Question est un peu technique , J'aimerais comprendre en utilisant la
| technique currentdb.execute SQL (il s'agit d'ajouter 180 000 enreg dans une
| table) je mets 17 secondes
| et en utilisant la methode vba par DAO
| with rst
| .addnew
| .field(0)=bla blabla
| .field(1)= bla bla bla
| .update
| end with
| je mets plus du double (40 secondes)
Chouette, le SQL hein ? ;-)
Sache que rien ne peut être plus rapide que le SQL (dans un usage correct)
C'est le language des base de données et qu'il faut toujours préférer
lorsque l'on arrive à exprimer sa "phrase" correctement.
Le recordset DAO à toutes les raisons d'exister et apporte plus de souplesse
lorsqu'il s'agit de traiter les enregistrements un par un !
Ce qui n'est pas possible par SQL (on traite tout le recordset)
Souvent, une combinaison des deux est la meilleure méthode.
Tu base ton rst sur un "Select ... From table Where 'restiction' "
"keops" | ma Question est un peu technique , J'aimerais comprendre en utilisant la | technique currentdb.execute SQL (il s'agit d'ajouter 180 000 enreg dans une | table) je mets 17 secondes | et en utilisant la methode vba par DAO | with rst | .addnew | .field(0)=bla blabla | .field(1)= bla bla bla | .update | end with | je mets plus du double (40 secondes)
Chouette, le SQL hein ? ;-)
Sache que rien ne peut être plus rapide que le SQL (dans un usage correct) C'est le language des base de données et qu'il faut toujours préférer lorsque l'on arrive à exprimer sa "phrase" correctement.
Le recordset DAO à toutes les raisons d'exister et apporte plus de souplesse lorsqu'il s'agit de traiter les enregistrements un par un ! Ce qui n'est pas possible par SQL (on traite tout le recordset)
Souvent, une combinaison des deux est la meilleure méthode. Tu base ton rst sur un "Select ... From table Where 'restiction' "
c'est vrai ton analyse, mais j ai observé que sans le .update rien ne se produisait. tu m 'eclaires beaucoup sur le fonctionnement du moteur jet; ce qui m ammene a cette 2e question Aquoi servent les maj du moteur jet je crois qu on est a la 4.0 Pourquoi y a t il pres de 15 secondes d'ecart entre dbopenTable et dbopenDynaset ?
Merci en tous les cas.
"Wlad69" a écrit dans le message de news:
Bonjour,
Ma réponse est un peu intuitive et des spécialistes l'expliqueraient surement mieux que moi, mais d'un côté tu effectues un INSERT, et de l'autre une mise à jour enregistrement par enregistrement. A chaque update en DAO le moteur Jet met à jour la table et un certain nombre d'élément comme les index, ou les informations de verrouillage d'enregistrement, etc... . Alors que quand tu fais un INSERT il n'y a qu'une seule opération de MAJ de la table.
bonjour à tous ma Question est un peu technique , J'aimerais comprendre en utilisant la technique currentdb.execute SQL (il s'agit d'ajouter 180 000 enreg dans une table) je mets 17 secondes et en utilisant la methode vba par DAO with rst .addnew .field(0)=bla blabla .field(1)= bla bla bla .update end with je mets plus du double (40 secondes)
merci de vos explications
wlad69
c'est vrai ton analyse, mais j ai observé que sans le .update rien ne se
produisait.
tu m 'eclaires beaucoup sur le fonctionnement du moteur jet; ce qui m ammene
a cette 2e question Aquoi servent les maj du moteur jet je crois qu on est a
la 4.0
Pourquoi y a t il pres de 15 secondes d'ecart entre dbopenTable et
dbopenDynaset ?
Merci en tous les cas.
"Wlad69" <wlad69@yahoo.fr> a écrit dans le message de news:
1155810752.359692.111100@74g2000cwt.googlegroups.com...
Bonjour,
Ma réponse est un peu intuitive et des spécialistes l'expliqueraient
surement mieux que moi, mais d'un côté tu effectues un INSERT, et de
l'autre une mise à jour enregistrement par enregistrement. A chaque
update en DAO le moteur Jet met à jour la table et un certain nombre
d'élément comme les index, ou les informations de verrouillage
d'enregistrement, etc... . Alors que quand tu fais un INSERT il n'y a
qu'une seule opération de MAJ de la table.
bonjour à tous
ma Question est un peu technique , J'aimerais comprendre en utilisant la
technique currentdb.execute SQL (il s'agit d'ajouter 180 000 enreg dans
une
table) je mets 17 secondes
et en utilisant la methode vba par DAO
with rst
.addnew
.field(0)=bla blabla
.field(1)= bla bla bla
.update
end with
je mets plus du double (40 secondes)
c'est vrai ton analyse, mais j ai observé que sans le .update rien ne se produisait. tu m 'eclaires beaucoup sur le fonctionnement du moteur jet; ce qui m ammene a cette 2e question Aquoi servent les maj du moteur jet je crois qu on est a la 4.0 Pourquoi y a t il pres de 15 secondes d'ecart entre dbopenTable et dbopenDynaset ?
Merci en tous les cas.
"Wlad69" a écrit dans le message de news:
Bonjour,
Ma réponse est un peu intuitive et des spécialistes l'expliqueraient surement mieux que moi, mais d'un côté tu effectues un INSERT, et de l'autre une mise à jour enregistrement par enregistrement. A chaque update en DAO le moteur Jet met à jour la table et un certain nombre d'élément comme les index, ou les informations de verrouillage d'enregistrement, etc... . Alors que quand tu fais un INSERT il n'y a qu'une seule opération de MAJ de la table.
bonjour à tous ma Question est un peu technique , J'aimerais comprendre en utilisant la technique currentdb.execute SQL (il s'agit d'ajouter 180 000 enreg dans une table) je mets 17 secondes et en utilisant la methode vba par DAO with rst .addnew .field(0)=bla blabla .field(1)= bla bla bla .update end with je mets plus du double (40 secondes)
La meme chose en vba methode DAO ********************************** 'Dim pdc, adresse As String 'Dim tt As Date 'Dim rst, rstcli As DAO.Recordset 'Dim lnglignes, position As Long 'Set rst = CurrentDb.OpenRecordset("edf", dbOpenDynaset) '>>> j'hésite entre Dynaset et opentable ???? 'If rst.EOF Then ' lnglignes = 0 'Else ' rst.MoveLast ' lnglignes = rst.RecordCount 'End If 'Me.nbenreg = lnglignes CurrentDb.Execute "Delete CLI2005.REF, CLI2005.NOM, CLI2005.COMPAD, CLI2005.CBP, CLI2005.LIBCOM FROM CLI2005;" 'lnglignes1 = 0 'Set rstcli = CurrentDb.OpenRecordset("cli2005", dbOpenTable) 'rst.MoveFirst 'rst.MoveNext 'tt = Time 'Me.nbenreg = lnglignes & " Enreg. " 'While Not rst.EOF 'If Len(rst.Fields("numvoie")) = 0 Then 'adresse = rst.Fields("compad") ' Else ' adresse = rst.Fields("numvoie") & " " & rst.Fields("compad") 'End If 'adresse = LTrim(Trim(adresse)) 'With rstcli '.AddNew ' .Fields("ref") = IIf(Val(rst.Fields("ref")) = 0, "Résiliation", rst.Fields("ref")) ' .Fields("nom") = rst.Fields("nom") ' .Fields("compad") = adresse ' .Fields("CBP") = rst.Fields("cpostal") '.Fields("libcom") = rst.Fields("ville") '.Update 'lnglignes1 = lnglignes1 + 1 'rst.MoveNext 'End With 'Wend 'rstcli.Close 'rst.Close 'Set rstcli = Nothing 'Set rst = Nothing
et ça mets 20 secondes de Plus je suis ouvert à toutes amelioration .
"3stone" a écrit dans le message de news:
Salut,
"keops" | ma Question est un peu technique , J'aimerais comprendre en utilisant la | technique currentdb.execute SQL (il s'agit d'ajouter 180 000 enreg dans une | table) je mets 17 secondes | et en utilisant la methode vba par DAO | with rst | .addnew | .field(0)=bla blabla | .field(1)= bla bla bla | .update | end with | je mets plus du double (40 secondes)
Chouette, le SQL hein ? ;-)
Sache que rien ne peut être plus rapide que le SQL (dans un usage correct) C'est le language des base de données et qu'il faut toujours préférer lorsque l'on arrive à exprimer sa "phrase" correctement.
Le recordset DAO à toutes les raisons d'exister et apporte plus de souplesse lorsqu'il s'agit de traiter les enregistrements un par un ! Ce qui n'est pas possible par SQL (on traite tout le recordset)
Souvent, une combinaison des deux est la meilleure méthode. Tu base ton rst sur un "Select ... From table Where 'restiction' "
La meme chose en vba methode DAO
**********************************
'Dim pdc, adresse As String
'Dim tt As Date
'Dim rst, rstcli As DAO.Recordset
'Dim lnglignes, position As Long
'Set rst = CurrentDb.OpenRecordset("edf", dbOpenDynaset) '>>> j'hésite entre
Dynaset et opentable ????
'If rst.EOF Then
' lnglignes = 0
'Else
' rst.MoveLast
' lnglignes = rst.RecordCount
'End If
'Me.nbenreg = lnglignes
CurrentDb.Execute "Delete CLI2005.REF, CLI2005.NOM, CLI2005.COMPAD,
CLI2005.CBP, CLI2005.LIBCOM FROM CLI2005;"
'lnglignes1 = 0
'Set rstcli = CurrentDb.OpenRecordset("cli2005", dbOpenTable)
'rst.MoveFirst
'rst.MoveNext
'tt = Time
'Me.nbenreg = lnglignes & " Enreg. "
'While Not rst.EOF
'If Len(rst.Fields("numvoie")) = 0 Then
'adresse = rst.Fields("compad")
' Else
' adresse = rst.Fields("numvoie") & " " & rst.Fields("compad")
'End If
'adresse = LTrim(Trim(adresse))
'With rstcli
'.AddNew
' .Fields("ref") = IIf(Val(rst.Fields("ref")) = 0, "Résiliation",
rst.Fields("ref"))
' .Fields("nom") = rst.Fields("nom")
' .Fields("compad") = adresse
' .Fields("CBP") = rst.Fields("cpostal")
'.Fields("libcom") = rst.Fields("ville")
'.Update
'lnglignes1 = lnglignes1 + 1
'rst.MoveNext
'End With
'Wend
'rstcli.Close
'rst.Close
'Set rstcli = Nothing
'Set rst = Nothing
et ça mets 20 secondes de Plus
je suis ouvert à toutes amelioration .
"3stone" <home@sweet_home.be> a écrit dans le message de news:
u7fOcefwGHA.724@TK2MSFTNGP04.phx.gbl...
Salut,
"keops"
| ma Question est un peu technique , J'aimerais comprendre en utilisant la
| technique currentdb.execute SQL (il s'agit d'ajouter 180 000 enreg dans
une
| table) je mets 17 secondes
| et en utilisant la methode vba par DAO
| with rst
| .addnew
| .field(0)=bla blabla
| .field(1)= bla bla bla
| .update
| end with
| je mets plus du double (40 secondes)
Chouette, le SQL hein ? ;-)
Sache que rien ne peut être plus rapide que le SQL (dans un usage correct)
C'est le language des base de données et qu'il faut toujours préférer
lorsque l'on arrive à exprimer sa "phrase" correctement.
Le recordset DAO à toutes les raisons d'exister et apporte plus de
souplesse
lorsqu'il s'agit de traiter les enregistrements un par un !
Ce qui n'est pas possible par SQL (on traite tout le recordset)
Souvent, une combinaison des deux est la meilleure méthode.
Tu base ton rst sur un "Select ... From table Where 'restiction' "
La meme chose en vba methode DAO ********************************** 'Dim pdc, adresse As String 'Dim tt As Date 'Dim rst, rstcli As DAO.Recordset 'Dim lnglignes, position As Long 'Set rst = CurrentDb.OpenRecordset("edf", dbOpenDynaset) '>>> j'hésite entre Dynaset et opentable ???? 'If rst.EOF Then ' lnglignes = 0 'Else ' rst.MoveLast ' lnglignes = rst.RecordCount 'End If 'Me.nbenreg = lnglignes CurrentDb.Execute "Delete CLI2005.REF, CLI2005.NOM, CLI2005.COMPAD, CLI2005.CBP, CLI2005.LIBCOM FROM CLI2005;" 'lnglignes1 = 0 'Set rstcli = CurrentDb.OpenRecordset("cli2005", dbOpenTable) 'rst.MoveFirst 'rst.MoveNext 'tt = Time 'Me.nbenreg = lnglignes & " Enreg. " 'While Not rst.EOF 'If Len(rst.Fields("numvoie")) = 0 Then 'adresse = rst.Fields("compad") ' Else ' adresse = rst.Fields("numvoie") & " " & rst.Fields("compad") 'End If 'adresse = LTrim(Trim(adresse)) 'With rstcli '.AddNew ' .Fields("ref") = IIf(Val(rst.Fields("ref")) = 0, "Résiliation", rst.Fields("ref")) ' .Fields("nom") = rst.Fields("nom") ' .Fields("compad") = adresse ' .Fields("CBP") = rst.Fields("cpostal") '.Fields("libcom") = rst.Fields("ville") '.Update 'lnglignes1 = lnglignes1 + 1 'rst.MoveNext 'End With 'Wend 'rstcli.Close 'rst.Close 'Set rstcli = Nothing 'Set rst = Nothing
et ça mets 20 secondes de Plus je suis ouvert à toutes amelioration .
"3stone" a écrit dans le message de news:
Salut,
"keops" | ma Question est un peu technique , J'aimerais comprendre en utilisant la | technique currentdb.execute SQL (il s'agit d'ajouter 180 000 enreg dans une | table) je mets 17 secondes | et en utilisant la methode vba par DAO | with rst | .addnew | .field(0)=bla blabla | .field(1)= bla bla bla | .update | end with | je mets plus du double (40 secondes)
Chouette, le SQL hein ? ;-)
Sache que rien ne peut être plus rapide que le SQL (dans un usage correct) C'est le language des base de données et qu'il faut toujours préférer lorsque l'on arrive à exprimer sa "phrase" correctement.
Le recordset DAO à toutes les raisons d'exister et apporte plus de souplesse lorsqu'il s'agit de traiter les enregistrements un par un ! Ce qui n'est pas possible par SQL (on traite tout le recordset)
Souvent, une combinaison des deux est la meilleure méthode. Tu base ton rst sur un "Select ... From table Where 'restiction' "