|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : novembre 2008 Messages : 14 ![]() |
Bonjour,
J'essaie de faire une recherche multi-critères sur deux tables en m'inspirant de l'aide de Charles A. de 2005 publiée sur votre site. Mes tables : - KALAM01_HVIPAT ( ses champs : PATNUM,SIPNOM,SIPPREN, PATNAISD, NUMARCH) - Table_atalante ( ses champs : N° IPP, NUM_DOS_ATA) les deux tables sont liées par PATNUM vers N° IPP; Dans mon code VB il me reste semble-t-il deux problèmes : 1°) l'insertion du nom de ma table : Table_atalante 2°) et un problème sur ma ligne de code suivant: Code :
Me.lblStats.Caption = DCount("*", "KALAM01_HVIPAT", SQLWhere) & " / " & DCount("*", "KALAM01_HVIPAT") Avec mes remerciements anticipés. |
|
|
00
|
|
|
#2 | ||||||
![]() ![]() Maintenance données produits Inscription : décembre 2005 Messages : 3 939 ![]() |
Bonjour,
Il te faut une instruction SQL de ce style Code sql :
Code :
On fera le comptage d'enregistrement via des instructions SQL du type SELECT Count(*) FROM ... avec DAO. Code :
"Microsoft DAO 3.6 Object Library" pour Acces 2000~2003 ou "Microsoft Office 12.0 Access database engine Object Library" pour Access 2007 (fichier .accdb) ou "Microsoft Office 14.0 Access database engine Object Library" pour Access 2010 (fichier .accdb) A+ |
||||||
|
|
00
|
|
|
#3 |
|
Futur Membre du Club
![]() Régis MENOTMédecin responsable département information médicale Inscription : décembre 2011 Messages : 30 ![]() |
Bonjour,
Je te remercie pour ton aide qui m'est fort précieuse; il me reste un problème que je n'arrive pas à résoudre: - la ligne Set rs = db.OpenRecordset(SQLCompteWhere) ne lui convient pas J'avoue ne pas bien comprendre pourquoi. Merci encore pour une nouvelle suggestion. |
|
|
00
|
|
|
#4 | ||
![]() ![]() Maintenance données produits Inscription : décembre 2005 Messages : 3 939 ![]() |
Bonjour,
Je pense que c'est un problème dans la syntaxe des critères de la clause WHERE. Dans cette partie du code : Code :
Y a-t-il des champs qui ne sont pas de type texte ? A+ |
||
|
|
00
|
|
|
#5 | ||
|
Futur Membre du Club
![]() Régis MENOTMédecin responsable département information médicale Inscription : décembre 2011 Messages : 30 ![]() |
Bonjour,
Effectivement j'ai trois champs qui ne sont pas du TEXTE: - NumArch = Numéro Auto -NUM_DOS_ATA = Numérique PATNAISD = Date/heure J'ai essayé les syntaxes suivantes sans succès: Code :
|
||
|
|
00
|
|
|
#6 | ||||
![]() ![]() Maintenance données produits Inscription : décembre 2005 Messages : 3 939 ![]() |
Bonsoir,
Pour des champs numériques : L'opérateur Like fonctionne, mais tu perds en performance, en obligeant le moteur de base données à convertir le champ numérique en chaîne de caractère, afin de pouvoir la comparer à ce qui est à droite de l'opérateur Like. Le plus approprié pour des Entiers est l'opérateur = , à droite duquel on met le nombre entier sans guillemets simples. Code :
L'opérateur Like peut aussi fonctionner mais, je dirai, de manière plus hasardeuse. Là encore le moteur va convertir un champ non-texte en texte. Il utilisera le format date des paramètres régionaux. La manière classique de comparer un champ date à une date est par exemple (pour le 6-déc-2011) : Dans ton code VB : Code :
Si tu imposes un format Date («Date, abrégé» par exemple) dans ton contrôle txtRechDateNaissance, ça aide. A+ |
||||
|
|
10
|
|
|
#7 | ||
|
Futur Membre du Club
![]() Régis MENOTMédecin responsable département information médicale Inscription : décembre 2011 Messages : 30 ![]() |
Bonjour,
J'ai bien modifié comme tu me l'indiquais les différentes valeurs et j'ai notamment mis dans mon controle txtRechDateNaissance en format "date, abrégé". J'ai toujours un message d'erreur sur la même ligne de code et comme message VB "trop peu de paramètres; 1 attendu". D'autre part et cela n'a je pense rien à voir, dans la jointure j'ai remplacé INNER par LEFT OUTER, car tous les PATNUM de KALAM01 ne sont pas dans N° IPP de Table_atalante. En tous cas ton aide est très sympa de ta part et particulièrement enrichissant sur le plan intellectuel. Je ne saurai comment te remercier. Code :
|
||
|
|
10
|
|
|
#8 | |||
![]() ![]() Maintenance données produits Inscription : décembre 2005 Messages : 3 939 ![]() |
Bonjour,
Citation:
Le moteur de base de données l'interprète comme étant paramètre. Pour avancer dans le débogage, je te propose ... - de mettre en commentaire le code concernant le compte d'enregistrements. Code :
Ça ne veut pas dire que si la liste est vide il y a une erreur. Donc, tester avec des critères dont on est est sûr qu'ils produiront des lignes de résultat. Pour tester le SQL en cas de suspicion d'erreur : Après la ligne ... ajouter une ligne Aller dans la fenêtre d'exécution de l'éditeur VB (Ctrl + G depuis l'éditeur VB). Copier le SQL (Ctrl + C) (Trois ligne, normalement, SELECT ... FROM ... WHERE ...). Dans Acces, créer une nouvelle requête. Fermer la boîte de dialogue d'ajout de tables à la requête. Passer en mode d'affichage SQL. Supprimer SELECT ; et coller le contenu du presse papier. Passer en mode d'affichage feuille de données. S'il y a une erreur, Acces l'affiche. Si tu as des erreurs SQL, poste l'erreur et le SQL venant de la fenêtre d'exécution. A+ Ajout: Je viens de voir dans ton dernier code que le champ de table Table_atalante utilisé dans la liaison est IPP dans la variable SQL et [N°IPP] dans la variable SQLCompteTout. Il y en a un des deux qui doit être mauvais. |
|||
|
|
00
|
|
|
#9 | ||
|
Futur Membre du Club
![]() Régis MENOTMédecin responsable département information médicale Inscription : décembre 2011 Messages : 30 ![]() |
Bonjour,
Voici le résutat de la manip: Code testé: Code :
Pour le N° IPP je m'ensuis rendu compte juste après mon dernier envoi et je l'avais corrigé ( le bon : [N° IPP] Avec mes remerciements |
||
|
|
00
|
|
|
#10 | ||||
![]() ![]() Maintenance données produits Inscription : décembre 2005 Messages : 3 939 ![]() |
Bonjour,
Ça ne me paraît pas possible que tu ai une telle erreur avec Code :
Le code SQL se trouvant dans la variable SQL est : Code sql :
On est bien d'accord que pour déboguer, on copie le code SQL que l'on trouve dans la fenêtre d'exécution, puis on le colle dans une nouvelle requête vierge. On ne copie pas le code VBA pour le coller dans une requête. Ce sont deux languages distincts. A+ |
||||
|
|
00
|
|
|
#11 |
|
Futur Membre du Club
![]() Régis MENOTMédecin responsable département information médicale Inscription : décembre 2011 Messages : 30 ![]() |
Je te joins une copie d'écran pour être sûre de ma manip
A+ |
|
|
00
|
|
|
#12 |
|
Futur Membre du Club
![]() Régis MENOTMédecin responsable département information médicale Inscription : décembre 2011 Messages : 30 ![]() |
Je crois que j'ai trouvé d'où venait mon erreur, j'ai enlevé le SQL de la première ligne
Voici les copies d'écran du résultat, avec code erreur VB, puis après avoir cliqué sur OK A+ |
|
|
00
|
|
|
#13 |
![]() ![]() Maintenance données produits Inscription : décembre 2005 Messages : 3 939 ![]() |
|
|
|
00
|
|
|
#14 |
|
Futur Membre du Club
![]() Régis MENOTMédecin responsable département information médicale Inscription : décembre 2011 Messages : 30 ![]() |
Excuses moi j'ai m.....
J'avais déjà vu le site que tu me suggères mais je n'avais pas tout compris de son fonctionnement. Je tejoins une capture de ce que j'espère la bonne version de la requete. A+ |
|
|
00
|
|
|
#15 |
![]() ![]() Maintenance données produits Inscription : décembre 2005 Messages : 3 939 ![]() |
Il traine un caractère, qui n'a rien à faire là, à la fin après le zéro.
Je ne suis pas certain mais on dirait un " A+ |
|
|
00
|
|
|
#16 |
|
Futur Membre du Club
![]() Régis MENOTMédecin responsable département information médicale Inscription : décembre 2011 Messages : 30 ![]() |
Bonjour,
Effectivement il s'agit bien de " ; mais il refuse obstinément que je l'enlève, mettant la ligne de code en rouge. Je vais essayer un système plus simple, c'est de t'envoyer mon fichier, bien sûr très simplifié; que quelques lignes de données totalement anomymisées. Merci pour ton aide |
|
|
00
|
|
|
#17 | ||||||||||||
![]() ![]() Maintenance données produits Inscription : décembre 2005 Messages : 3 939 ![]() |
Bonjour,
Le champ PATNUM n'est pas numérique, donc cette clause SQL est invalide : Pour du texte : ou Code :
Where KALAM01_HVIPAT.PATNUM Is Not Null Bonne version pour la variable SQL : Code :
Code :
SQLCompteTout = "SELECT Count(*) FROM KALAM01_HVIPAT LEFT OUTER JOIN Table_atalante ON KALAM01_HVIPAT.PATNUM = Table_atalante.[N° IPP]" Le plus simple est de la supprimer, puisque de toute façon le code définit cette propriété, au chargement du formulaire dans Form_Load(). La logique (Visible True/False) des cases à cocher chkNumArchHex et chkNom a été inversée, ce qui a une incidence sur le code de RefreshQuery(). Remettre comme c'était à l'origine : Code :
Code :
Concernant le champ de type date, le code plante la première fois qu'on décoche "Date de naisssance" parce que le contrôle txtRechDateNaissance est vide. Pour palier à cela : Code :
Code :
mais il n'y a pas de gestion d'événement "Avant MAJ" pour exécuter RefreshQuery(). Même chose que "Numéro Archive" pour "Numéro Atalante". Code :
Version avec corrections : test-archive.2.zipA+ |
||||||||||||
|
|
00
|
|
|
#18 |
|
Futur Membre du Club
![]() Régis MENOTMédecin responsable département information médicale Inscription : décembre 2011 Messages : 30 ![]() |
Bonjour,
Je tiens à te remercier pour ton aide qui m'a été précieuse, patiente et surtout pédagogique. Je te souhaite de bonnes fêtes à toi et toute ta famille. UN GRAND MERCI |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com