SQL SERVER - PROCEDURE D'EDITION D'UN FICHIER PLAT (EXPORT CSV)

FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009 - 22 nov. 2007 à 17:42
shirley8 Messages postés 3 Date d'inscription lundi 9 novembre 2009 Statut Membre Dernière intervention 9 novembre 2009 - 9 nov. 2009 à 04:37
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/44796-sql-server-procedure-d-edition-d-un-fichier-plat-export-csv

shirley8 Messages postés 3 Date d'inscription lundi 9 novembre 2009 Statut Membre Dernière intervention 9 novembre 2009
9 nov. 2009 à 04:37
Avec Emicsoft Vidéo Convertisseur pour Mac, Vous avez faitez conversion du format vidéo en WAV, MP3, etc sans problème. Essayiez autre programme pour aider!!Emicsoft AVI Converter for Mac, Emicsoft FLV Converter for Mac.

http://www.emicsoft.com/video-converter-for-mac.html
http://www.emicsoft.com/avi-converter-for-mac.html
http://www.emicsoft.com/flv-converter-for-mac.html
cs_oluha Messages postés 71 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 5 février 2009
5 févr. 2009 à 10:14
Merci pour ta source
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
28 déc. 2007 à 14:10
Conversion OEM-ANSI

Les férus de programmation trouveront les tables de conversion sur le site VB France à cette adresse :
http://www.vbfrance.com/codes/CONVERTION-TABLE-CARACTERES-EBCDIC-ASCII-OEM-ANSI_4998.aspx
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
26 déc. 2007 à 14:23
Naturellement, il n'est pas nécessaire dénumérer toutes les propriétés des deux principales méthodes appelées. On obtient donc, pour la macro précédente, la simplification suivante de l'écriture :

Sub DecodeOEM()
Dim sNames() As String, i As Integer

'Emplacement du répertoire à traiter
ChangeFileOpenDirectory "\\srvinfo\Test"
'Liste CSV des fichiers du réperoire spécifié
sNames = Split("test.csv;test.txt", ";")

For i = LBound(sNames) To UBound(sNames)
Documents.Open FileName:=sNames(i), Encoding:=850
With ActiveDocument
.SaveAs FileName:=sNames(i), Encoding:=1252
.Close
End With
Next i
End Sub
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
26 déc. 2007 à 11:43
Variante de la précédente macro à choisir si tous vos fichiers appartiennent au même répertoire.

Sub DecodeOEM()
Dim sNames() As String, i As Integer

'Emplacement du répertoire à traiter
ChangeFileOpenDirectory "D:\Test"
'Liste CSV des fichiers du réperoire spécifié
sNames = Split("test.csv;test.txt", ";")

For i = LBound(sNames) To UBound(sNames)
Documents.Open FileName:=sNames(i), ConfirmConversions:=False, ReadOnly:=False, _
AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
Revert:=False, WritePasswordDocument:="", WritePasswordTemplate:="", _
Format:=wdOpenFormatAuto, XMLTransform:="", Encoding:=850
With ActiveDocument
.SaveAs FileName:=sNames(i), FileFormat:=wdFormatText, _
LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword:="", _
ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, _
SaveFormsData:=False, SaveAsAOCELetter:=False, Encoding:=1252, InsertLineBreaks:=False, _
AllowSubstitutions:=False, LineEnding:=wdCRLF
.Close
End With

Next i

End Sub
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
21 déc. 2007 à 17:34
Annule et remplace la macro du commentaire précédent.


Sub Decode()
' Convertir un fichier OEM en ANSI
Call OpenFile("D:\Test", "Test.csv", 850)
Call CloseFile("D:\Test", "Test.csv", 1252)
End Sub

Sub OpenFile(sPath As String, sFileName As String, iEncoding As Integer)
'Ouvrir un fichier codé
ChangeFileOpenDirectory sPath
Documents.Open FileName:=sFileName, ConfirmConversions:=False, ReadOnly:=False, _
AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
Revert:=False, WritePasswordDocument:="", WritePasswordTemplate:="", _
Format:=wdOpenFormatAuto, XMLTransform:="", Encoding:=iEncoding
End Sub

Sub CloseFile(sPath As String, sFileName As String, iEncoding As Integer)
'Enregistrer et fermer un fichier codé
ChangeFileOpenDirectory sPath
With ActiveDocument
.SaveAs FileName:=sFileName, FileFormat:=wdFormatText, _
LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword:="", _
ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, _
SaveFormsData:=False, SaveAsAOCELetter:=False, Encoding:=iEncoding, InsertLineBreaks:=False, _
AllowSubstitutions:=False, LineEnding:=wdCRLF
.Close
End With
End Sub
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
21 déc. 2007 à 16:49
Pour ceux qui souhaitent automatiser la conversion sous Word (Macro) :
Sub Decode()
' Convertir un fichier OEM en ANSI
Call OpenFile("D:\Test", "Test_OEM.csv", 850)
Call SaveFile("D:\Test", "Test_ANSI.csv", 1252)
End Sub

Sub OpenFile(sPath As String, sFileName As String, iEncoding As Integer)
'Ouvrir un fichier codé
ChangeFileOpenDirectory sPath
Documents.Open FileName:=sFileName, ConfirmConversions:=False, ReadOnly:=False, _
AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
Revert:=False, WritePasswordDocument:="", WritePasswordTemplate:="", _
Format:=wdOpenFormatAuto, XMLTransform:="", Encoding:=iEncoding
End Sub

Sub SaveFile(sPath As String, sFileName As String, iEncoding As Integer)
'Fermer un fichier codé
ChangeFileOpenDirectory sPath
ActiveDocument.SaveAs FileName:=sFileName, FileFormat:=wdFormatText, _
LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword:="", _
ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, _
SaveFormsData:=False, SaveAsAOCELetter:=False, Encoding:=1252, InsertLineBreaks:=False, _
AllowSubstitutions:=False, LineEnding:=wdCRLF
End Sub
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
18 déc. 2007 à 11:49
Le lien ci-dessous fournira de plus amples informations sur le codage OEM et ANSI à ceux qui le souhaitent.

http://fspsa.free.fr/ansi.htm
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
14 déc. 2007 à 10:15
Incroyable... plus de 900 connexions en moins de quatre semaines et personne n'a relevé la complication que cette source peut poser.
Nos GM seraient devenus aussi distraits ? Pourtant cette difficulté est souvent évoquée dans les forums de discussion.
Je vous laisse le week-end pour identifier ce problème avant d'apporter une explication et une solution à celui-ci.
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
7 déc. 2007 à 15:04
Mille excuses pour les fautes de frappe (orthographe du commentaire précédent) une tendinite a complètement bloqué mon bras droit. Au-delà, n'hésitez pas à exprimer votre opinion sur la solution d'export proposée.
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
6 déc. 2007 à 11:44
Contraint d'effectuer une migration de données vers une application antédiluvienne, j'ai imaginé cette solution simple et efficace. Compte tenu de l'intérêt actuelle des lecteurs (meilleur popularité du mois) il semblerait que l'objection sécuritaire de DNT91 ne soit pas vraiment un obstacle.
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
30 nov. 2007 à 15:30
A cause de ses possibilités étendues, ton objection est fondée. Cette commande doit être réservée à un administrateur ou à des utilisateurs avertis.
dnt91 Messages postés 48 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 30 novembre 2007
30 nov. 2007 à 15:21
Salut,

Tout d'abord merci pour ton commentaire et ta note pour mon article (http://www.sqlfr.com/tutoriaux/METHODES-TRANSFERT-DONNEES-AVEC-SQL-SERVER-2005_677.aspx).

Pour ma part, compte tenu de la puissance de la procédure étendue xp_cmdshell, j'évite d'activer cette fonctionnalité et donc d'utiliser la procédure étendue xp_cmdshell ! je le faisais beaucoup avant, notamment lorsque je développais des applications qui utilisaient des images; je créais des dossiers pour stocker mes images avec la procédure xp_cmdshell, ensuite j'y stockais mes images et je ne gardais que les chemins dans ma base de données pour optimiser la vitesse d'exécution des requetes sur mes images ! Cependant, avec cette procédure, on peut quasiment tout faire au niveau du système, et donc son utilisation n'est réservée qu'à des utilisateurs avertis ! Cependant, on est rarement tout seul à travailler sur un serveur, et on ne connait pas forcément le niveau des autres et donc ce qu'ils peuvent faire avec...

Quoi qu'il en soit, très bon article.

Pour me faire un peu de pub, je suis en train d'écire un nouvel article sur les différentes possiblités qui sont offertes aux développeurs de bases de données (Création de bases , de tables, de vues, de procédures stockées, de délcencheurs, de fonctions, de règles, de types alias, etc...), avis aux amateurs !
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
26 nov. 2007 à 14:01
Vous ne seriez pas un peu paresseux l'ami ? OK, voila un exemple très concret sur la base AdventureWorks.

-- Variables de traitement d'export
DECLARE @FullPath Varchar(128), @Txt VARCHAR (7744), @Cmd varchar(8000)
-- Variables de données
DECLARE @DepartementID smallint, @Name varchar(50), @Groupname varchar(50), @ModifiedDate datetime

-- Nom et emplacement du fichier d'export csv
SET @FullPath='D:\Test\HR_Departement.csv'

DECLARE HR_DPT_CURSEUR CURSOR FOR
SELECT TOP (20) DepartmentID, Name, GroupName, ModifiedDate FROM HumanResources.Department
OPEN HR_DPT_CURSEUR
FETCH NEXT FROM HR_DPT_CURSEUR INTO @DepartementID, @Name, @Groupname, @ModifiedDate
WHILE (@@FETCH_STATUS = 0) BEGIN
SET @Txt = CONVERT(VARCHAR(11), ISNULL(@DepartementID, '')) + ';'
+ ISNULL(@Name, '') + ';'
+ ISNULL(@GroupName, '') + ';'
+ ISNULL(CONVERT(VARCHAR(10), @ModifiedDate, 103), '')
-- Ecrire et exécuter la commande d'ajout de contenu
SET @Cmd = 'Echo ' + @Txt + ' >> ' + @FullPath;
EXEC xp_cmdshell @Cmd, NO_OUTPUT;
FETCH NEXT FROM HR_DPT_CURSEUR INTO @DepartementID, @Name, @Groupname, @ModifiedDate
END -- END WHILE
CLOSE HR_DPT_CURSEUR
DEALLOCATE HR_DPT_CURSEUR
cs_bir Messages postés 9 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 15 mars 2009
26 nov. 2007 à 11:30
bonjour, pas mal ton code , mais si tu pouvez donner un exemple avec une requête sql en paramètre ce serai mieux
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
26 nov. 2007 à 10:53
Script d'activation de la commande shell :

EXEC sp_configure 'xp_cmdshell' , 1
GO
-- Appliquer la modification de configuration
RECONFIGURE
GO
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
26 nov. 2007 à 10:23
L'export SQL vers un fichier CSV n'est qu'un exemple parmi tant de possibilités qu’il est tout à fait regrettable à mon avis que les commandes DOS ne soient pas davantage utilisées dans les scripts SQL.
Sinon, pourquoi faire simple quand on peut faire compliqué ?
Alighieri76 Messages postés 8 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 23 novembre 2007
23 nov. 2007 à 14:32
Merci beaucoup pour cette source.Je ve étudier ca de prés. Je te met 8/10 car ca peut être appronfondie
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
22 nov. 2007 à 17:42
Si l’exemple parait simple, sachez que grâce à cette solution, nous avons, en imbriquant des curseurs, construit une seule procédure d’export pour plus de 50 fichiers !
Rejoignez-nous