Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/02/2011, 13h46   #1
Candidat au titre de Membre du Club
 
Inscription : juin 2008
Messages : 61
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 61
Points : 10
Points : 10
Par défaut [AC-2003-2007] Problèmes RecordSet

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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
Private Sub Bouton118_Click()
Dim msg As Integer
Dim db As DAO.Database
Dim requete As String
Dim verif As DAO.Recordset
 
Set db = CurrentDb
 
requete = "SELECT [Numéro polygone] FROM [station] WHERE [Numéro station] = '" & Forms![station]![Numéro station] & "';"
 
Set verif = db.OpenRecordset(requete)
 
If verif.RecordCount = 0 Then
'If Not verif.EOF And Not verif.BOF Then
III) Les solutions
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
dark_mouette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 15h10   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Bonjour d'après moi ton problème vient de la source de données donc :
  • As-tu vérifié que
    Code :
    "SELECT [Numéro polygone] FROM [station] WHERE [Numéro station] = '" & Forms![station]![Numéro station] & "';"
    donne bien des résultats dans l'éditeur de requête ? (en remplaçant : " & Forms![station]![Numéro station] & " par une donnée valide, évidement :-)
  • As-tu fait afficher Forms![station]![Numéro station] au moment où tu l'utilises et vérifié que c'était bien ce que tu voulais ?
  • Dernier point ton numéro de station est-il alphanumérique ou seulement numérique ?

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.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 15h15   #3
Candidat au titre de Membre du Club
 
Inscription : juin 2008
Messages : 61
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 61
Points : 10
Points : 10
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.
dark_mouette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 15h20   #4
Membre Expert
 
Inscription : janvier 2006
Messages : 1 111
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 1 111
Points : 1 093
Points : 1 093
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
Kloun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 15h23   #5
Expert Confirmé
 
Avatar de Godzestla
 
Homme
Chercheur de bonheur
Inscription : août 2007
Messages : 2 255
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de bonheur
Secteur : Industrie

Informations forums :
Inscription : août 2007
Messages : 2 255
Points : 2 979
Points : 2 979
Bonjour,

je suis peut-être un peu pinailleur, mais je ne comprend pas ceci ?

Citation:
La partie suppression dans les autres tables, pas de problème.
Mais je coince sur la vérification.
Pourquoi vérifier si la suppression ne pose pas de problème ?

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.
Godzestla est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 15h37   #6
Candidat au titre de Membre du Club
 
Inscription : juin 2008
Messages : 61
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 61
Points : 10
Points : 10
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.
dark_mouette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 15h40   #7
Membre Expert
 
Inscription : janvier 2006
Messages : 1 111
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 1 111
Points : 1 093
Points : 1 093
Code :
1
2
3
4
5
if dcount("[Numéro polygone]", "[station]", "[Numéro station] = '" & Forms![station]![Numéro station] & "'") = 0 then
    ' Pas de polynome
else
    ' Un ou des polynome(s)
end if
__________________
[Access] Les bases du débogage => ici
Kloun est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/02/2011, 15h50   #8
Membre du Club
 
Inscription : juillet 2010
Messages : 56
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 56
Points : 52
Points : 52
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
Code :
IF Verif!Numéro_polygone<>"" then ...
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.
jcdenton057 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 15h51   #9
Candidat au titre de Membre du Club
 
Inscription : juin 2008
Messages : 61
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 61
Points : 10
Points : 10
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 :
1
2
3
4
 
    Set db = OpenDatabase("C:\Flora_local\saisie_carto_local.mdb")
    requete = "SELECT [Numéro polygone] FROM [saisie_carto] WHERE [Numéro station]='forms![station]![Numéro station]'"
    Set verif = db.OpenRecordset(requete)
Code :
1
2
3
 
requete = "SELECT [Numéro individu] FROM [individu] WHERE [Numéro population] IN (SELECT [Numéro population] FROM [espèce] WHERE [Numéro station]='forms![station]![Numéro station]')"
        Set verif = CurrentDb.OpenRecordset(requete)
Est ce que c'est faisable avec le dcount?

Mais merci, cette solution fonctionne sans problème.
Cependant, je ne comprend pas pourquoi les autres solutions ne fonctionnent pas :/
dark_mouette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 15h57   #10
Candidat au titre de Membre du Club
 
Inscription : juin 2008
Messages : 61
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 61
Points : 10
Points : 10
Citation:
Envoyé par jcdenton057 Voir le message
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
Code :
IF Verif!Numéro_polygone<>"" then ...
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.
Oui, le but est de savoir si c'est vide ou non, pour autoriser ou non la suppression de la station.
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)
dark_mouette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 17h34   #11
Expert Confirmé
 
Avatar de Godzestla
 
Homme
Chercheur de bonheur
Inscription : août 2007
Messages : 2 255
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de bonheur
Secteur : Industrie

Informations forums :
Inscription : août 2007
Messages : 2 255
Points : 2 979
Points : 2 979
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.
Godzestla est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 08h49   #12
Candidat au titre de Membre du Club
 
Inscription : juin 2008
Messages : 61
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 61
Points : 10
Points : 10
Citation:
Envoyé par Godzestla Voir le message
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.
J'ai déjà testé le FINDFIRST puis le NOMATCH (lien http://www.developpez.net/forums/d49...em-rs-nomatch/)

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 :
1
2
3
4
 
requete = "SELECT [Numéro polygone] FROM [station]"
Set verif = db.OpenRecordset(requete)
verif.FindFirst ("[Numéro station] = '" & Forms![station]![Numéro station] & "'")
Et là il me sort une erreur 3070 : il ne reconnait pas Numéro station comme nom de champ ou expression correcte (j'ai testé avec verif.FindFirst ("[Numéro station] = '19951228145232mor'") et cela fait la même erreur)

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
dark_mouette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 09h30   #13
Expert Confirmé
 
Avatar de Godzestla
 
Homme
Chercheur de bonheur
Inscription : août 2007
Messages : 2 255
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de bonheur
Secteur : Industrie

Informations forums :
Inscription : août 2007
Messages : 2 255
Points : 2 979
Points : 2 979
Bonjour,
Citation:
Pas moyen d'utiliser le dcount avec une jointure et une table venant d'une autre mbd?
Ta table est dans la currentDb ou pas ?


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]"
ne permet pas je pense de faire un .findirst sur [Numéro station] après, et cela me semble logique.

Essaie soit :
Code :
requete = "SELECT [Numéro polygone],[Numéro station]  FROM [station]
soit
Code :
SELECT Station.* from [Station]
__________________
(\ _ /) Cordialement G@dz
(='.'=)

(")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.
Godzestla est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 09h39   #14
Candidat au titre de Membre du Club
 
Inscription : juin 2008
Messages : 61
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 61
Points : 10
Points : 10
Citation:
Envoyé par Godzestla Voir le message
Bonjour,


Ta table est dans la currentDb ou pas ?


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]"
ne permet pas je pense de faire un .findirst sur [Numéro station] après, et cela me semble logique.

Essaie soit :
Code :
requete = "SELECT [Numéro polygone],[Numéro station]  FROM [station]
soit
Code :
SELECT Station.* from [Station]

Oui, j'ai fait un EDIT2bis, et avec cela, il est sélectionné
Code :
1
2
3
4
5
6
 
requete = "SELECT [Numéro station],[Numéro polygone] FROM [station]"
Set verif = db.OpenRecordset(requete)
verif.FindFirst ("[Numéro station] = '" & Forms![station]![Numéro station] & "'")
verif.FindFirst [Numéro polygone]
If verif.NoMatch Then
J'ai rajouté un findfirst sur le numéro de polygone, car c'est la donnée que j'attends.
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)
dark_mouette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 11h55   #15
Candidat au titre de Membre du Club
 
Inscription : juin 2008
Messages : 61
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 61
Points : 10
Points : 10
Nouveau test avec une autre méthode et toujours le même résultat

Code :
1
2
 
If Me.Recordset.RecordCount = 0 Then
Il vient me dire qu'il y a toujours quelque chose dans le résultat.
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.
dark_mouette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 14h37   #16
Candidat au titre de Membre du Club
 
Inscription : juin 2008
Messages : 61
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 61
Points : 10
Points : 10
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 :
1
2
3
4
 
requete = "SELECT [Numéro polygone] FROM [station] WHERE [Numéro station] = '" & Forms![station]![Numéro station] & "';"
Set verif = db.OpenRecordset(requete)
If IsNull(verif("[Numéro polygone]")) Then
Et là ça fonctionne, dans tous mes cas.

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
dark_mouette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 16h09   #17
Candidat au titre de Membre du Club
 
Inscription : juin 2008
Messages : 61
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 61
Points : 10
Points : 10
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.
dark_mouette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 17h46   #18
Expert Confirmé
 
Avatar de Godzestla
 
Homme
Chercheur de bonheur
Inscription : août 2007
Messages : 2 255
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de bonheur
Secteur : Industrie

Informations forums :
Inscription : août 2007
Messages : 2 255
Points : 2 979
Points : 2 979
Citation:
J'avais commencé avec la fonction isnull() pour faire le test, mais je ne mettais pas la bonne variable entre les parenthèses.
je m'en doutais

peux-tu mieux expliquer ceci
Citation:
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)
et aussi
Citation:
nterrogation 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?

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.
Godzestla est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 09h30   #19
Candidat au titre de Membre du Club
 
Inscription : juin 2008
Messages : 61
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 61
Points : 10
Points : 10
Je met en copie le code entier :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
 
Private Sub Bouton118_Click()
Dim msg As Integer
Dim db As DAO.Database
Dim requete As String
Dim verif As DAO.Recordset
 
Set db = CurrentDb
 
requete = "SELECT [Numéro polygone] FROM [station] WHERE [Numéro station] = '" & Forms![station]![Numéro station] & "';"
Set verif = db.OpenRecordset(requete)
 
If IsNull(verif("[Numéro polygone]")) Then
 
    Set db = OpenDatabase("C:\Flora_local\saisie_carto_local.mdb")
 
    requete = "SELECT [Numéro polygone] FROM [saisie_carto] WHERE [Numéro station]= '" & Forms![station]![Numéro station] & "';"
    Set verif = db.OpenRecordset(requete)
 
    If (IsNull(verif("[Numéro polygone]"))) Or (verif.EOF And verif.BOF) Then
 
        requete = "SELECT [Numéro individu] FROM [individu] WHERE [Numéro population] IN (SELECT [Numéro population] FROM [espèce] WHERE [Numéro station]= '" & Forms![station]![Numéro station] & "');"
        Set verif = CurrentDb.OpenRecordset(requete)
 
        If verif.EOF And verif.BOF Then
 
            msg = MsgBox("Supprimer la station " & Forms![station]![Numéro station] & " ?", vbYesNo, "Suppression")
 
            If msg = vbYes Then
 
                DoCmd.SetWarnings False
                DoCmd.RunSQL "DELETE[*] FROM [station végétations] WHERE [numéro station]=forms![station]![numéro station]"
                DoCmd.RunSQL "DELETE[*] FROM [station menaces] WHERE [Numéro station]=forms![station]![Numéro station]"
                DoCmd.RunSQL "DELETE[*] FROM [taxon] WHERE [Numéro station]=forms![station]![Numéro station]"
                DoCmd.RunSQL "DELETE[*] FROM [espèce] WHERE [Numéro station]=forms![station]![Numéro station]"
                DoCmd.RunSQL "DELETE[*] FROM [station] WHERE [Numéro station]=forms![station]![Numéro station]"
                DoCmd.SetWarnings True
                DoCmd.RunMacro "saisir"
 
            End If
 
        Else
            msg = MsgBox("Impossible de supprimer la station : Présence sous Individu", vbExclamation, "ERREUR")
        End If
 
    Else
        msg = MsgBox("Impossible de supprimer la station : Saisie Carto existante", vbExclamation, "ERREUR")
    End If
 
Else
    msg = MsgBox("Impossible de supprimer la station : Polygone existant", vbExclamation, "ERREUR")
End If
 
End Sub
Je précise que seule la table saisie_carto est dans une autre db (C:\Flora_local\saisie_carto_local.mdb)
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)
dark_mouette est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 13h48   #20
Expert Confirmé
 
Avatar de Godzestla
 
Homme
Chercheur de bonheur
Inscription : août 2007
Messages : 2 255
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de bonheur
Secteur : Industrie

Informations forums :
Inscription : août 2007
Messages : 2 255
Points : 2 979
Points : 2 979
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 :
1
2
3
4
5
6
7
8
    Dim db          As Database
    Dim rs            As Recordset
    Dim dbprev        As DAO.Database
    Dim Rsprev        As DAO.Recordset
    Dim Dbn(10)      As String
    Dim Ob          As String
 
Set db = DBEngine.Workspaces(0).Databases(0)
Puis j'ai une boucle pour lire les Db des années précédents, le nom de la DB étant stocké dans la table DBn


Avant la boucle
Code :
1
2
3
'Open Work Table
 Ob = "Cbookings_cmp"
 Set Entry = db.OpenRecordset(Ob)
Dans la boucle proprement dite:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
'Inject Previous DB into Work Table
For i = 1 To 9
 If Dbn(i) <> "" Then
   'reference Year - i Previous database
    Set dbprev = DAO.OpenDatabase(Trim(Dbn(i)))
    Set Rsprev = dbprev.OpenRecordset("Select * from Cbookings", dbReadOnly)
 
 
 
    Rsprev.FindFirst "MailingListID >0"
    Do While Not Rsprev.NoMatch
        If Not Rsprev![Booking_canceled] Then
            If (Year(Rsprev![Dateent]) < (Rec![DB_Year] - i) Or DatePart("ww", Rsprev![Dateent]) <= Limit_date) Then
                Entry.AddNew
'....
                Entry.Update
            End If
        End If
        Rsprev.FindNext ("MailingListID >0")
    Loop
    Rsprev.Close
    dbprev.Close
    Set Rsprev = Nothing
    Set dbprev = Nothing
 End If
Next i
Puis les close et Set = Nothing.

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.
Godzestla est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h54.


 
 
 
 
Partenaires

Hébergement Web