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 03/07/2011, 05h12   #1
Futur Membre du Club
 
Homme Michel
développeur javascript et PHP en rech d'emploi
Inscription : juillet 2011
Messages : 82
Détails du profil
Informations personnelles :
Nom : Homme Michel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : développeur javascript et PHP en rech d'emploi

Informations forums :
Inscription : juillet 2011
Messages : 82
Points : 16
Points : 16
Par défaut concaténation de références

La requete SQL suivante fonctionne quand les champs nom et prenom ne sont pas des références à une autre table :

Code sql :
SELECT [prenom] & «  » & [nom] AS [prénom et nom] FROM table1 ;

J’obtiens bien « Jean Dumas »

Mais si ce sont des références, j’obtiens « 1 3 » ou « 2 6 » ou « 2 1 »
michelg77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2011, 12h08   #2
Membre Expert
 
Inscription : août 2006
Messages : 1 435
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 1 435
Points : 1 753
Points : 1 753
Bonjour,
Pourrais-tu nous expliquer ce que tu appelles références ?
helas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2011, 14h15   #3
Futur Membre du Club
 
Homme Michel
développeur javascript et PHP en rech d'emploi
Inscription : juillet 2011
Messages : 82
Détails du profil
Informations personnelles :
Nom : Homme Michel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : développeur javascript et PHP en rech d'emploi

Informations forums :
Inscription : juillet 2011
Messages : 82
Points : 16
Points : 16
Par défaut ce que j'appelle une référence :

une relation un-à-plusieurs entre la table noms qui contient les caractères alphabétiques du nom et la table compositeurs qui contient une clé pointant vers la table nom.

Pardonnez-moi pour cet oubli !
D'ailleurs, votre question m'amènes à me poser le problème suivant:

Dans le cas des noms, il n'y a généralement qu'un seul nom, mais dans celui des prénoms, il serait peut-être utile que la table compositeurs pointe vers plusieurs.

J'ai vu dans :
http://access.developpez.com/sources...QLLigneColonne

qu'on pouvait "Concaténer plusieurs enregistrements dans une seule colonne"
grâce à un recordset DAO, mais je ne vois pas encore comment le faire.

De plus, quand je fais ce genre de manipulation, j'ai souvent des messages d'erreur que je mets du temps à comprendre.

J'ai bien essayé :
Code sql :
1
2
3
4
5
 
SELECT [compositeurs].[nom],[compositeurs].[prénom],
[noms].[nom], [prénoms].[prénom] 
FROM compositeurs INNER JOIN noms ON 
[compositeurs].[nom]=[noms].[nom];

mais il plante, bien sur, en me houspillant :
Citation:
incohérence de type dans une expression
normal, puisque [compositeurs].[nom] est une clé
alors que [noms].[nom] est un champ texte

merci d'avance pour vos réponses !
michelg77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2011, 16h00   #4
Futur Membre du Club
 
Homme Michel
développeur javascript et PHP en rech d'emploi
Inscription : juillet 2011
Messages : 82
Détails du profil
Informations personnelles :
Nom : Homme Michel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : développeur javascript et PHP en rech d'emploi

Informations forums :
Inscription : juillet 2011
Messages : 82
Points : 16
Points : 16
Par défaut voici une solution, mais elle est très lourde !

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
55
'effacement des enregistrements
    a = nettoie_table("nom_prénom_pour_VBA")
 
    Dim rst As DAO.Recordset
    Dim SQL As String
 
    SQL = "SELECT Nom, Prénom FROM Compositeurs"
 
    Set rst = CurrentDb.OpenRecordset(SQL)
 
    While Not rst.EOF
        SQL2 = "SELECT [prénoms].[N°], [prénoms].[prénom] FROM "
        SQL2 = SQL2 & "prénoms WHERE [prénoms].[N°]=" & rst.Fields(1).Value & "; "
 
        Set rst2 = CurrentDb.OpenRecordset(SQL2)
 
        If rst2.RecordCount <> 1 Then
            MsgBox "problème : rst2.RecordCount=" & rst2.RecordCount
            Stop
        End If
 
        txt_prénom = rst2.Fields(1).Value
        Set rst2 = Nothing
 
        SQL3 = "SELECT [noms].[N°], [noms].[nom] FROM "
        SQL3 = SQL3 & "noms WHERE [noms].[N°]=" & rst.Fields(0).Value & "; "
 
        Set rst3 = CurrentDb.OpenRecordset(SQL3)
 
        If rst3.RecordCount <> 1 Then
            MsgBox "problème : rst3.RecordCount=" & rst3.RecordCount
            Stop
        End If
 
        txt_nom = rst3.Fields(1).Value
        Set rst3 = Nothing
 
        SQL4 = "SELECT nom, prénom, nom_complet,nom_complet_2 FROM "
        SQL4 = SQL4 & "nom_prénom_pour_VBA"
        'Debug.Print SQL4
 
        Set rst4 = CurrentDb.OpenRecordset(SQL4)
        rst4.AddNew
        rst4.Fields(0).Value = txt_nom
        rst4.Fields(1).Value = txt_prénom
        rst4.Fields(2).Value = txt_nom & " " & txt_prénom
        rst4.Fields(3).Value = txt_prénom & " " & txt_nom
        rst4.Update
 
        Set rst4 = Nothing
 
        rst.MoveNext
    Wend
 
    Set rst = Nothing
michelg77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2011, 16h09   #5
Futur Membre du Club
 
Homme Michel
développeur javascript et PHP en rech d'emploi
Inscription : juillet 2011
Messages : 82
Détails du profil
Informations personnelles :
Nom : Homme Michel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : développeur javascript et PHP en rech d'emploi

Informations forums :
Inscription : juillet 2011
Messages : 82
Points : 16
Points : 16
Par défaut Et même si l'on a pas d'autre solution ...

Il faudrait pouvoir appeler cette sub à chaque fois que l'on modifie la table compositeurs. Or, cela est-il possible sans formulaire ?
michelg77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2011, 16h45   #6
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Bonjour michelg77,

Tout d'abords, pour ta requête : L'as tu créé avec l'assistant requête ? elle devrai marcher normalement.

Concernant tes tables : Comment sont-elles structurés ? J'ai un peu de mal à voir, car tu parles en même temps de référence (ex : 1, 2, 3) et de nom / prénom (jean, dumas, etc.)

Concernant tes recordset, je pense que tu te compliques la programmation. Je te propose donc de nous expliquer l'organisation de ta base avant que l'on puisse t'aider.

Enfin, concernant l'appel de la sub (dans ce cas, une fonction me semble plus indiquée), elle s'exécute directement dans le SQL, comme le décrtit Tofalu dans son tutoriel. C'est là une des grandes forces d'Access : tu peux implémenter automatiquement toi-même des fonctions intégrées dans ton SQL, alors que ce n'est pas possible avec d'autres bases intégrer.
Ainsi, la commande SQL suivante :
Code :
Select ma_fonction(mon_champ) from ma_table;
s'exécutera parfaitement si tu as préalablement défini dans un module externe :
Code :
1
2
3
4
5
6
7
8
public function ma_fonction
....
traitement 1
...
traitement n
...
ma_fonction = <résultat de mon traitement>
end function
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2011, 12h34   #7
Futur Membre du Club
 
Homme Michel
développeur javascript et PHP en rech d'emploi
Inscription : juillet 2011
Messages : 82
Détails du profil
Informations personnelles :
Nom : Homme Michel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : développeur javascript et PHP en rech d'emploi

Informations forums :
Inscription : juillet 2011
Messages : 82
Points : 16
Points : 16
Par défaut Réponse à dumas.blr

Ma requête citée en message n°1 a été écrite il y a des mois de cela et a toujours fonctionnée.
C’est seulement quand j’ai voulu l’appliquer à une nouvelle table que je me suis aperçu qu’elle ne fonctionnait plus à cause des jonctions.

Je suis en train de créer la base de données, et j’ai un peu de mal avec les types de jointures.
De plus, access 2000 ne m’affiche pas toutes les relations contrairement à ce que dis le menu relations:
Citation:
afficher toutes les relations
Donc il va m’être un peu difficile de te répondre exhaustivement. Mais de toutes façons, ce n’est pas souhaitable car rien n’est encore définitif.

Pour éviter que l’on aie à saisir des tonnes de choses, je souhaite que l’on entre une seule fois un prénom. Pour cela, je les ai mis dans la table prénoms. Idem pour la table noms.
Dans la table compositeurs j'ai les champs :

Nom
Prénom
Date de naissance
Lieu de naissance
etc.


Enfin, dans une autre table, que l’on va appeler Oeuvres, il faut qu’on puisse accéder aux compositeurs sous la forme :
Jean-Sébastien Bach (1685-1750)

D’où mon passage par une requête req_compositeurs . Je ne pense pas qu’on aie d’autre choix.

En bref, pour ce qui nous occupe ici, je dois passer par une requête qui appellera une fonction publique. J’avais bien compris ça. Mais je prends note que les autres bases de données ne permettent pas ce genre de manip. Intéressant.

Mais ce qui me paraît capital, c’est qu’il faut que cette fonction soit appelée automatiquement, de manière à ce que chaque modification de la table compositeurs se répercute instantanément dans la table Œuvres grâce à req_compositeurs.
michelg77 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 06h14.


 
 
 
 
Partenaires

Hébergement Web