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 17/05/2011, 08h07   #1
Invité de passage
 
Inscription : février 2008
Messages : 19
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2008
Messages : 19
Points : 1
Points : 1
Envoyer un message via MSN à diombo
Par défaut Mettre un recordset en UTF-8 access 2007

Bonjour,
A partir d'un recordset, je crée un fichier xml de cette facon:
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
Dim fld As DAO.Field
 
Dim oFSO As Scripting.FileSystemObject
Dim oFl As Scripting.File
Dim oTxt As Scripting.TextStream
Dim objStream As Object
 
Set objStream = CreateObject("ADODB.Stream")
    objStream.Open
    objStream.Position = 0
    objStream.Charset = "UTF-8"
    Set oFSO = New Scripting.FileSystemObject
 
' création du fichier substances.xml à partir du recordset rsProd
If rsProd.RecordCount > 0 Then
rsProd.MoveFirst
    Set monSb = oFSO.CreateTextFile("H:\DESET_Sources et procédés\Projets\BaseWCMR\ApplicationCMR\DonneesTypo3\XML\substances.xml")
 
    With monSb
        .WriteLine "<?xml version=""1.0"" encoding=""utf-8""?>"
        .WriteLine "<!DOCTYPE FICHES SYSTEM ""substances.dtd"">"
        .WriteLine "<FICHES>"
        Do Until rsProd.EOF
            .WriteLine "<SUBSTANCES>"
            For Each fld In rsProd.Fields ' boucle pour permettre que les champs deviennent les balises du xml
                .WriteLine "<" & fld.Name & ">" & "<![CDATA[" & rsProd.Fields("" & fld.Name & "") & "]]>" & "</" & fld.Name & ">"
                Debug.Print "<" & fld.Name & ">" & "<![CDATA[" & rsProd.Fields("" & fld.Name & "") & "]]>" & "</" & fld.Name & ">"
 
            Next fld
            .WriteLine "</SUBSTANCES>"
            .WriteLine "" 'saut de ligne
        rsProd.MoveNext
        DoEvents
        Loop
    .WriteLine ""
    .WriteLine "</FICHES>"
 
    End With
End If
Dans mon fichier substances.xml, je perds les accents et certains caractères alors que dans le debug.print, j'ai les accents.
J'en conclu que je perds les accents au moment du WrileLine.
Comment peut-on intégrer l'encodage en UTF-8 au niveau du recordset?
Par avance, je vous remercie.
Cordialement
diombo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 19h07   #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,

Tu écris dans un fichier texte en utilisant FileSystemObject qui ne supporte que ASCII (par défaut) et unicode.
Tu n'utilises pas le flux que tu a créé (objStream).

Ton code devrait ressembler à ceci :
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
Dim fld As DAO.Field
Dim objStream As Object
 
Set objStream = CreateObject("ADODB.Stream")
    ' Paramétrage flux
    objStream.Type = adTypeText
    objStream.Charset = "UTF-8"
    objStream.LineSeparator = adCRLF
    ' Ouverture flux
    objStream.Open
    objStream.Position = 0
 
' Remplissage du flux texte (ADO) partir du recordset rsProd
If rsProd.RecordCount > 0 Then
    rsProd.MoveFirst
 
    With objStream
        .WriteText "<?xml version=""1.0"" encoding=""utf-8""?>", adWriteLine
        .WriteText "<!DOCTYPE FICHES SYSTEM ""substances.dtd"">", adWriteLine
        .WriteText "<FICHES>", adWriteLine
 
        Do Until rsProd.EOF
            .WriteText "<SUBSTANCES>", adWriteLine
            For Each fld In rsProd.Fields ' boucle pour permettre que les champs deviennent les balises du xml
                .WriteText "<" & fld.Name & ">" & "<![CDATA[" & rsProd.Fields("" & fld.Name & "") & "]]>" & "</" & fld.Name & ">", adWriteLine
                Debug.Print "<" & fld.Name & ">" & "<![CDATA[" & rsProd.Fields("" & fld.Name & "") & "]]>" & "</" & fld.Name & ">"
 
            Next fld
            .WriteText "</SUBSTANCES>", adWriteLine
            .WriteText "", adWriteLine 'saut de ligne
        rsProd.MoveNext
        DoEvents
        Loop
 
    .WriteText "", adWriteLine
    .WriteText "</FICHES>", adWriteLine
    ' Sauvegarde du flux texte dans un fichier
    .SaveToFile "H:\DESET_Sources et procédés\Projets\BaseWCMR\ApplicationCMR\DonneesTypo3\XML\substances.xml", adSaveCreateOverWrite
    End With
End If
Attention, il y a peut-être des erreurs de copier/coller dans le code.
Ajouter une référence à "Microsoft ActiveX Data Objects 2.5 Library" pour que les constantes ADO soient correctement interprétées.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 14h27   #3
Invité de passage
 
Inscription : février 2008
Messages : 19
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2008
Messages : 19
Points : 1
Points : 1
Envoyer un message via MSN à diombo
Désolé pour ma réponse tardive.
J'étais absent du bureau et ensuite sur d'autres projets.
J'ai intégré le code que vous avez modifié et ça marche très bien.
Encore une fois merci.
Cordialement,
diombo 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 13h35.


 
 
 
 
Partenaires

Hébergement Web