Salut,
j'ai une application qui lit des données depuis des fichiers CSV, les transforme en unicode (windows-1256) et les enregsitre dans une base SQL Server.
Le probleme c'est parfois j'obtient des champs (de la base ) qui sont vides
alors qu'il ya des données dans le champs correspondant dans le CSV
voici une partie du code qui fait l'import :
et voici une partie du fichier CSV :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 'Récupérer les champs du fichier CSV strSQL = "select * from [" & strFileName & "]" Set objRstSource = objCnxSource.Execute(strSQL) Set objFields = objRstSource.Fields 'Récupérer les champs de la table SQL Server objRstDestination.Open strFileShortName, objCnxDestination, adOpenKeyset, adLockOptimistic, adCmdTable Debug.Print "*************************" Debug.Print strFileShortName Debug.Print "*************************" Do While Not objRstSource.EOF objRstDestination.AddNew For Each objField In objFields If (Not IsNull(objField.Value)) Then Debug.Print objField.Name & " :" & objField.Value & vbCrLf strFieldName = objField.Name If IsArabicField(strFieldName) Then objRstDestination.Fields(strFieldName) = Encode(objField.Value) Else objRstDestination.Fields(strFieldName) = objField.Value End If End If Next objRstSource.MoveNext objRstDestination.Update Loop
voici le code de la fonction Encode:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 grpdoc nottxt_arabic notice OUV Titre propre : méthode de calcul numérique , vol 1 systèmes d'équations@ Auteur du document : NOUGIER Jean-pierre@ Présentation : 325 p. ; 28 cm@ I.S.B.N : 2-746-20278-6@ Publication : Paris 2001@Editeur / Distributeur : hermes@ Mots matières : analyse mathématique@ 00000001 OUV Titre propre : Cyberculture , rapport au Conseil de l'Europe dans le cadre du projet Nouvelles technologies, coopération culturelle et communication@ Auteur du document : LEVY Pierre@ Présentation : 313 p. ; 19 x 13 cm@ I.S.B.N : 2-7381-0512-2@ Publication : Paris - Strasbourg 1997 - 1997@Editeur / Distributeur : O. Jacob - Conseil de l'Europe@ Mots matières : systèmes de télécommunications , aspect social - technique et civilisation - réalité virtuelle@ Résumé : Qu'est-ce que la cyberculture? Quel mouvement social et culturel se cache derrière ce phénomène technique?... De la numérisation à la navigation, en passant par la mémoire, la programmation, les logiciels, la réalité virtuelle, le multimédia, l'interactivité, le courrier électronique, l'auteur tente de mesurer l'impact social et culturel des nouvelles technologies.@ 00000090
Transforme l'encodage en windows-1256
(c'est bête comme code mais ça fait l'affaire)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Public Function Encode(chaine As String) As String Dim fso Dim fl Dim objXML Dim objNode Dim objFile Dim strXML Set objFile = CreateObject("MSXML2.FreeThreadedDomDocument") Set strXML = CreateObject("MSXML2.FreeThreadedDomDocument") Set objXML = CreateObject("MSXML2.FreeThreadedDomDocument") objXML.async = False strXML.async = False objFile.async = False strXML.LoadXML ("<value>" & chaine & "</value>") Set fso = CreateObject("Scripting.FileSystemObject") Set fl = fso.CreateTextFile("c:\temp.txt") fl.write ("<?xml version='1.0' encoding='windows-1256'?>" & strXML.xml) fl.Close Set fl = Nothing objFile.Load ("c:\temp.txt") objXML.LoadXML (objFile.xml) Set objNode = objXML.SelectSingleNode("value") Encode = objNode.Text End Function
Partager