|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2008 Messages : 61 ![]() |
Bonjour, après plusieurs jours à m'arracher les cheveux sur la même partie de code, et après des centaines de requête à mon ami google, je reviens vous ennuyer avec ACCESS...
I) Introduction J'ai un bouton sur le formulaire, qui permet de supprimer une station. Problème, il n'allait pas supprimer les champs équivalent dans d'autres tables, et ne faisait pas de vérifications. J'ai donc été chargé de régler cela. La partie suppression dans les autres tables, pas de problème. Mais je coince sur la vérification. II) Code actuel (seulement le 1er If, les autres feront la même chose) Code :
J'ai utilisé le recordcount, le EOF/BOF, 'is Nothing', le nomatch, isnull(). Aucun ne réalisé le résultat escompté. Si la station n'a pas de N° de polygone, il passe dans la boucle, sinon il sort et met une erreur (plus bas dans mon code) Or là, il ne tient compte de rien. 1er cas : il rentre dans boucle (cas du EOF/BOF) : Il y a un N° polygone, et devrait sortir en erreur, mais il rentre tout de même dans la boucle. 2nd cas : il sort toujours de la boucle pour aller en erreur (cas du recordcount - is Nothing) : Là j'enlève le N° polygone, et devrait rentrer dans la boucle pour aller supprimer la station, mais non il sort et va dans l'erreur. Chaque solution rentre dans l'un de ces 2 cas. Aucun ne fait ce qu'il faut. Le EOF/BOF reste toujours à Faux Le recordcount reste toujours à 1 Le is Nothing est toujours faux Le nomatch est toujours faux Le isnull() est toujours faux De plus je ne connais pas le moyen pour afficher verif et ainsi voir ce qui se trouve dedans. IV) Liens Voici les liens que j'ai suivi (et que j'ai gardé sinon il y en aurait pas mal ^^) http://www.developpez.net/forums/d49...em-rs-nomatch/ http://www.access-programmers.co.uk/...d.php?t=138527 V) DAO/ADO? J'ai vu qu'il y avait ces références sous ACCESS Je ne sais pas si j'ai l'ADO (je ne sais même pas si c'est la même références, ou 2 différentes) Voici les références que j'ai : - VB - Microsoft Access 12.0 - Microsoft DAO 3.6 - OLE - VB for applications Extensibility 5.3 Merci d'avance pour ce nouveau casse tête chinois... plutôt ricain |
||
|
|
00
|
|
|
#2 |
![]() ![]() René MAROTInscription : octobre 2005 Messages : 5 462 ![]() |
Bonjour d'après moi ton problème vient de la source de données donc :
A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs. |
|
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2008 Messages : 61 ![]() |
Oui la requête fonctionne quand je fais mon teste avec ma station de teste (la 1ère de la table).
Oui, quand je met Forms![station]![Numéro station] dans un MsgBoxn j'ai bien ma donnée. Le champ est alphanumérique. |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Inscription : janvier 2006 Messages : 1 111 ![]() |
Pourquoi ne pas utiliser un dcount ?
Ou de façon générale pour répondre au problème initiale, pourquoi ne pas utiliser les clés étrangères sur la base ?
__________________
[Access] Les bases du débogage => ici |
|
|
00
|
|
|
#5 | |
|
Expert Confirmé
![]() Chercheur de bonheur Inscription : août 2007 Messages : 2 255 ![]() |
Bonjour,
je suis peut-être un peu pinailleur, mais je ne comprend pas ceci ? Citation:
![]() Es-tu certain que si ton form affiche le numéro a contrôler, tu n'as pas verouillé un quelconque record qui empêche ton code de fonctionner ?
__________________
(\ _ /) Cordialement G@dz (='.'=) (")-(") Vous avez des neurones. Sollicitez-les. ![]() . Si vous êtes aidé, pensez à Voter.
|
|
|
|
00
|
|
|
#6 |
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2008 Messages : 61 ![]() |
Je ne sais pas à quoi faire le dcount, mais j'ai déjà utilisé le recordcount.
Le but est de savoir si le champ que la requête va aller sélectionné est vide ou non. S'il est vide, il n'y a pas de polygone, on peut passer à la vérification suivante. Si le champ n'est pas à Null (en langage SGBD), il y a donc un résultat, donc un polygone est associé à la station. Si c'est le cas, l'utilisateur est alors reconduit à un message d'erreur : il n'a pas le droit de supprimer une station ayant un polygone. Si je fais une vérification, c'est pour que les utilisateurs ne suppriment pas n'importe quoi. Le champ n'est pas verrouillé. En gros, je viens de comprendre que le recordset est toujours rempli (je n'avais pas encore compris le fonctionnement de EOF/BOF). C'est pour cela que je voulais afficher le résultat de la requête, pour voir ce qu'il y avait dans verif. Quand je passe la souris sur verif en mode debogage, soit rien ne s'affiche, soit j'ai toute la requête. Mais je ne suis pas sur que cela soit un résultat convaincant. |
|
|
00
|
|
|
#7 | ||
|
Membre Expert
![]() Inscription : janvier 2006 Messages : 1 111 ![]() |
Code :
__________________
[Access] Les bases du débogage => ici |
||
|
|
10
|
|
|
#8 |
|
Membre du Club
![]() Inscription : juillet 2010 Messages : 56 ![]() |
Salut à toi,
Si je comprends bien, ton champs polygone contient soit : - un alphanumérique ex :"qfzegzgZZ4445" - ou rien => "" As-tu essayer de changer ton test avec Le but est de vérifier que le champs est VIDE. Je suppose que le champs polygone est unique dans ta table pour chanque station. |
|
|
00
|
|
|
#9 | ||||
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2008 Messages : 61 ![]() |
Ok, pour ce cas simple (dans la propre table) cela fonctionne sans problème
Mais la 2nd vérification doit aller dans un autre mdb Et la 3ème vérification doit aller dans une autre table (mais même mdb) : Code :
Code :
Mais merci, cette solution fonctionne sans problème. Cependant, je ne comprend pas pourquoi les autres solutions ne fonctionnent pas :/ |
||||
|
|
00
|
|
|
#10 | |
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2008 Messages : 61 ![]() |
Citation:
En effet c'est un champ alphanumérique ou vide. Et oui j'ai déjà testé ce genre de code, mais il s'avère que verif à toujours l'air rempli (avec la requête et non le résultat de la requête) |
|
|
|
00
|
|
|
#11 |
|
Expert Confirmé
![]() Chercheur de bonheur Inscription : août 2007 Messages : 2 255 ![]() |
Regarde la méthode MoveFirst et puis BOF ou EOF, ou alors, change ta requète en enlevant la sélection et fais ta sélection avec .FINDFISRT puis utilise .NOMATCH pour détecter qu'il trouve ou pas.
__________________
(\ _ /) Cordialement G@dz (='.'=) (")-(") Vous avez des neurones. Sollicitez-les. ![]() . Si vous êtes aidé, pensez à Voter.
|
|
|
00
|
|
|
#12 | |||
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2008 Messages : 61 ![]() |
Citation:
En ce qui concerne le movefirst avec BOF et/ou EOF, toujours le même résultat qu'au début. Pas moyen d'utiliser le dcount avec une jointure et une table venant d'une autre mbd? EDIT : je viens enfin de trouver comment on affiche le recordset, il faut faire un move pour rentrer dedans () Lorsqu'il y a un polygone, il trouve bien la valeur. Mais si la valeur est null, j'ai ce message d'erreur au niveau du msgbox : Erreur d'exécution 94 Utilisation incorrecte de Null Ce qui est étrange alors, c'est que null ou non, il rentre dans le boucle (BOF et EOF toujours faux quoi qu'il arrive) EDIT2 : J'ai quand même retesté le FindFirst Et là il ne fonctionne plus comme avant : Code :
EDIT2 Bis : Ok c'est parce qu'il ne figure pas dans le Select. Mais je ne veux pas sélectionner le Numéro station justement, mais le Numéro polygone. Là ça ne fonctionnera pas |
|||
|
|
00
|
|
|
#13 | |
|
Expert Confirmé
![]() Chercheur de bonheur Inscription : août 2007 Messages : 2 255 ![]() |
Bonjour,
Citation:
Sinon, je pense que tu devrais revoir ta requete car à mon avis ta clase sélect ne reprend pas pas le champ en question. Code :
requete = "SELECT [Numéro polygone] FROM [station]" Essaie soit : Code :
requete = "SELECT [Numéro polygone],[Numéro station] FROM [station]
__________________
(\ _ /) Cordialement G@dz (='.'=) (")-(") Vous avez des neurones. Sollicitez-les. ![]() . Si vous êtes aidé, pensez à Voter.
|
|
|
|
00
|
|
|
#14 | |||
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2008 Messages : 61 ![]() |
Citation:
Oui, j'ai fait un EDIT2bis, et avec cela, il est sélectionné Code :
Néanmoins, quand je fais cela, il me met à nouveau une erreur : Erreur d'exécution 94 Utilisation incorrecte de Null Pour ta 1ère question, comme je l'ai dit j'ai 3 vérifications - La première est dans la table station (donc direct) - La seconde est dans une autre db (que je voulais charger par la suite), avec une jointure entre station et saisie_carto - La troisième est de nouveau dans la db de départ, mais dans une autre table (jointure entre individu et station) |
|||
|
|
00
|
|
|
#15 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2008 Messages : 61 ![]() |
Nouveau test avec une autre méthode et toujours le même résultat
Code :
Or, si je met un MsgBox verif("[Numéro polygone]"), celui ci me donne bien l'erreur 94, comme quoi c'est null. A croire que le If ne va pas sélectionner [Numéro polygone], mais toute la ligne. |
||
|
|
00
|
|
|
#16 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2008 Messages : 61 ![]() |
Et bé, me suis pris la tête autant de temps pour comprendre le fonctionnement du recordset.
J'avais commencé avec la fonction isnull() pour faire le test, mais je ne mettais pas la bonne variable entre les parenthèses. Pendant la prise de tête avec toutes les autres solutions, j'ai appris à utiliser ces fonctions. Code :
Petite question technique maintenant, si je charge une autre db, est ce que la 1ère sera toujours utilisée ou non? (faire une requête en faisant une jointure sur les 2 db) Merci encore à tous ceux qui ont essayé de se trituré la tête pour me comprendre et régler le problème |
||
|
|
00
|
|
|
#17 |
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2008 Messages : 61 ![]() |
Cela semble fonctionner, j'ai testé pour tous les cas.
Si c'est vide j'utilise le IsNull(verif("[Numéro polygone]")), si l'enregistrement n'existe pas (cas pour les tests suivants) j'utilise le verif.EOF And verif.BOF. Interrogation au sujet de la db, je la charge dans mon 2nd test (là où j'en ai besoin) est ce que je peux la charger dès le début pour clarifier le code, où cela peut il causer des problèmes? Merci encore à tous. La 1ère solution que j'avais exploité était la bonne, mais mal réalisée. |
|
|
00
|
|
|
#18 | |||
|
Expert Confirmé
![]() Chercheur de bonheur Inscription : août 2007 Messages : 2 255 ![]() |
Citation:
peux-tu mieux expliquer ceci Citation:
Citation:
Si tu parle de faire référence à une autre DB dans ton application courante, elle n'est accessible par ton code sue entre le SET = qqchose et le bien nécessaire SET = nothing. Tu peux la lire en y accédant via DAO par exemple, en traitant ses tables et ses requèetes comme si c'était la Db courante.
__________________
(\ _ /) Cordialement G@dz (='.'=) (")-(") Vous avez des neurones. Sollicitez-les. ![]() . Si vous êtes aidé, pensez à Voter.
|
|||
|
|
00
|
|
|
#19 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2008 Messages : 61 ![]() |
Je met en copie le code entier :
Code :
Toutes les autres tables sont comprises dans la db locale (là où se trouve le formulaire et donc le code VBA que je viens de faire) |
||
|
|
00
|
|
|
#20 | ||||||
|
Expert Confirmé
![]() Chercheur de bonheur Inscription : août 2007 Messages : 2 255 ![]() |
Au secours. Tu écrase l'affectation de DB = currentdb par ton autre db.
Ca ne peux pas marcher. Attend je te trouve un example qui marche ou je lis 3 db, dont la current. Attention, il te faut activer la référence Microsoft DAO x.X Object library Code :
Avant la boucle Code :
Code :
Donc, c'est juste une technique similaire mais qui ne devrait pas foncièrement bouleverser ton code.
__________________
(\ _ /) Cordialement G@dz (='.'=) (")-(") Vous avez des neurones. Sollicitez-les. ![]() . Si vous êtes aidé, pensez à Voter.
|
||||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com