Bonjour à tous,
Je viens de migrer sous Seven. J'utilisais sous XP un bout de code pour exporter une table en fichier Txt qui marchait très bien :
Code :
1 2
|
DoCmd.TransferText acExportDelim, , NomTable,NomChemin,True |
Sous Seven, j'ai une message d'erreur :
Erreur 3441 : Le séparateur du champ de spécification du fichier texte est
identique au séparateur décimal ou au délimitateur de texte.
Donc, j'ai créé une export manuelle pour enregistrer une spécification d'exportation.
Code :
1 2
|
DoCmd.TransferText acExportDelim, NomSpec, NomTable,NomChemin,True |
Par contre, j'ai un programme qui créé des dizaines de tables de structure différentes, impossible de faire des exports manuels pour sauvegarder les spécifications d'exportation.
J'ai donc trouvé sur le net, qu'avec Seven, il fallait créer un schema.ini dans le même répertoire qui recevra le fichier exporter.
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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
Option Explicit
Option Compare Database
Public Function CreateSchemaFile(bIncFldNames As Boolean, _
sPath As String, _
sSectionName As String, _
sTblQryName As String) As Boolean
Dim Msg As String ' For error handling.
On Local Error GoTo CreateSchemaFile_Err
Dim ws As Workspace, db As Database
Dim tblDef As TableDef, fldDef As Field
Dim i As Integer, Handle As Integer
Dim fldName As String, fldDataInfo As String
' -----------------------------------------------
' Set DAO objects.
' -----------------------------------------------
Set db = CurrentDb()
' -----------------------------------------------
' Open schema file for append.
' -----------------------------------------------
Handle = FreeFile
Open sPath & "schema.ini" For Output Access Write As #Handle
' -----------------------------------------------
' Write schema header.
' -----------------------------------------------
Print #Handle, "[" & sSectionName & "]"
'Print #Handle, "Format = TabDelimited"
'Print #Handle, "Format = Delimited(;)"
Print #Handle, "Format = CSVDelimited"
Print #Handle, "TextDelimeter = ;"
Print #Handle, "DecimalSymbol = ."
Print #Handle, "ColNameHeader = " & _
IIf(bIncFldNames, "True", "False")
Print #Handle, "CharacterSet = ANSI"
' -----------------------------------------------
' Get data concerning schema file.
' -----------------------------------------------
Set tblDef = db.TableDefs(sTblQryName)
With tblDef
For i = 0 To .Fields.Count - 1
Set fldDef = .Fields(i)
With fldDef
fldName = .Name
Select Case .Type
Case dbBoolean
fldDataInfo = "Bit"
Case dbByte
fldDataInfo = "Byte"
Case dbInteger
fldDataInfo = "Short"
Case dbLong
fldDataInfo = "Integer"
Case dbCurrency
fldDataInfo = "Currency"
Case dbSingle
fldDataInfo = "Single"
Case dbDouble
fldDataInfo = "Double"
Case dbDate
fldDataInfo = "Date"
Case dbText
fldDataInfo = "Char Width " & Format$(.Size)
Case dbLongBinary
fldDataInfo = "OLE"
Case dbMemo
fldDataInfo = "LongChar"
Case dbGUID
fldDataInfo = "Char Width 16"
End Select
Print #Handle, "Col" & Format$(i + 1) _
& "=" & fldName & Space$(1) _
& fldDataInfo
End With
Next i
End With
'MsgBox sPath & "SCHEMA.INI has been created."
CreateSchemaFile = True
CreateSchemaFile_End:
Close Handle
Exit Function
CreateSchemaFile_Err:
Msg = "Error #: " & Format$(Err.Number) & vbCrLf
Msg = Msg & Err.Description
'MsgBox Msg
Resume CreateSchemaFile_End
End Function |
J'appelle cette fonction avant chaque export en utilisant cette ligne de code :
Code :
1 2
|
DoCmd.TransferText acExportDelim, , NomTable,NomChemin,True |
L'export marche, mais il ne prend pas en compte ces deux instructions :
TextDelimeter = ; (Il me met des ,)
DecimalSymbol = . (Il me met des , si je suis en , dans mes options régionales)
Après plusieurs heures passé sur le problème, je bloque!
Quelqu'un a-t-il une idée?
Merci
Julien