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 27/10/2011, 20h08   #1
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 75
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 75
Points : 19
Points : 19
Par défaut Requête concaténation tronqué à 255 caractères

Bonjour à tous, j'ai un problème lors de ma concaténation de colonnes, la requête me tronque mon résultat à 255 caractères.

Voici le code de mon module
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
Function ConcatForQuery(strRegroup As String, fldRegroup As String, _
    strConcat As String, strTable As String, _
    Optional strSep As String = "/") As String
 
 
'** Regroupement de donnée sur le champ fldRegroup
'** et concaténation sur le champ strConcat
Dim db As Database
Dim rst As Recordset
Dim strResult As String
Dim strRst As String
Dim Strvide As String
 
 
Set db = CurrentDb()
strRst = "Select * From [" & strTable & "] " _
    & "Where [" & strRegroup & "] = """ & fldRegroup & """;"
Strvide = ""
Set rst = db.OpenRecordset(strRst, dbOpenDynaset)
With rst
    If Not .BOF Then
        .MoveFirst
        Do Until .EOF
            If strResult = "" Then
                strResult = Strvide & .Fields(strConcat)
            Else
                strResult = strResult & strSep & .Fields(strConcat)
            End If
        .MoveNext
        Loop
    End If
End With
rst.Close: Set rst = Nothing
db.Close: Set db = Nothing
ConcatForQuery = strResult
 
End Function
et voici ma requete
Code :
Services: ConcatForQuery("MonChamp"; [Monchamp] ;"MonChampConcaténation";"MaTable";"; ")
quelqu'un peut m'aider à résoudre le problème.

Merci
Daniel-Gérald est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 00h37   #2
Membre Expert
 
Avatar de nico84
 
Homme Nicolas Guimbal
Consultant/développeur ERP
Inscription : mai 2008
Messages : 1 256
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Guimbal
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant/développeur ERP
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2008
Messages : 1 256
Points : 1 872
Points : 1 872
Bonjour,

Essaie de ne pas déclarer strresult comme une string, idem pour la fonction :
soit dim strconcat (sans autre précision)
soit dim strconcat as array
nico84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 01h25   #3
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 75
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 75
Points : 19
Points : 19
Désolé Nico84, j'ai toujours le même résultat tronqué.
Daniel-Gérald est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 12h04   #4
Membre Expert
 
Avatar de nico84
 
Homme Nicolas Guimbal
Consultant/développeur ERP
Inscription : mai 2008
Messages : 1 256
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Guimbal
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant/développeur ERP
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2008
Messages : 1 256
Points : 1 872
Points : 1 872
Après essai, une string semble limitée à 1023 caractères en VBA !

Si cela est suffisant, il faudrait exécuter le code en pas à pas pour voir à quel endroit la limite passe de 1023 à 255...
nico84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 15h52   #5
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 75
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 75
Points : 19
Points : 19
Salut nico84, la limite de 1023 me semble parfait pour moi, mais malheureusement je ne trouve pas ou le code fait passer la limite de 1023 à 255.

Merci
Daniel-Gérald est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 16h40   #6
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 75
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 75
Points : 19
Points : 19
Je vient de faire un essai avec le code qu'il y à sur ce forum et j'ai le même problème, les données de mon champ sont tronqué.

Le code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Public Function RecupParticipant(Projet As Long) As String
Dim res As DAO.Recordset
Dim SQL As String
'Selectionne les participant du projet
SQL = "SELECT NomParticipant FROM Tbl_Projet WHERE Projet=" & Projet
Set res = CurrentDb.OpenRecordset(SQL)
'Concatene les différents enregistrement
While Not res.EOF
RecupParticipant = RecupParticipant & res.Fields(0).Value & " "
res.MoveNext
Wend
'Enleve le dernier espace
RecupParticipant = Left(RecupParticipant, Len(RecupParticipant) - 1)
'libere la mémoire
Set res = Nothing
End Function
La requête
Code :
1
2
SELECT DISTINCT Tbl_projet.Projet, Recupparticipant(Projet) AS LesParticipants
FROM Tbl_projet;
Daniel-Gérald est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 17h39   #7
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Tarn (Midi Pyrénées)

Informations professionnelles :
Activité : Chercheur
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 150
Points : 231
Points : 231
Bonjour,

Dans le dernier cas c'est le DISTINCT qui pose le problème. Le résultat attendu peut être obtenu avec :

Code :
1
2
3
SELECT Tbl_projet.Projet, Recupparticipant(Projet) AS LesParticipants
FROM Tbl_projet
GROUP BY Tbl_projet.Projet;
BCdt
fbtsra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 19h40   #8
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 75
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 75
Points : 19
Points : 19
Super ca fonctionne!!!

Mais il i a un petit inconvenient,

j'aimerais savoir s'y il a un moyen de changé le type de données du champs Projet. Il est en numérique et j'aimerais le mettre en texte. Lorsque je change dans les code du module (As long pour as string) ce ne fonctionne pas.
Daniel-Gérald est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2011, 13h24   #9
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 75
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 75
Points : 19
Points : 19
Merci j'ai trouvé en changant le type de données dans ma table par une commande SQL.
Code :
DoCmd.RunSQL "Alter Table [T_projet] Alter Column [Projet] long;"
Daniel-Gérald 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 05h53.


 
 
 
 
Partenaires

Hébergement Web