OVH Cloud OVH Cloud

Methode Seek...

5 réponses
Avatar
Sandrine
Hello,

J ai envoye une requete hier soir, mais apparemment elle s est perdue, elle n apparait pas sur internet....

Mon probleme etait sur l utilisation de la methode seek : je mets a jour une table1 avec les enregistrements d'une table 2 (tableimport) => si l enregistrement n existait pas dans 1, je l ajoute, si il existait je mets certains champs a jour. Ca marche parfaitement, sauf (sinon je n enverrai pas un appel au secours) si ma table1 est vide ou qu il n y trouve pas le premier enregistrement qu il cherchait.
J'y comprends rien, qqn pourrait-il me dire ce que je fais comme erreur de raisonnement dans mon VB ?

Set tableimport = DB.OpenRecordset("tableimport")
table1.Index = "CC_AccountCat"

With tableimport
If Not .EOF Then
..MoveFirst
Do While Not .EOF
table1.Seek "=", ![CC_Code], ![Account_cat]
If Not tableimport.NoMatch Then
'mets à jour les enregistrements (existe déjà dans la base)
table1.Edit <= il plante ici
...
else
table1.addnew
....

En attendant j ai resolu mon probleme par 2 requetes ajout et MAJ, mais j aimerai qd meme bien savoir ce qui ne va pas dans mon VB...

Merci beaucoup, et bonne journee a tous

Sandrine

5 réponses

Avatar
Anor
Bonjour,
Puisque tu as des requêtes qui fonctionnent,
regarde leur code sql et à la place de la méthode seek,
tu peux faire d'une autre manière et qui ressemblerait à ça :

dim strSQL as string
if dcount("*","latable","lecritère") > 0 then
strSQL = "UPDATE latable SET lechamp = 'blabla' WHERE champcleprimaire = 'lecritère';"
else
strSQL = "INSERT INTO LaTable ( Lechamp) SELECT 'lavaleur';"
end if
currentdb.execute strSQL

--
à+
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Access Memorandum : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------

Sandrine wrote:
| Hello,
|
| J ai envoye une requete hier soir, mais apparemment elle s est
| perdue, elle n apparait pas sur internet....
|
| Mon probleme etait sur l utilisation de la methode seek : je mets a
| jour une table1 avec les enregistrements d'une table 2 (tableimport)
| => si l enregistrement n existait pas dans 1, je l ajoute, si il
| existait je mets certains champs a jour. Ca marche parfaitement, sauf
| (sinon je n enverrai pas un appel au secours) si ma table1 est vide
| ou qu il n y trouve pas le premier enregistrement qu il cherchait.
| J'y comprends rien, qqn pourrait-il me dire ce que je fais comme
| erreur de raisonnement dans mon VB ?
|
| Set tableimport = DB.OpenRecordset("tableimport")
| table1.Index = "CC_AccountCat"
|
| With tableimport
| If Not .EOF Then
| .MoveFirst
| Do While Not .EOF
| table1.Seek "=", ![CC_Code], ![Account_cat]
| If Not tableimport.NoMatch Then
| 'mets à jour les enregistrements (existe déjà dans la base)
| table1.Edit <= il plante ici
| ...
| else
| table1.addnew
| ....
|
| En attendant j ai resolu mon probleme par 2 requetes ajout et MAJ,
| mais j aimerai qd meme bien savoir ce qui ne va pas dans mon VB...
|
| Merci beaucoup, et bonne journee a tous
|
| Sandrine
Avatar
Sandrine
Ok, merci pour ta reponse si rapide

Mais juste pour ma culture, et la prochaine fois : pourquoi ca ne marche pas la fonction Seek

A

Sandrine
Avatar
Eric
"=?Utf-8?B?U2FuZHJpbmU=?="
écrivait news::
Bonjour Sandrine,

Hello,



Mon probleme etait sur l utilisation de la methode seek : je mets a
jour une table1 avec les enregistrements d'une table 2 (tableimport)
=> si l enregistrement n existait pas dans 1, je l ajoute, si il
existait je mets certains champs a jour. Ca marche parfaitement, sauf
(sinon je n enverrai pas un appel au secours) si ma table1 est vide ou
qu il n y trouve pas le premier enregistrement qu il cherchait. J'y
comprends rien, qqn pourrait-il me dire ce que je fais comme erreur de
raisonnement dans mon VB ?

Set tableimport = DB.OpenRecordset("tableimport")
table1.Index = "CC_AccountCat"

With tableimport
If Not .EOF Then
.MoveFirst
Do While Not .EOF
table1.Seek "=", ![CC_Code], ![Account_cat]
If Not tableimport.NoMatch Then
'mets à jour les enregistrements (existe déjà dans la base)
table1.Edit <= il plante ici
...
else
table1.addnew
....

En attendant j ai resolu mon probleme par 2 requetes ajout et MAJ,
mais j aimerai qd meme bien savoir ce qui ne va pas dans mon VB...


Es-tu sur que ton test de la propriété NoMatch porte sur la bonne table ?
Ne faudrait-il pas remplacer "If Not tableimport.NoMatch Then" par
If Not Table1.NoMatch Then ... car tu fais un Seek sur la table1

Pour ce qui est de la table1 vide, tu devrais tester sa propriété BOF et
EOF

A+
Eric

Avatar
codial
Je prends en cours de route mais je crois de mémoire que la méthode Seek ne
fonctionne pas sur les tables attachées, il faut utiliser FindFirst
par exemple
Me.RecordsetClone.FindFirst "[CodeMat] = '" & Me![Modifiable27] & "'"

cordialement

Codial

"Sandrine" a écrit dans le message de
news:
Hello,

J ai envoye une requete hier soir, mais apparemment elle s est perdue,
elle n apparait pas sur internet....


Mon probleme etait sur l utilisation de la methode seek : je mets a jour
une table1 avec les enregistrements d'une table 2 (tableimport) => si l

enregistrement n existait pas dans 1, je l ajoute, si il existait je mets
certains champs a jour. Ca marche parfaitement, sauf (sinon je n enverrai
pas un appel au secours) si ma table1 est vide ou qu il n y trouve pas le
premier enregistrement qu il cherchait.
J'y comprends rien, qqn pourrait-il me dire ce que je fais comme erreur de
raisonnement dans mon VB ?


Set tableimport = DB.OpenRecordset("tableimport")
table1.Index = "CC_AccountCat"

With tableimport
If Not .EOF Then
.MoveFirst
Do While Not .EOF
table1.Seek "=", ![CC_Code], ![Account_cat]
If Not tableimport.NoMatch Then
'mets à jour les enregistrements (existe déjà dans la base)
table1.Edit <= il plante ici
...
else
table1.addnew
....

En attendant j ai resolu mon probleme par 2 requetes ajout et MAJ, mais j
aimerai qd meme bien savoir ce qui ne va pas dans mon VB...


Merci beaucoup, et bonne journee a tous

Sandrine




Avatar
Sandrine
OK, MERCI..

Je suis vraiment nulle, j avais pas vu que je n attaquais pas la bonne table. Et au bout d un moment on ne voit plus rien... Vive le forum, et ses ames charitables ..

Du coup, plus de probleme non plus qd la table est vide

Merci Eric

A

Sandrin

----- Eric a écrit : ----

"=?Utf-8?B?U2FuZHJpbmU=?="
écrivait news::
Bonjour Sandrine

Hello
Mon probleme etait sur l utilisation de la methode seek : je mets
jour une table1 avec les enregistrements d'une table 2 (tableimport


=> si l enregistrement n existait pas dans 1, je l ajoute, si i
existait je mets certains champs a jour. Ca marche parfaitement, sau
(sinon je n enverrai pas un appel au secours) si ma table1 est vide o
qu il n y trouve pas le premier enregistrement qu il cherchait. J'
comprends rien, qqn pourrait-il me dire ce que je fais comme erreur d
raisonnement dans mon VB ?
Set tableimport = DB.OpenRecordset("tableimport"
table1.Index = "CC_AccountCat

With tableimpor
If Not .EOF The

.MoveFirs
Do While Not .EO
table1.Seek "=", ![CC_Code], ![Account_cat
If Not tableimport.NoMatch The
'mets à jour les enregistrements (existe déjà dans la base
table1.Edit <= il plante ic
..
els
table1.addne
....
En attendant j ai resolu mon probleme par 2 requetes ajout et MAJ
mais j aimerai qd meme bien savoir ce qui ne va pas dans mon VB...



Es-tu sur que ton test de la propriété NoMatch porte sur la bonne table
Ne faudrait-il pas remplacer "If Not tableimport.NoMatch Then" par
If Not Table1.NoMatch Then ... car tu fais un Seek sur la table

Pour ce qui est de la table1 vide, tu devrais tester sa propriété BOF et
EO

A
Eri