Requête paramétrée
Résolu
soleil_levant
Messages postés
393
Date d'inscription
Statut
Membre
Dernière intervention
-
soleil_levant Messages postés 393 Date d'inscription Statut Membre Dernière intervention -
soleil_levant Messages postés 393 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je cherche à concaténer les noms d'une table en un seul champs paramétrée sous Access. Voici ma table:
T_RECEPTION
ID INT, P_REC_LASTNAME VARCHAR, P_REC_FIRSTNAME VARCHAR
Requête:
PARAMETERS ALL_PRENOM Text ( 8000 );
SET ALL_PRENOM = ''
SELECT ALL_PRENOM = ALL_PRENOM + COALESCE(P_REC_LASTNAME + ', ', '')
FROM T_RECEPTION
IF ALL_PRENOM IS NOT NULL
SET ALL_PRENOM = SUBSTRING(ALL_PRENOM, 1, LEN(ALL_PRENOM) - 1)
SELECT ALL_PRENOM AS PRENOMS;
L'exécution de cette requête se bloque au niveau du SET.
Quelqu'un a une idée? Merci d'avance
Je cherche à concaténer les noms d'une table en un seul champs paramétrée sous Access. Voici ma table:
T_RECEPTION
ID INT, P_REC_LASTNAME VARCHAR, P_REC_FIRSTNAME VARCHAR
Requête:
PARAMETERS ALL_PRENOM Text ( 8000 );
SET ALL_PRENOM = ''
SELECT ALL_PRENOM = ALL_PRENOM + COALESCE(P_REC_LASTNAME + ', ', '')
FROM T_RECEPTION
IF ALL_PRENOM IS NOT NULL
SET ALL_PRENOM = SUBSTRING(ALL_PRENOM, 1, LEN(ALL_PRENOM) - 1)
SELECT ALL_PRENOM AS PRENOMS;
L'exécution de cette requête se bloque au niveau du SET.
Quelqu'un a une idée? Merci d'avance
A voir également:
- Requête paramétrée
- Erreur de requete facebook - Forum Facebook
- Quelle requête écrire pour demander au moteur de recherche de présenter de préférence les pages web traitant de tennis mais pas de tennis de table ✓ - Forum Java
- L'opérateur ou l'administrateur a refusé la requête ✓ - Forum Windows
- Quelle requête écrire pour demander au moteur de recherche de présenter de préférence les pages web traitant de tennis mais pas de tennis de table ? ✓ - Forum Loisirs / Divertissements
- Requête bloquée par le pare-feu applicatif claranet webfence ✓ - Forum Google Chrome
6 réponses
Bonjour,
J'ai pas très bien compris ta question, veux-tu avoir dans un seul champ la valeur de P_REC_LASTNAME concaténée avec celle de P_REC_FIRSTNAME ?
A plus
J'ai pas très bien compris ta question, veux-tu avoir dans un seul champ la valeur de P_REC_LASTNAME concaténée avec celle de P_REC_FIRSTNAME ?
A plus
Bonjour,
Sorry pour cette réponse tardive, très long week-end. Je ne pense pas que tu puisses faire cela avec une seule requête, mais je te propose de le faire de la façon suivant
1°) Création d'une fonction dans Acces
2°) Une requête
Je testé les deux sous Access (je n'ai qu'une dizaine de lignes) et cela fonctionne.
A toi de voir
A plus
Sorry pour cette réponse tardive, très long week-end. Je ne pense pas que tu puisses faire cela avec une seule requête, mais je te propose de le faire de la façon suivant
1°) Création d'une fonction dans Acces
Function GetAllPrenoms() As String Dim AllPrenoms As String AllPrenoms = "" Dim RecordRead As Recordset Set RecordRead = CurrentDb.OpenRecordset("T_RECEPTION") RecordRead.MoveFirst While Not RecordRead.EOF If AllPrenoms = "" Then AllPrenoms = RecordRead.Fields("P_REC_LASTNAME") Else AllPrenoms = AllPrenoms + " , " + RecordRead.Fields("FirstName") End If RecordRead.MoveNext Wend GetAllPrenoms = AllPrenoms End Function
2°) Une requête
SELECT GetAllPrenoms() As AllPrenoms
Je testé les deux sous Access (je n'ai qu'une dizaine de lignes) et cela fonctionne.
A toi de voir
A plus
Salut Christounet :)
merci pour ta réponse, je m'en doutais que les procédures stockées SQL Server ne marcherais pas avec Access. Depuis je suis passé à la programmation VBA. Cela répond très bien à mes besoins car programmer avec VB s'avère très simple.
Pour résumer, ta procédure marcherais surement car me suis converti vers les RecordSet de la technologie ADO. Sa syntaxe est correcte.
Encore merci.
Je vais la tester dès demain au boulo.
Dernière question : Suis-je toujours obligé pour naviguer entre enregistrement du recordset de faire la boucle While tant que je n'attein pas la fin de fichier recordSet?
Cette dernière boucle, puis-je y mettre une autre du même type pour faire des conditions selon la valeur d'un champ de l'enregistrement dans lequel j'y sui et faire un MovePrevious pour retourner vers l'enregistrement de la boucle précédente?
Merci infiniment.
merci pour ta réponse, je m'en doutais que les procédures stockées SQL Server ne marcherais pas avec Access. Depuis je suis passé à la programmation VBA. Cela répond très bien à mes besoins car programmer avec VB s'avère très simple.
Pour résumer, ta procédure marcherais surement car me suis converti vers les RecordSet de la technologie ADO. Sa syntaxe est correcte.
Encore merci.
Je vais la tester dès demain au boulo.
Dernière question : Suis-je toujours obligé pour naviguer entre enregistrement du recordset de faire la boucle While tant que je n'attein pas la fin de fichier recordSet?
Cette dernière boucle, puis-je y mettre une autre du même type pour faire des conditions selon la valeur d'un champ de l'enregistrement dans lequel j'y sui et faire un MovePrevious pour retourner vers l'enregistrement de la boucle précédente?
Merci infiniment.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Si tu veux lire tous les enregistrements, tu dois effectivement utiliser une boucle jusqu'à la fin du recordset,
mais tu n'est pas obligé de lire tous les enregistrements du recordset, tu peux éventuellement sortir de la boucle WHILE avec une deuxième condition. Exemple
Dans cet exemple, si le prénom lu est égal à Cindy, la boucle while sera stoppée.
Tu trouveras ici une documentation concernant les différents MOVE que tu peux faire dans un recordset, et tu peux voir qu'il est possible de lire l'enregistrement précédent.
A plus
Si tu veux lire tous les enregistrements, tu dois effectivement utiliser une boucle jusqu'à la fin du recordset,
mais tu n'est pas obligé de lire tous les enregistrements du recordset, tu peux éventuellement sortir de la boucle WHILE avec une deuxième condition. Exemple
Function GetAllPrenoms() As String Dim AllPrenoms As String Dim PrenomTrouve As Boolean AllPrenoms = "" PrenomTrouve = False Dim RecordRead As Recordset Set RecordRead = CurrentDb.OpenRecordset("Noms") RecordRead.MoveFirst While PrenomTrouve = False And Not RecordRead.EOF If RecordRead.Fields("FirstName") = "Cindy" Then PrenomTrouve = True Else If AllPrenoms = "" Then AllPrenoms = RecordRead.Fields("FirstName") Else AllPrenoms = AllPrenoms + " , " + RecordRead.Fields("FirstName") End If RecordRead.MoveNext End If Wend GetAllPrenoms = AllPrenoms End Function
Dans cet exemple, si le prénom lu est égal à Cindy, la boucle while sera stoppée.
Tu trouveras ici une documentation concernant les différents MOVE que tu peux faire dans un recordset, et tu peux voir qu'il est possible de lire l'enregistrement précédent.
A plus