Bonjour à tous,
Je reçois par mail un fichier texte (exporté d'une base access). Avec
VB6, j'aimerai le transformer en base access pour pouvoir le traiter
plus facilement!
Est-ce possible? Une piste!
Merci à tous,
Michel
Bonjour à tous,
Je reçois par mail un fichier texte (exporté d'une base access). Avec
VB6, j'aimerai le transformer en base access pour pouvoir le traiter
plus facilement!
Est-ce possible? Une piste!
Merci à tous,
Michel
Bonjour à tous,
Je reçois par mail un fichier texte (exporté d'une base access). Avec
VB6, j'aimerai le transformer en base access pour pouvoir le traiter
plus facilement!
Est-ce possible? Une piste!
Merci à tous,
Michel
Bonjour à tous,
Je reçois par mail un fichier texte (exporté d'une base access). Avec VB6,
j'aimerai le transformer en base access pour pouvoir le traiter plus
facilement!
Est-ce possible? Une piste!
Merci à tous,
Michel
Bonjour à tous,
Je reçois par mail un fichier texte (exporté d'une base access). Avec VB6,
j'aimerai le transformer en base access pour pouvoir le traiter plus
facilement!
Est-ce possible? Une piste!
Merci à tous,
Michel
Bonjour à tous,
Je reçois par mail un fichier texte (exporté d'une base access). Avec VB6,
j'aimerai le transformer en base access pour pouvoir le traiter plus
facilement!
Est-ce possible? Une piste!
Merci à tous,
Michel
Bonjour Michel Voirain,
Michel Voirain a écrit :Bonjour à tous,
Je reçois par mail un fichier texte (exporté d'une base access). Avec
VB6, j'aimerai le transformer en base access pour pouvoir le traiter plus
facilement!
Est-ce possible? Une piste!
Merci à tous,
Michel
En complément de la réponse d'Aski, il serait intéressant de savoir si tu
disposes d'Access et/ou Excel, et si tu veux travailler avec DAO ou ADO,
les méthodes de créations de tables et d'importations de données sont
grandement liées à cet environnement.
--
Cordialement,
Jacques.
Bonjour Michel Voirain,
Michel Voirain a écrit :
Bonjour à tous,
Je reçois par mail un fichier texte (exporté d'une base access). Avec
VB6, j'aimerai le transformer en base access pour pouvoir le traiter plus
facilement!
Est-ce possible? Une piste!
Merci à tous,
Michel
En complément de la réponse d'Aski, il serait intéressant de savoir si tu
disposes d'Access et/ou Excel, et si tu veux travailler avec DAO ou ADO,
les méthodes de créations de tables et d'importations de données sont
grandement liées à cet environnement.
--
Cordialement,
Jacques.
Bonjour Michel Voirain,
Michel Voirain a écrit :Bonjour à tous,
Je reçois par mail un fichier texte (exporté d'une base access). Avec
VB6, j'aimerai le transformer en base access pour pouvoir le traiter plus
facilement!
Est-ce possible? Une piste!
Merci à tous,
Michel
En complément de la réponse d'Aski, il serait intéressant de savoir si tu
disposes d'Access et/ou Excel, et si tu veux travailler avec DAO ou ADO,
les méthodes de créations de tables et d'importations de données sont
grandement liées à cet environnement.
--
Cordialement,
Jacques.
Merci pour vos réponses!
Précisions : je ne dispose pas d'excel, ni d'access sur les postes où
je crée l'application. C'est pourquoi, j'utilise VB6.
Mon application fonctionne très bien avec une base access. Mais
l'envoi des informations en fichier joint peut poser des problèmes,
car plusieurs postes partage la même connexion alternativement pour
la reception des données. En mode texte, le fichier fait quelques ko
alors qu'en mode access il peut faire 300ko. Et pas d'adsl!
Je retravaille en fin d'après-midi, sur mon application.
Encore merci,
Michel
Merci pour vos réponses!
Précisions : je ne dispose pas d'excel, ni d'access sur les postes où
je crée l'application. C'est pourquoi, j'utilise VB6.
Mon application fonctionne très bien avec une base access. Mais
l'envoi des informations en fichier joint peut poser des problèmes,
car plusieurs postes partage la même connexion alternativement pour
la reception des données. En mode texte, le fichier fait quelques ko
alors qu'en mode access il peut faire 300ko. Et pas d'adsl!
Je retravaille en fin d'après-midi, sur mon application.
Encore merci,
Michel
Merci pour vos réponses!
Précisions : je ne dispose pas d'excel, ni d'access sur les postes où
je crée l'application. C'est pourquoi, j'utilise VB6.
Mon application fonctionne très bien avec une base access. Mais
l'envoi des informations en fichier joint peut poser des problèmes,
car plusieurs postes partage la même connexion alternativement pour
la reception des données. En mode texte, le fichier fait quelques ko
alors qu'en mode access il peut faire 300ko. Et pas d'adsl!
Je retravaille en fin d'après-midi, sur mon application.
Encore merci,
Michel
Michel Voirain wrote:Merci pour vos réponses!
Précisions : je ne dispose pas d'excel, ni d'access sur les postes où
je crée l'application. C'est pourquoi, j'utilise VB6.
Mon application fonctionne très bien avec une base access. Mais
l'envoi des informations en fichier joint peut poser des problèmes,
car plusieurs postes partage la même connexion alternativement pour
la reception des données. En mode texte, le fichier fait quelques ko
alors qu'en mode access il peut faire 300ko. Et pas d'adsl!
Je retravaille en fin d'après-midi, sur mon application.
Encore merci,
Michel
Hello,
En complément des questions précédentes:
Je te résume ce que j'ai compris:
De 1 à N personnes travaillent sur une application X.
Ces N personnes t'envoient en pièce jointe N fichier(s)
texte, qui contient(nnent) des informations.
Tu veux recevoir ces fichiers texte sur une autre application (Y)
et ré-insérer le contenu de ce/ces fichier(s) texte dans une base Access.
Questions:
Tous les fichiers reçus ont ils la même structure, immuable?
Si oui, il est donc possible d'avoir une table déjà créée et
il suffit de parser le fichier et d'insérer les données dans la
table ?
Faut il AJOUTER les données de chaque fichier dans une table unique?
As tu besoin de mettre les données en base "pour toujours" ou est ce juste
le temps du traitement (par ex sortir des stats à coup de SQL) ?
En fait je suis sur que c'est vraiment tout simple, il faut juste une
bonne descritpion du problème. Le reste semble assez aisé.
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Michel Voirain wrote:
Merci pour vos réponses!
Précisions : je ne dispose pas d'excel, ni d'access sur les postes où
je crée l'application. C'est pourquoi, j'utilise VB6.
Mon application fonctionne très bien avec une base access. Mais
l'envoi des informations en fichier joint peut poser des problèmes,
car plusieurs postes partage la même connexion alternativement pour
la reception des données. En mode texte, le fichier fait quelques ko
alors qu'en mode access il peut faire 300ko. Et pas d'adsl!
Je retravaille en fin d'après-midi, sur mon application.
Encore merci,
Michel
Hello,
En complément des questions précédentes:
Je te résume ce que j'ai compris:
De 1 à N personnes travaillent sur une application X.
Ces N personnes t'envoient en pièce jointe N fichier(s)
texte, qui contient(nnent) des informations.
Tu veux recevoir ces fichiers texte sur une autre application (Y)
et ré-insérer le contenu de ce/ces fichier(s) texte dans une base Access.
Questions:
Tous les fichiers reçus ont ils la même structure, immuable?
Si oui, il est donc possible d'avoir une table déjà créée et
il suffit de parser le fichier et d'insérer les données dans la
table ?
Faut il AJOUTER les données de chaque fichier dans une table unique?
As tu besoin de mettre les données en base "pour toujours" ou est ce juste
le temps du traitement (par ex sortir des stats à coup de SQL) ?
En fait je suis sur que c'est vraiment tout simple, il faut juste une
bonne descritpion du problème. Le reste semble assez aisé.
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ; _no_spam_jean_marc_n2@yahoo.fr
FAQ VB: http://faq.vb.free.fr/
Michel Voirain wrote:Merci pour vos réponses!
Précisions : je ne dispose pas d'excel, ni d'access sur les postes où
je crée l'application. C'est pourquoi, j'utilise VB6.
Mon application fonctionne très bien avec une base access. Mais
l'envoi des informations en fichier joint peut poser des problèmes,
car plusieurs postes partage la même connexion alternativement pour
la reception des données. En mode texte, le fichier fait quelques ko
alors qu'en mode access il peut faire 300ko. Et pas d'adsl!
Je retravaille en fin d'après-midi, sur mon application.
Encore merci,
Michel
Hello,
En complément des questions précédentes:
Je te résume ce que j'ai compris:
De 1 à N personnes travaillent sur une application X.
Ces N personnes t'envoient en pièce jointe N fichier(s)
texte, qui contient(nnent) des informations.
Tu veux recevoir ces fichiers texte sur une autre application (Y)
et ré-insérer le contenu de ce/ces fichier(s) texte dans une base Access.
Questions:
Tous les fichiers reçus ont ils la même structure, immuable?
Si oui, il est donc possible d'avoir une table déjà créée et
il suffit de parser le fichier et d'insérer les données dans la
table ?
Faut il AJOUTER les données de chaque fichier dans une table unique?
As tu besoin de mettre les données en base "pour toujours" ou est ce juste
le temps du traitement (par ex sortir des stats à coup de SQL) ?
En fait je suis sur que c'est vraiment tout simple, il faut juste une
bonne descritpion du problème. Le reste semble assez aisé.
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Merci jean-Marc!
Voici une description du projet global. Une association de loisirs
propose pendant les vacances d'été des journées de loisirs dans 5
centres. les inscriptions se font au siège et l'accueil dans les
centres. j'ai créé au siège une application avec Access 2003. Tous
les jours le siège envoie la liste des inscrits du lendemain : c'est
une table exportée en mode texte. Les centres renvoient la liste des
enfants présents. Les centres se partagent une connexion internet bas
débit. Le seul problème (pour le moment!), c'est la réception du
fichier texte avec VB6 et son émission en VB6 (le format doit être le
même que celui d'export d'Access). Mais ayant recupéré des
informations à droite et à gauche(merci à tous!), je devrai tôt ou
tard trouver la solution! Je vous tiens au courant! Un tuyau
supplémentaire sera accepté avec joie. Je ne peux travailler
sur l'application qu'en fin d'aprè-midi.
Michel
Merci jean-Marc!
Voici une description du projet global. Une association de loisirs
propose pendant les vacances d'été des journées de loisirs dans 5
centres. les inscriptions se font au siège et l'accueil dans les
centres. j'ai créé au siège une application avec Access 2003. Tous
les jours le siège envoie la liste des inscrits du lendemain : c'est
une table exportée en mode texte. Les centres renvoient la liste des
enfants présents. Les centres se partagent une connexion internet bas
débit. Le seul problème (pour le moment!), c'est la réception du
fichier texte avec VB6 et son émission en VB6 (le format doit être le
même que celui d'export d'Access). Mais ayant recupéré des
informations à droite et à gauche(merci à tous!), je devrai tôt ou
tard trouver la solution! Je vous tiens au courant! Un tuyau
supplémentaire sera accepté avec joie. Je ne peux travailler
sur l'application qu'en fin d'aprè-midi.
Michel
Merci jean-Marc!
Voici une description du projet global. Une association de loisirs
propose pendant les vacances d'été des journées de loisirs dans 5
centres. les inscriptions se font au siège et l'accueil dans les
centres. j'ai créé au siège une application avec Access 2003. Tous
les jours le siège envoie la liste des inscrits du lendemain : c'est
une table exportée en mode texte. Les centres renvoient la liste des
enfants présents. Les centres se partagent une connexion internet bas
débit. Le seul problème (pour le moment!), c'est la réception du
fichier texte avec VB6 et son émission en VB6 (le format doit être le
même que celui d'export d'Access). Mais ayant recupéré des
informations à droite et à gauche(merci à tous!), je devrai tôt ou
tard trouver la solution! Je vous tiens au courant! Un tuyau
supplémentaire sera accepté avec joie. Je ne peux travailler
sur l'application qu'en fin d'aprè-midi.
Michel
Michel Voirain wrote:Merci jean-Marc!
Voici une description du projet global. Une association de loisirs
propose pendant les vacances d'été des journées de loisirs dans 5
centres. les inscriptions se font au siège et l'accueil dans les
centres. j'ai créé au siège une application avec Access 2003. Tous
les jours le siège envoie la liste des inscrits du lendemain : c'est
une table exportée en mode texte. Les centres renvoient la liste des
enfants présents. Les centres se partagent une connexion internet bas
débit. Le seul problème (pour le moment!), c'est la réception du
fichier texte avec VB6 et son émission en VB6 (le format doit être le
même que celui d'export d'Access). Mais ayant recupéré des
informations à droite et à gauche(merci à tous!), je devrai tôt ou
tard trouver la solution! Je vous tiens au courant! Un tuyau
supplémentaire sera accepté avec joie. Je ne peux travailler
sur l'application qu'en fin d'aprè-midi.
Michel
OK, je vois.
Bien je pense qu'un design possible est le suivant.
Soit X l'appli dans les centres et Y l'appli au siège.
L'appli au siège doit disposer d'une fonction permettant d'exporter
les données en format texte dans un fichier.
Les applis centres doivent disposer d'une fonction d'import du fichier.
Elles doivent disposer d'une fonction d'export pour le siège.
Enfin les sièges doivent disposer d'une fonction d'import.
Les 2 fonctions d'export peuvent être les mêmes, voici comment.
Il suffit de créer une focntion Export2File, suffisament générique.
Elle prendra en paramètre:
- le nom de la base de données
- une requête
- un nom de fichier
- le séparateur à employer
Voici par exemple une fonction d'export générique (je l'ai fait en DAO
mais il est facile de faire pareil en ADO):
Private Function Export2File(ByVal dbName As String, _
ByVal szSQL As String, _
ByVal fileName As String, _
ByVal sep As String, _
ByRef errCode As Long, _
ByRef errDesc As String) As Boolean
Dim db As Database
Dim rs As Recordset
Dim i As Long
Dim f As Integer
On Error GoTo Export2File_ERR
f = FreeFile
Open fileName For Output As #f
Set db = OpenDatabase(dbName)
Set rs = db.OpenRecordset(szSQL)
If rs.EOF And rs.BOF Then
' rien à exporter
Else
rs.MoveFirst
While Not rs.EOF
For i = 0 To rs.Fields.Count - 1
If i <> rs.Fields.Count - 1 Then
Print #f, rs.Fields(i) & sep;
Else
Print #f, rs.Fields(i)
End If
Next i
rs.MoveNext
Wend
End If
rs.Close
db.Close
Close #f
Export2File = True
Export2File_END:
Exit Function
Export2File_ERR:
errCode = Err.Number
errDesc = Err.Description
Export2File = False
Resume Export2File_END
End Function
Et pour l'utiliser:
Dim ret As Boolean
Dim errCode As Long
Dim errDesc As String
ret = Export2File("c:dbcentre.mdb", "SELECT * FROM Inscrits",
"c:export.txt", ";", errCode, errDesc)
If ret Then
' tout va bien
Else
' probleme
MsgBox "Souci : errCode = " & errCode & " - " & errDesc
End If
Le fait d'avoir comme second paramètre du SQL permet de l'employer
aussi bien pour SIEGE -> centres que pour Centres -> SIEGE
L'import sera très similaire, en tout cas au niveau du principe.
Que ce soit au niveau centre ou au niveau siège, je te conseillerais bien
de faire les imports dans une table temporaire ("staging table"). Il sera
facile en suite d'utiliser les données de l'import pour mettre à jour
la ou les tables principales.
On pourra créer à l'avance les staging tables dans les bases siege et
centres;
ce n'est pas nécessaire de recréer la structure à chaque fois.
La procédure d'import pourra commencer par vider la table stagging avant
d'insérer
les données du fichier.
Voici un exemple d'implémentation générique pour ImportFromFile:
Note: la fonction suppose que la table 'TableName' existe et a une
structure
(notamment le nombre et le type de champs) compatible avec les données que
l'on insère.
Il est possible qu'il faille faire qq conversions si on utilise pas des
champs texte.
On pourra au besoin faire un petit fichier de paramètrage pour les
conversions en fonction
des champs, je te laisse régler les détails.
Private Function ImportFromFile(ByVal dbName As String, _
ByVal tableName As String, _
ByVal fileName As String, _
ByVal sep As String, _
ByRef ErrCode As Long, _
ByRef errDesc As String) As Boolean
Dim db As Database
Dim rs As Recordset
Dim i As Long
Dim f As Integer
Dim t() As String
Dim s As String
Dim n As Long
On Error GoTo ImportFromFile_ERR
f = FreeFile
Open fileName For Input As #f
Set db = OpenDatabase(dbName)
Set rs = db.OpenRecordset(tableName)
While Not EOF(f)
Line Input #f, s
t() = Split(s, sep)
n = 0
rs.AddNew
For i = LBound(t()) To UBound(t())
' c'est ici qu'il faut peut etre faire
' l'une ou l'autre conversion de type.
rs.Fields(n) = t(i)
n = n + 1
Next i
rs.Update
Wend
rs.Close
db.Close
Close #f
ImportFromFile = True
ImportFromFile_END:
Exit Function
ImportFromFile_ERR:
ErrCode = Err.Number
errDesc = Err.Description
ImportFromFile = False
Resume ImportFromFile_END
End Function
Voila, espérant que cela t'aide :-)
Note: j'ai testé l'export, ça fonctionne. PAs testé l'import, ça doit
aussi être
ok, au détails de conversions (si nécessaire) près.
Bonne prog !
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Michel Voirain wrote:
Merci jean-Marc!
Voici une description du projet global. Une association de loisirs
propose pendant les vacances d'été des journées de loisirs dans 5
centres. les inscriptions se font au siège et l'accueil dans les
centres. j'ai créé au siège une application avec Access 2003. Tous
les jours le siège envoie la liste des inscrits du lendemain : c'est
une table exportée en mode texte. Les centres renvoient la liste des
enfants présents. Les centres se partagent une connexion internet bas
débit. Le seul problème (pour le moment!), c'est la réception du
fichier texte avec VB6 et son émission en VB6 (le format doit être le
même que celui d'export d'Access). Mais ayant recupéré des
informations à droite et à gauche(merci à tous!), je devrai tôt ou
tard trouver la solution! Je vous tiens au courant! Un tuyau
supplémentaire sera accepté avec joie. Je ne peux travailler
sur l'application qu'en fin d'aprè-midi.
Michel
OK, je vois.
Bien je pense qu'un design possible est le suivant.
Soit X l'appli dans les centres et Y l'appli au siège.
L'appli au siège doit disposer d'une fonction permettant d'exporter
les données en format texte dans un fichier.
Les applis centres doivent disposer d'une fonction d'import du fichier.
Elles doivent disposer d'une fonction d'export pour le siège.
Enfin les sièges doivent disposer d'une fonction d'import.
Les 2 fonctions d'export peuvent être les mêmes, voici comment.
Il suffit de créer une focntion Export2File, suffisament générique.
Elle prendra en paramètre:
- le nom de la base de données
- une requête
- un nom de fichier
- le séparateur à employer
Voici par exemple une fonction d'export générique (je l'ai fait en DAO
mais il est facile de faire pareil en ADO):
Private Function Export2File(ByVal dbName As String, _
ByVal szSQL As String, _
ByVal fileName As String, _
ByVal sep As String, _
ByRef errCode As Long, _
ByRef errDesc As String) As Boolean
Dim db As Database
Dim rs As Recordset
Dim i As Long
Dim f As Integer
On Error GoTo Export2File_ERR
f = FreeFile
Open fileName For Output As #f
Set db = OpenDatabase(dbName)
Set rs = db.OpenRecordset(szSQL)
If rs.EOF And rs.BOF Then
' rien à exporter
Else
rs.MoveFirst
While Not rs.EOF
For i = 0 To rs.Fields.Count - 1
If i <> rs.Fields.Count - 1 Then
Print #f, rs.Fields(i) & sep;
Else
Print #f, rs.Fields(i)
End If
Next i
rs.MoveNext
Wend
End If
rs.Close
db.Close
Close #f
Export2File = True
Export2File_END:
Exit Function
Export2File_ERR:
errCode = Err.Number
errDesc = Err.Description
Export2File = False
Resume Export2File_END
End Function
Et pour l'utiliser:
Dim ret As Boolean
Dim errCode As Long
Dim errDesc As String
ret = Export2File("c:dbcentre.mdb", "SELECT * FROM Inscrits",
"c:export.txt", ";", errCode, errDesc)
If ret Then
' tout va bien
Else
' probleme
MsgBox "Souci : errCode = " & errCode & " - " & errDesc
End If
Le fait d'avoir comme second paramètre du SQL permet de l'employer
aussi bien pour SIEGE -> centres que pour Centres -> SIEGE
L'import sera très similaire, en tout cas au niveau du principe.
Que ce soit au niveau centre ou au niveau siège, je te conseillerais bien
de faire les imports dans une table temporaire ("staging table"). Il sera
facile en suite d'utiliser les données de l'import pour mettre à jour
la ou les tables principales.
On pourra créer à l'avance les staging tables dans les bases siege et
centres;
ce n'est pas nécessaire de recréer la structure à chaque fois.
La procédure d'import pourra commencer par vider la table stagging avant
d'insérer
les données du fichier.
Voici un exemple d'implémentation générique pour ImportFromFile:
Note: la fonction suppose que la table 'TableName' existe et a une
structure
(notamment le nombre et le type de champs) compatible avec les données que
l'on insère.
Il est possible qu'il faille faire qq conversions si on utilise pas des
champs texte.
On pourra au besoin faire un petit fichier de paramètrage pour les
conversions en fonction
des champs, je te laisse régler les détails.
Private Function ImportFromFile(ByVal dbName As String, _
ByVal tableName As String, _
ByVal fileName As String, _
ByVal sep As String, _
ByRef ErrCode As Long, _
ByRef errDesc As String) As Boolean
Dim db As Database
Dim rs As Recordset
Dim i As Long
Dim f As Integer
Dim t() As String
Dim s As String
Dim n As Long
On Error GoTo ImportFromFile_ERR
f = FreeFile
Open fileName For Input As #f
Set db = OpenDatabase(dbName)
Set rs = db.OpenRecordset(tableName)
While Not EOF(f)
Line Input #f, s
t() = Split(s, sep)
n = 0
rs.AddNew
For i = LBound(t()) To UBound(t())
' c'est ici qu'il faut peut etre faire
' l'une ou l'autre conversion de type.
rs.Fields(n) = t(i)
n = n + 1
Next i
rs.Update
Wend
rs.Close
db.Close
Close #f
ImportFromFile = True
ImportFromFile_END:
Exit Function
ImportFromFile_ERR:
ErrCode = Err.Number
errDesc = Err.Description
ImportFromFile = False
Resume ImportFromFile_END
End Function
Voila, espérant que cela t'aide :-)
Note: j'ai testé l'export, ça fonctionne. PAs testé l'import, ça doit
aussi être
ok, au détails de conversions (si nécessaire) près.
Bonne prog !
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ; _no_spam_jean_marc_n2@yahoo.fr
FAQ VB: http://faq.vb.free.fr/
Michel Voirain wrote:Merci jean-Marc!
Voici une description du projet global. Une association de loisirs
propose pendant les vacances d'été des journées de loisirs dans 5
centres. les inscriptions se font au siège et l'accueil dans les
centres. j'ai créé au siège une application avec Access 2003. Tous
les jours le siège envoie la liste des inscrits du lendemain : c'est
une table exportée en mode texte. Les centres renvoient la liste des
enfants présents. Les centres se partagent une connexion internet bas
débit. Le seul problème (pour le moment!), c'est la réception du
fichier texte avec VB6 et son émission en VB6 (le format doit être le
même que celui d'export d'Access). Mais ayant recupéré des
informations à droite et à gauche(merci à tous!), je devrai tôt ou
tard trouver la solution! Je vous tiens au courant! Un tuyau
supplémentaire sera accepté avec joie. Je ne peux travailler
sur l'application qu'en fin d'aprè-midi.
Michel
OK, je vois.
Bien je pense qu'un design possible est le suivant.
Soit X l'appli dans les centres et Y l'appli au siège.
L'appli au siège doit disposer d'une fonction permettant d'exporter
les données en format texte dans un fichier.
Les applis centres doivent disposer d'une fonction d'import du fichier.
Elles doivent disposer d'une fonction d'export pour le siège.
Enfin les sièges doivent disposer d'une fonction d'import.
Les 2 fonctions d'export peuvent être les mêmes, voici comment.
Il suffit de créer une focntion Export2File, suffisament générique.
Elle prendra en paramètre:
- le nom de la base de données
- une requête
- un nom de fichier
- le séparateur à employer
Voici par exemple une fonction d'export générique (je l'ai fait en DAO
mais il est facile de faire pareil en ADO):
Private Function Export2File(ByVal dbName As String, _
ByVal szSQL As String, _
ByVal fileName As String, _
ByVal sep As String, _
ByRef errCode As Long, _
ByRef errDesc As String) As Boolean
Dim db As Database
Dim rs As Recordset
Dim i As Long
Dim f As Integer
On Error GoTo Export2File_ERR
f = FreeFile
Open fileName For Output As #f
Set db = OpenDatabase(dbName)
Set rs = db.OpenRecordset(szSQL)
If rs.EOF And rs.BOF Then
' rien à exporter
Else
rs.MoveFirst
While Not rs.EOF
For i = 0 To rs.Fields.Count - 1
If i <> rs.Fields.Count - 1 Then
Print #f, rs.Fields(i) & sep;
Else
Print #f, rs.Fields(i)
End If
Next i
rs.MoveNext
Wend
End If
rs.Close
db.Close
Close #f
Export2File = True
Export2File_END:
Exit Function
Export2File_ERR:
errCode = Err.Number
errDesc = Err.Description
Export2File = False
Resume Export2File_END
End Function
Et pour l'utiliser:
Dim ret As Boolean
Dim errCode As Long
Dim errDesc As String
ret = Export2File("c:dbcentre.mdb", "SELECT * FROM Inscrits",
"c:export.txt", ";", errCode, errDesc)
If ret Then
' tout va bien
Else
' probleme
MsgBox "Souci : errCode = " & errCode & " - " & errDesc
End If
Le fait d'avoir comme second paramètre du SQL permet de l'employer
aussi bien pour SIEGE -> centres que pour Centres -> SIEGE
L'import sera très similaire, en tout cas au niveau du principe.
Que ce soit au niveau centre ou au niveau siège, je te conseillerais bien
de faire les imports dans une table temporaire ("staging table"). Il sera
facile en suite d'utiliser les données de l'import pour mettre à jour
la ou les tables principales.
On pourra créer à l'avance les staging tables dans les bases siege et
centres;
ce n'est pas nécessaire de recréer la structure à chaque fois.
La procédure d'import pourra commencer par vider la table stagging avant
d'insérer
les données du fichier.
Voici un exemple d'implémentation générique pour ImportFromFile:
Note: la fonction suppose que la table 'TableName' existe et a une
structure
(notamment le nombre et le type de champs) compatible avec les données que
l'on insère.
Il est possible qu'il faille faire qq conversions si on utilise pas des
champs texte.
On pourra au besoin faire un petit fichier de paramètrage pour les
conversions en fonction
des champs, je te laisse régler les détails.
Private Function ImportFromFile(ByVal dbName As String, _
ByVal tableName As String, _
ByVal fileName As String, _
ByVal sep As String, _
ByRef ErrCode As Long, _
ByRef errDesc As String) As Boolean
Dim db As Database
Dim rs As Recordset
Dim i As Long
Dim f As Integer
Dim t() As String
Dim s As String
Dim n As Long
On Error GoTo ImportFromFile_ERR
f = FreeFile
Open fileName For Input As #f
Set db = OpenDatabase(dbName)
Set rs = db.OpenRecordset(tableName)
While Not EOF(f)
Line Input #f, s
t() = Split(s, sep)
n = 0
rs.AddNew
For i = LBound(t()) To UBound(t())
' c'est ici qu'il faut peut etre faire
' l'une ou l'autre conversion de type.
rs.Fields(n) = t(i)
n = n + 1
Next i
rs.Update
Wend
rs.Close
db.Close
Close #f
ImportFromFile = True
ImportFromFile_END:
Exit Function
ImportFromFile_ERR:
ErrCode = Err.Number
errDesc = Err.Description
ImportFromFile = False
Resume ImportFromFile_END
End Function
Voila, espérant que cela t'aide :-)
Note: j'ai testé l'export, ça fonctionne. PAs testé l'import, ça doit
aussi être
ok, au détails de conversions (si nécessaire) près.
Bonne prog !
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Merci Jean-Marc! Le code pour exporter marche impec!
Le code import me pose problème là où tu ecris
' c'est ici qu'il faut peut etre faire l'une ou l'autre conversion de
type.je nes sais pas quoi écrire !!! Alors, je fais encore appel à toi!
Je cherche de mon coté, mais je suis lessivé par ma dure journée!
Line Input #f, s
t() = Split(s, sep)
n = 0
rs.AddNew
For i = LBound(t()) To UBound(t())
rs.Fields(n) = t(i)
n = n + 1
Next i
rs.Update
Wend
Merci Jean-Marc! Le code pour exporter marche impec!
Le code import me pose problème là où tu ecris
' c'est ici qu'il faut peut etre faire l'une ou l'autre conversion de
type.
je nes sais pas quoi écrire !!! Alors, je fais encore appel à toi!
Je cherche de mon coté, mais je suis lessivé par ma dure journée!
Line Input #f, s
t() = Split(s, sep)
n = 0
rs.AddNew
For i = LBound(t()) To UBound(t())
rs.Fields(n) = t(i)
n = n + 1
Next i
rs.Update
Wend
Merci Jean-Marc! Le code pour exporter marche impec!
Le code import me pose problème là où tu ecris
' c'est ici qu'il faut peut etre faire l'une ou l'autre conversion de
type.je nes sais pas quoi écrire !!! Alors, je fais encore appel à toi!
Je cherche de mon coté, mais je suis lessivé par ma dure journée!
Line Input #f, s
t() = Split(s, sep)
n = 0
rs.AddNew
For i = LBound(t()) To UBound(t())
rs.Fields(n) = t(i)
n = n + 1
Next i
rs.Update
Wend
je te fais ça en 2 minutes
je te fais ça en 2 minutes
je te fais ça en 2 minutes
Michel Voirain wrote:Merci Jean-Marc! Le code pour exporter marche impec!
Super!Le code import me pose problème là où tu ecris
' c'est ici qu'il faut peut etre faire l'une ou l'autre conversion de
type.je nes sais pas quoi écrire !!! Alors, je fais encore appel à toi!
Je cherche de mon coté, mais je suis lessivé par ma dure journée!
Ok, un mot d'explication.
Le fichier d'export est un fichier texte. Tu réupères les valeurs
dans un tableau de chaine.
C'est ok tant que tu fais des insertions dans des champs "Text".
Mais bon, je ne connais pas la structure de ta table.
Si tu essaies par exemple d'écrire du texte dans un champ
qui attend un nombre, ça n'ira pas.
Il est donc probable qu'en fonction de la structure de la table
dans laquelle tu veux importer les données, il faille au cas par
cas convetir les données.
Imaginons que ton fichier d'export comporte les champs suivants:
"Nom" (Texte) "Prenom" (Texte) et "Age" (Entier)
supposons donc que la table dans laquelle tu importes possède
la bonne structure:
nom : Text
prenom : text
age : entier
Quand tu lis une ligne de ton fichier d'export, tu récupères par exemple
Dupont;Jean;12
et ce sont toutes des chaines dans le tableau t()
Si on reprend la boucle d'insertion de ma fonction:
While Not EOF(f)Line Input #f, s
t() = Split(s, sep)
n = 0
rs.AddNew
For i = LBound(t()) To UBound(t())rs.Fields(n) = t(i)
n = n + 1
Next i
rs.Update
Wend
Pour les 2 premières valeurs, ça va être ok.
Par contre quand le programme sera rendu à insérer la
3eme valeur (donc n=2 ici), il va essayer de faire
rs.fields(n) = t(i)
Ca risque de ne pas marcher car t(i) est un string alors que
rs.fields(2) attend un entier.
Il est donc possible que tu doives écrire des truc du genre:
if n = 2 Then ' ici c'est un entier
rs.fields(n) = CInt(t(i))
Tu vois l'idée?
Si tu postes ici un extrait (2 ou 3 lignes) du fichier d'export
ainsi que la structure de ta table pour l'import, je te fais ça en 2
minutes :-)
Cordialement;
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Michel Voirain wrote:
Merci Jean-Marc! Le code pour exporter marche impec!
Super!
Le code import me pose problème là où tu ecris
' c'est ici qu'il faut peut etre faire l'une ou l'autre conversion de
type.
je nes sais pas quoi écrire !!! Alors, je fais encore appel à toi!
Je cherche de mon coté, mais je suis lessivé par ma dure journée!
Ok, un mot d'explication.
Le fichier d'export est un fichier texte. Tu réupères les valeurs
dans un tableau de chaine.
C'est ok tant que tu fais des insertions dans des champs "Text".
Mais bon, je ne connais pas la structure de ta table.
Si tu essaies par exemple d'écrire du texte dans un champ
qui attend un nombre, ça n'ira pas.
Il est donc probable qu'en fonction de la structure de la table
dans laquelle tu veux importer les données, il faille au cas par
cas convetir les données.
Imaginons que ton fichier d'export comporte les champs suivants:
"Nom" (Texte) "Prenom" (Texte) et "Age" (Entier)
supposons donc que la table dans laquelle tu importes possède
la bonne structure:
nom : Text
prenom : text
age : entier
Quand tu lis une ligne de ton fichier d'export, tu récupères par exemple
Dupont;Jean;12
et ce sont toutes des chaines dans le tableau t()
Si on reprend la boucle d'insertion de ma fonction:
While Not EOF(f)
Line Input #f, s
t() = Split(s, sep)
n = 0
rs.AddNew
For i = LBound(t()) To UBound(t())
rs.Fields(n) = t(i)
n = n + 1
Next i
rs.Update
Wend
Pour les 2 premières valeurs, ça va être ok.
Par contre quand le programme sera rendu à insérer la
3eme valeur (donc n=2 ici), il va essayer de faire
rs.fields(n) = t(i)
Ca risque de ne pas marcher car t(i) est un string alors que
rs.fields(2) attend un entier.
Il est donc possible que tu doives écrire des truc du genre:
if n = 2 Then ' ici c'est un entier
rs.fields(n) = CInt(t(i))
Tu vois l'idée?
Si tu postes ici un extrait (2 ou 3 lignes) du fichier d'export
ainsi que la structure de ta table pour l'import, je te fais ça en 2
minutes :-)
Cordialement;
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ; _no_spam_jean_marc_n2@yahoo.fr
FAQ VB: http://faq.vb.free.fr/
Michel Voirain wrote:Merci Jean-Marc! Le code pour exporter marche impec!
Super!Le code import me pose problème là où tu ecris
' c'est ici qu'il faut peut etre faire l'une ou l'autre conversion de
type.je nes sais pas quoi écrire !!! Alors, je fais encore appel à toi!
Je cherche de mon coté, mais je suis lessivé par ma dure journée!
Ok, un mot d'explication.
Le fichier d'export est un fichier texte. Tu réupères les valeurs
dans un tableau de chaine.
C'est ok tant que tu fais des insertions dans des champs "Text".
Mais bon, je ne connais pas la structure de ta table.
Si tu essaies par exemple d'écrire du texte dans un champ
qui attend un nombre, ça n'ira pas.
Il est donc probable qu'en fonction de la structure de la table
dans laquelle tu veux importer les données, il faille au cas par
cas convetir les données.
Imaginons que ton fichier d'export comporte les champs suivants:
"Nom" (Texte) "Prenom" (Texte) et "Age" (Entier)
supposons donc que la table dans laquelle tu importes possède
la bonne structure:
nom : Text
prenom : text
age : entier
Quand tu lis une ligne de ton fichier d'export, tu récupères par exemple
Dupont;Jean;12
et ce sont toutes des chaines dans le tableau t()
Si on reprend la boucle d'insertion de ma fonction:
While Not EOF(f)Line Input #f, s
t() = Split(s, sep)
n = 0
rs.AddNew
For i = LBound(t()) To UBound(t())rs.Fields(n) = t(i)
n = n + 1
Next i
rs.Update
Wend
Pour les 2 premières valeurs, ça va être ok.
Par contre quand le programme sera rendu à insérer la
3eme valeur (donc n=2 ici), il va essayer de faire
rs.fields(n) = t(i)
Ca risque de ne pas marcher car t(i) est un string alors que
rs.fields(2) attend un entier.
Il est donc possible que tu doives écrire des truc du genre:
if n = 2 Then ' ici c'est un entier
rs.fields(n) = CInt(t(i))
Tu vois l'idée?
Si tu postes ici un extrait (2 ou 3 lignes) du fichier d'export
ainsi que la structure de ta table pour l'import, je te fais ça en 2
minutes :-)
Cordialement;
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/