Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
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 04/12/2011, 15h44   #1
Invité de passage
 
Inscription : novembre 2008
Messages : 14
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 14
Points : 2
Points : 2
Par défaut Problème code SQL

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")
Cela fait des heures que je cherche la solution sans résultat; si une bonne âme pouvait m'aider je serais le plus heureux.
Avec mes remerciements anticipés.
Fichiers attachés
Type de fichier : txt Code Requete.txt (3,0 Ko, 6 affichages)
dimferte est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 16h48   #2
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

Il te faut une instruction SQL de ce style
Code sql :
1
2
SELECT PATNUM, SIPNOM, SIPPREN, PATNAISD, NUMARCH, NUM_DOS_ATA
FROM KALAM01_HVIPAT INNER JOIN Table_atalante ON KALAM01_HVIPAT.PATNUM = Table_atalante.[N° IPP]
Dans la procédure événementielle de chargement du formulaire :
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
Private Sub Form_Load()
Dim SQL As String
Dim ctl As Control
 
For Each ctl In Me.Controls
    Select Case Left(ctl.Name, 3)
        Case "chk"
            ctl.Value = -1
 
        Case "lbl"
            ctl.Caption = "- * - * -"
 
        Case "txt"
            ctl.Visible = False
            ctl.Value = ""
 
        Case "cmb"
            ctl.Visible = False
 
    End Select
Next ctl
 
SQL = "SELECT PATNUM, SIPNOM, SIPPREN, PATNAISD, NUMARCH, NUM_DOS_ATA "
SQL = SQL & "FROM KALAM01_HVIPAT INNER JOIN Table_atalante ON KALAM01_HVIPAT.PATNUM = Table_atalante.[N° IPP]"
Me.lstResults.RowSource = SQL
Me.lstResults.Requery
End Sub
Dans la sub RefreshQuery() on ne va plus pouvoir utiliser DCount car cette fonction ne supporte que les tables et les requêtes en tant qu'objets de la base de données.
On fera le comptage d'enregistrement via des instructions SQL du type SELECT Count(*) FROM ... avec DAO.
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
Private Sub RefreshQuery()
Dim SQL As String
Dim SQLWhere As String
Dim SQLCompteTout As String, SQLCompteWhere As String
Dim lgCompteTout As Long, lgCompteWhere As String
Dim db As DAO.Database, rs As DAO.Recordset
 
SQL = "SELECT PATNUM, SIPNOM, SIPPREN, PATNAISD, NUMARCH, NUM_DOS_ATA" & vbCrLf
SQL = SQL & "FROM KALAM01_HVIPAT INNER JOIN Table_atalante ON KALAM01_HVIPAT.PATNUM = Table_atalante.[N° IPP]" & vbCrLf
SQL = SQL & "Where KALAM01_HVIPAT.PATNUM <> 0 "
 
SQLCompteTout = "SELECT Count(*) FROM KALAM01_HVIPAT INNER JOIN Table_atalante ON KALAM01_HVIPAT.PATNUM = Table_atalante.[N° IPP]"
 
If Not Me.chkNumArchHex Then
    SQL = SQL & "And KALAM01_HVIPAT!NUMARCH like '*" & Me.txtRechNumArchHex & "*' "
 
End If
If Not Me.chkNom Then
    SQL = SQL & "And KALAM01_HVIPAT!SIPNOM  like '*" & Me.txtRechNom & "*' "
End If
If Not Me.chkprenom Then
    SQL = SQL & "And KALAM01_HVIPAT!SIPPREN like '*" & Me.txtRechPrenom & "*' "
End If
If Not Me.chkDateNaissance Then
    SQL = SQL & "And KALAM01_HVIPAT!PATNAISD like '*" & Me.txtRechDateNaissance & "*' "
End If
 
If Not Me.chkNumAta Then
    SQL = SQL & "And Table_atalante!Type  like '*" & Me.txtRechNumAta & "*' "
End If
 
SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
 
SQL = SQL & ";"
 
SQLCompteWhere = SQLCompteTout & " WHERE " & SQLWhere
 
Set db=CurrentDb()
Set rs = db.OpenRecordset(SQLCompteTout)
if not rs.EOF then lgCompteTout = rs(0)
rs.Close
Set rs = db.OpenRecordset(SQLCompteWhere)
if not rs.EOF then lgCompteWhere = rs(0)
rs.Close
 
Me.lblStats.Caption = lgCompteWhere & " / " & lgCompteTout
Me.lstResults.RowSource = SQL
Me.lstResults.Requery
 
End Sub
Pour pouvoir utiliser DAO, il faut s'assurer d'avoir une référence VB à ...
"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+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 09h17   #3
Futur Membre du Club
 
Homme Régis MENOT
Médecin responsable département information médicale
Inscription : décembre 2011
Messages : 30
Détails du profil
Informations personnelles :
Nom : Homme Régis MENOT
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Médecin responsable département information médicale
Secteur : Santé

Informations forums :
Inscription : décembre 2011
Messages : 30
Points : 17
Points : 17
Par défaut Problème Private Sub RefreshQuery()

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.
RMDIM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 18h35   #4
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
If Not Me.chkNumArchHex Then
    SQL = SQL & "And KALAM01_HVIPAT!NUMARCH like '*" & Me.txtRechNumArchHex & "*' "
End If
 
If Not Me.chkNom Then
    SQL = SQL & "And KALAM01_HVIPAT!SIPNOM  like '*" & Me.txtRechNom & "*' "
End If
If Not Me.chkprenom Then
    SQL = SQL & "And KALAM01_HVIPAT!SIPPREN like '*" & Me.txtRechPrenom & "*' "
End If
If Not Me.chkDateNaissance Then
    SQL = SQL & "And KALAM01_HVIPAT!PATNAISD like '*" & Me.txtRechDateNaissance & "*' "
End If
 
If Not Me.chkNumAta Then
    SQL = SQL & "And Table_atalante!Type  like '*" & Me.txtRechNumAta & "*' "
End If
L'opérateur de comparaison LIKE n'est applicable qu'à des champs de type texte.
Y a-t-il des champs qui ne sont pas de type texte ?

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 15h22   #5
Futur Membre du Club
 
Homme Régis MENOT
Médecin responsable département information médicale
Inscription : décembre 2011
Messages : 30
Détails du profil
Informations personnelles :
Nom : Homme Régis MENOT
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Médecin responsable département information médicale
Secteur : Santé

Informations forums :
Inscription : décembre 2011
Messages : 30
Points : 17
Points : 17
Par défaut Problème LIKE

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 :
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
Private Sub RefreshQuery()
Dim SQL As String
Dim SQLWhere As String
Dim SQLCompteTout As String, SQLCompteWhere As String
Dim lgCompteTout As Long, lgCompteWhere As String
Dim db As DAO.Database, rs As DAO.Recordset
 
SQL = "SELECT PATNUM, SIPNOM,SIPPREN, PATNAISD, NUMARCH, NUM_DOS_ATA" & vbCrLf
SQL = SQL & "FROM KALAM01_HVIPAT INNER JOIN Table_atalante ON KALAM01_HVIPAT.PATNUM = Table_atalante.IPP" & vbCrLf
SQL = SQL & "Where KALAM01_HVIPAT.PATNUM <> 0 "
 
SQLCompteTout = "SELECT Count(*) FROM KALAM01_HVIPAT INNER JOIN Table_atalante ON KALAM01_HVIPAT.PATNUM = Table_atalante.[N°IPP]"
 
If Not Me.chkNumArchHex Then
SQL = SQL & "And KALAM01_HVIPAT!NUMARCH = '" & Me.txtRechNumArchHex & "' "
End If
If Not Me.chkNom Then
SQL = SQL & "And KALAM01_HVIPAT!SIPNOM like '*" & Me.txtRechNom & "*' "
End If
If Not Me.chkprenom Then
SQL = SQL & "And KALAM01_HVIPAT!SIPPREN like '*" & Me.txtRechPrenom & "*' "
End If
If Not Me.chkDateNaissance Then
SQL = SQL & "And KALAM01_HVIPAT!PATNAISD = '" & Me.txtRechDateNaissance & "' "
End If
If Not Me.chkNumAta Then
SQL = SQL & "And Table_atalante!NUM_DOS_ATA = '" & Me.txtRechNumAta & "' "
End If
 
SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
 
SQL = SQL & ";"
 
SQLCompteWhere = SQLCompteTout & " WHERE " & SQLWhere
 
Set db = CurrentDb()
Set rs = db.OpenRecordset(SQLCompteTout)
If Not rs.EOF Then lgCompteTout = rs(0)
rs.Close
Set rs = db.OpenRecordset(SQLCompteWhere)
If Not rs.EOF Then lgCompteWhere = rs(0)
rs.Close
 
Me.lblStats.Caption = lgCompteWhere & " / " & lgCompteTout
Me.lstResults.RowSource = SQL
Me.lstResults.Requery
Encore un grand merci pour ton aide.
RMDIM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 19h12   #6
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
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 :
1
2
3
If Not Me.chkNumArchHex Then
SQL = SQL & "And KALAM01_HVIPAT!NUMARCH = " & Me.txtRechNumArchHex & " "
End If
Pour des champs dates :
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) :
Code sql :
ChampDate = #12/06/2011#
Dans ton code VB :
Code :
1
2
3
If Not Me.chkDateNaissance Then
SQL = SQL & "And KALAM01_HVIPAT!PATNAISD = #" & Format(Me.txtRechDateNaissance, "mm\/dd\/yyyy") & "# "
End If
Cela suppose aussi que VB est capable de reconnaître Me.txtRechDateNaissance comme étant une date.
Si tu imposes un format Date («Date, abrégé» par exemple) dans ton contrôle txtRechDateNaissance, ça aide.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/12/2011, 09h31   #7
Futur Membre du Club
 
Homme Régis MENOT
Médecin responsable département information médicale
Inscription : décembre 2011
Messages : 30
Détails du profil
Informations personnelles :
Nom : Homme Régis MENOT
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Médecin responsable département information médicale
Secteur : Santé

Informations forums :
Inscription : décembre 2011
Messages : 30
Points : 17
Points : 17
Par défaut Suite erreur clause FROM

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 :
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
Private Sub RefreshQuery()
Dim SQL As String
Dim SQLWhere As String
Dim SQLCompteTout As String, SQLCompteWhere As String
Dim lgCompteTout As Long, lgCompteWhere As String
Dim db As DAO.Database, rs As DAO.Recordset
 
SQL = "SELECT PATNUM, SIPNOM,SIPPREN, PATNAISD, NUMARCH, NUM_DOS_ATA" & vbCrLf
SQL = SQL & "FROM KALAM01_HVIPAT LEFT OUTER JOIN Table_atalante ON KALAM01_HVIPAT.PATNUM = Table_atalante.IPP" & vbCrLf
SQL = SQL & "Where KALAM01_HVIPAT.PATNUM <> 0 "
 
SQLCompteTout = "SELECT Count(*) FROM KALAM01_HVIPAT LEFT OUTER JOIN Table_atalante ON KALAM01_HVIPAT.PATNUM = Table_atalante.[N°IPP]"
 
If Not Me.chkNumArchHex Then
    SQL = SQL & "And KALAM01_HVIPAT!NUMARCH = " & Me.txtRechNumArchHex & " "
 End If
If Not Me.chkNom Then
    SQL = SQL & "And KALAM01_HVIPAT!SIPNOM  like '*" & Me.txtRechNom & "*' "
End If
If Not Me.chkprenom Then
    SQL = SQL & "And KALAM01_HVIPAT!SIPPREN like '*" & Me.txtRechPrenom & "*' "
End If
 If Not Me.chkDateNaissance Then
    SQL = SQL & "And KALAM01_HVIPAT!PATNAISD = #" & Format(Me.txtRechDateNaissance, "dd\/mm\/yyyy") & "# "
End If
 If Not Me.chkNumAta Then
    SQL = SQL & "And Table_atalante!NUM_DOS_ATA = " & Me.txtRechNumAta & " "
End If
 
SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
 
SQL = SQL & ";"
 
SQLCompteWhere = SQLCompteTout & " WHERE " & SQLWhere
 
Set db = CurrentDb()
Set rs = db.OpenRecordset(SQLCompteTout)
If Not rs.EOF Then lgCompteTout = rs(0)
rs.Close
Set rs = db.OpenRecordset(SQLCompteWhere)
If Not rs.EOF Then lgCompteWhere = rs(0)
rs.Close
 
Me.lblStats.Caption = lgCompteWhere & " / " & lgCompteTout
Me.lstResults.RowSource = SQL
Me.lstResults.Requery
 
End Sub
RMDIM est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/12/2011, 19h01   #8
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,
Citation:
comme message VB "trop peu de paramètres; 1 attendu"
Cette erreur se produit quand un nom de champ n'est pas reconnu.
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 :
1
2
3
4
5
6
7
8
9
' Set db = CurrentDb()
' Set rs = db.OpenRecordset(SQLCompteTout)
' If Not rs.EOF Then lgCompteTout = rs(0)
' rs.Close
' Set rs = db.OpenRecordset(SQLCompteWhere)
' If Not rs.EOF Then lgCompteWhere = rs(0)
' rs.Close
' 
' Me.lblStats.Caption = lgCompteWhere & " / " & lgCompteTout
- de tester les critères indépendamment, un par un.
  • Tester uniquement avec le critère saisi dans txtRechNumArchHex
  • Tester uniquement avec le critère saisi dans txtRechNom
  • Tester uniquement avec le critère saisi dans txtRechPrenom
  • .... etc
S'il y une erreur de syntaxe SQL cela se traduit, en principe, par une liste de résultats vide.
Ç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.
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 12h03   #9
Futur Membre du Club
 
Homme Régis MENOT
Médecin responsable département information médicale
Inscription : décembre 2011
Messages : 30
Détails du profil
Informations personnelles :
Nom : Homme Régis MENOT
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Médecin responsable département information médicale
Secteur : Santé

Informations forums :
Inscription : décembre 2011
Messages : 30
Points : 17
Points : 17
Par défaut Resultat recherche erreur

Bonjour,

Voici le résutat de la manip:

Code testé:
Code :
1
2
3
SQL = "SELECT PATNUM, SIPNOM,SIPPREN, PATNAISD, NUMARCH, NUM_DOS_ATA" & vbCrLf
SQL = SQL & "FROM KALAM01_HVIPAT LEFT OUTER JOIN Table_atalante ON KALAM01_HVIPAT.PATNUM = Table_atalante.[N°IPP]" & vbCrLf
SQL = SQL & "Where KALAM01_HVIPAT.PATNUM <> 0 "
Le résultat: " Instruction SQL non valide: DELETE, INSERT,PROCEDURE,SELECT ou UPDATE attendus"

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
RMDIM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 14h12   #10
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

Ça ne me paraît pas possible que tu ai une telle erreur avec
Code :
1
2
3
SQL = "SELECT PATNUM, SIPNOM,SIPPREN, PATNAISD, NUMARCH, NUM_DOS_ATA" & vbCrLf
SQL = SQL & "FROM KALAM01_HVIPAT LEFT OUTER JOIN Table_atalante ON KALAM01_HVIPAT.PATNUM = Table_atalante.[N°IPP]" & vbCrLf
SQL = SQL & "Where KALAM01_HVIPAT.PATNUM <> 0 "
En effet, le code SQL commence bien par SELECT.
Le code SQL se trouvant dans la variable SQL est :
Code sql :
1
2
3
SELECT PATNUM, SIPNOM,SIPPREN, PATNAISD, NUMARCH, NUM_DOS_ATA
FROM KALAM01_HVIPAT LEFT OUTER JOIN Table_atalante ON KALAM01_HVIPAT.PATNUM = Table_atalante.[N°IPP]
WHERE KALAM01_HVIPAT.PATNUM <> 0
C'est ça que le Debug.Print SQL a du mettre dans la fenêtre d'exécution.

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+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 15h29   #11
Futur Membre du Club
 
Homme Régis MENOT
Médecin responsable département information médicale
Inscription : décembre 2011
Messages : 30
Détails du profil
Informations personnelles :
Nom : Homme Régis MENOT
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Médecin responsable département information médicale
Secteur : Santé

Informations forums :
Inscription : décembre 2011
Messages : 30
Points : 17
Points : 17
Par défaut Resultat recherche erreur

Je te joins une copie d'écran pour être sûre de ma manip

A+
Images attachées
Type de fichier : png Capture.PNG (81,6 Ko, 2 affichages)
RMDIM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 17h05   #12
Futur Membre du Club
 
Homme Régis MENOT
Médecin responsable département information médicale
Inscription : décembre 2011
Messages : 30
Détails du profil
Informations personnelles :
Nom : Homme Régis MENOT
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Médecin responsable département information médicale
Secteur : Santé

Informations forums :
Inscription : décembre 2011
Messages : 30
Points : 17
Points : 17
Par défaut Recherche erreur code sql

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+
Images attachées
Type de fichier : png Cap2.PNG (78,4 Ko, 2 affichages)
Type de fichier : png Cap3.PNG (60,8 Ko, 1 affichages)
RMDIM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 17h37   #13
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
C'est exactement ce que je te disais de ne pas faire.

Voir Débogage des requêtes écrites en VBA.
Images attachées
Type de fichier : png FenExec.png (10,9 Ko, 4 affichages)
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 18h50   #14
Futur Membre du Club
 
Homme Régis MENOT
Médecin responsable département information médicale
Inscription : décembre 2011
Messages : 30
Détails du profil
Informations personnelles :
Nom : Homme Régis MENOT
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Médecin responsable département information médicale
Secteur : Santé

Informations forums :
Inscription : décembre 2011
Messages : 30
Points : 17
Points : 17
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+
Images attachées
Type de fichier : png Capt4.PNG (63,4 Ko, 4 affichages)
RMDIM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2011, 07h59   #15
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
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+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2011, 14h35   #16
Futur Membre du Club
 
Homme Régis MENOT
Médecin responsable département information médicale
Inscription : décembre 2011
Messages : 30
Détails du profil
Informations personnelles :
Nom : Homme Régis MENOT
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Médecin responsable département information médicale
Secteur : Santé

Informations forums :
Inscription : décembre 2011
Messages : 30
Points : 17
Points : 17
Par défaut Problème erreur SQL

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
Fichiers attachés
Type de fichier : zip test archive.zip (1,98 Mo, 4 affichages)
RMDIM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2011, 19h08   #17
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

Le champ PATNUM n'est pas numérique, donc cette clause SQL est invalide :
Code :
Where KALAM01_HVIPAT.PATNUM <> 0
Pour du texte :
Code :
Where KALAM01_HVIPAT.PATNUM <> ''
ou
Code :
Where KALAM01_HVIPAT.PATNUM Is Not Null
Le nom de champ N° IPP (avec espace entre ° et I) n'est pas correct partout.
Bonne version pour la variable SQL :
Code :
1
2
3
SQL = "SELECT PATNUM, SIPNOM,SIPPREN, PATNAISD, NUMARCH, NUM_DOS_ATA" & vbCrLf
SQL = SQL & "FROM KALAM01_HVIPAT LEFT OUTER JOIN Table_atalante ON KALAM01_HVIPAT.PATNUM = Table_atalante.[N° IPP]" & vbCrLf
SQL = SQL & "Where KALAM01_HVIPAT.PATNUM <>'' "
Bonne version pour la variable SQLCompteTout :
Code :
SQLCompteTout = "SELECT Count(*) FROM KALAM01_HVIPAT LEFT OUTER JOIN Table_atalante ON KALAM01_HVIPAT.PATNUM = Table_atalante.[N° IPP]"
La propriété Contenu du contrôle lstResults n'est pas bonne.
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 :
1
2
3
4
5
6
7
8
9
10
11
Private Sub chkNumArchHex_Click()
 
If Me.chkNumArchHex Then
    Me.txtRechNumArchHex.Visible = False
Else
    Me.txtRechNumArchHex.Visible = True
End If
 
RefreshQuery
 
End Sub
Code :
1
2
3
4
5
6
7
8
9
10
11
Private Sub chkNom_Click()
 
If Me.chkNom Then
    Me.txtRechNom.Visible = False
Else
    Me.txtRechNom.Visible = True
End If
 
RefreshQuery
 
End Sub

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 :
1
2
3
4
5
If Not Me.chkDateNaissance Then
   If IsDate(Me.txtRechDateNaissance) Then
      SQL = SQL & "And KALAM01_HVIPAT!PATNAISD = #" & Format(Me.txtRechDateNaissance, "dd\/mm\/yyyy") & "# "
   End If
End If
Même problème avec "Numéro Archive".
Code :
1
2
3
4
5
If Not Me.chkNumArchHex Then
   If Len(Nz(Me.txtRechNumArchHex, "")) > 0 Then
      SQL = SQL & "And KALAM01_HVIPAT!NUMARCH =" & Me.txtRechNumArchHex & " "
   End If
End If
Qui plus est la zone de texte a été renommée de txtNumArchHex en txtRechNumArchHex
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 :
1
2
3
4
5
If Not Me.chkNumAta Then
    If Len(Nz(Me.txtRechNumAta, "")) > 0 Then
       SQL = SQL & "And Table_atalante!NUM_DOS_ATA = " & Me.txtRechNumAta & " "
    End If
End If
Ensuite, ça fonctionne

Version avec corrections : test-archive.2.zip

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2011, 17h40   #18
Futur Membre du Club
 
Homme Régis MENOT
Médecin responsable département information médicale
Inscription : décembre 2011
Messages : 30
Détails du profil
Informations personnelles :
Nom : Homme Régis MENOT
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Médecin responsable département information médicale
Secteur : Santé

Informations forums :
Inscription : décembre 2011
Messages : 30
Points : 17
Points : 17
Par défaut Remerciements

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
RMDIM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2011, 19h55   #19
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

Il n'y a pas de quoi.
Je te souhaite aussi de bonnes fêtes de fin d'année.

Merci de clore la discussion avec le bouton (voir ici ou ici).

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h14.


 
 
 
 
Partenaires

Hébergement Web