Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Export FTP a partir de fichiers créés dans le code

2 réponses
Avatar
yann.millerioux
Bonjour je fais une export de fichier txt vers un système mainframe en
FTP.
le nom de l'utilisateur et son mot de passe sont saisis dans un
formulaire, et vont alimenter un fichier txt de commandes ftp.
En fait dans mon code vba, je crée le fichier .bat et le fichier txt
de commandes ftp, et je les supprime à la fin afin que le user et mot
de passe ne soient pas visibles.
Et ben, ça marche pas (sauf en debug), en fait c'est comme si mon
fichier .bat n'existait pas, il me dit qu'il n'y a pas de commande.
Alors que si je ne supprime pas le fichier en fin de macro, la fois
suivante ça fonctionne.
J'ai pensé que c'était un problème de lock des fichiers, alors j'ai
déporté la création des fichiers dans une fonction annexe, mais ça ne
change rien...
Je ne sais pas si c'est bien clair, mais si quelqu'un a une idée...
Merci
Mon bout de code :


Function Export_fichier()

' Form de saisie user et MdP
DoCmd.OpenForm stDocName, acNormal, , , , acDialog

ChDir (Chemin)
' Appel fonction de création fichiers bat et txt
Constit_Fichiers

ExportBatch = "cmd.exe /k " & Chemin & Batch
RetBatch = Shell(ExportBatch, vbMinimizedNoFocus)

Do While Dir("Temp", vbDirectory) <> vbNullString
Loop

Kill Chemin & Batch
Kill Chemin & FTPCMD
DoCmd.Echo True

End Function


Function Constit_Fichiers()

Open Chemin & Batch For Output Lock Write As #1
Print #1, "cls"
Print #1, "mkdir Temp"
Print #1, "cd " & Chemin
Print #1, "@FTP -i -d -s:" & FTPCMD
Print #1, "rd Temp"
Close #1

Open Chemin & FTPCMD For Output Lock Write As #1
Print #1, "open"
Print #1, "site.prod.fr"
Print #1, User
Print #1, Pass
Print #1, "hash"
Print #1, "put ETAT_fichier.txt 'FICHIER.MAINFRAME'"
Print #1, "bye"
Close #1

End Function

2 réponses

Avatar
Anor
Bonjour

Je te suggère de te pencher sur les API pour effectuer tes actions FTP :

Fais une recherche avec les mots clés suivants pour des exemples de code :
InternetOpen+InternetConnect+FtpPutFile+InternetCloseHandle

par exemple :
http://groups.google.com/groups?meta=&hl=fr&ie=ISO-8859-1&scoring=d&numP&cat=&language=&q=&sitesearch=&domains=&as_ugroup=*access*+*vb*+*database*&query=InternetOpen%2BInternetConnect%2BFtpPutFile%2BInternetCloseHandle

--
à+
Arnaud
--------------------------------------------------
Avant toute chose : http://users.skynet.be/mpfa/
Access Memorandum - http://memoaccess.free.fr
## Réponses souhaitées sur ce forum, merci. ##
--------------------------------------------------

karghyl a confié :
| Bonjour je fais une export de fichier txt vers un système mainframe en
| FTP.
| le nom de l'utilisateur et son mot de passe sont saisis dans un
| formulaire, et vont alimenter un fichier txt de commandes ftp.
| En fait dans mon code vba, je crée le fichier .bat et le fichier txt
| de commandes ftp, et je les supprime à la fin afin que le user et mot
| de passe ne soient pas visibles.
| Et ben, ça marche pas (sauf en debug), en fait c'est comme si mon
| fichier .bat n'existait pas, il me dit qu'il n'y a pas de commande.
| Alors que si je ne supprime pas le fichier en fin de macro, la fois
| suivante ça fonctionne.
| J'ai pensé que c'était un problème de lock des fichiers, alors j'ai
| déporté la création des fichiers dans une fonction annexe, mais ça ne
| change rien...
| Je ne sais pas si c'est bien clair, mais si quelqu'un a une idée...
| Merci
| Mon bout de code :
|
|
| Function Export_fichier()
|
| ' Form de saisie user et MdP
| DoCmd.OpenForm stDocName, acNormal, , , , acDialog
|
| ChDir (Chemin)
| ' Appel fonction de création fichiers bat et txt
| Constit_Fichiers
|
| ExportBatch = "cmd.exe /k " & Chemin & Batch
| RetBatch = Shell(ExportBatch, vbMinimizedNoFocus)
|
| Do While Dir("Temp", vbDirectory) <> vbNullString
| Loop
|
| Kill Chemin & Batch
| Kill Chemin & FTPCMD
| DoCmd.Echo True
|
| End Function
|
|
| Function Constit_Fichiers()
|
| Open Chemin & Batch For Output Lock Write As #1
| Print #1, "cls"
| Print #1, "mkdir Temp"
| Print #1, "cd " & Chemin
| Print #1, "@FTP -i -d -s:" & FTPCMD
| Print #1, "rd Temp"
| Close #1
|
| Open Chemin & FTPCMD For Output Lock Write As #1
| Print #1, "open"
| Print #1, "site.prod.fr"
| Print #1, User
| Print #1, Pass
| Print #1, "hash"
| Print #1, "put ETAT_fichier.txt 'FICHIER.MAINFRAME'"
| Print #1, "bye"
| Close #1
|
| End Function
Avatar
Karghyl
-----Message d'origine-----
Bonjour

Je te suggère de te pencher sur les API pour effectuer
tes actions FTP :


Fais une recherche avec les mots clés suivants pour des
exemples de code :


InternetOpen+InternetConnect+FtpPutFile+InternetCloseHandle


par exemple :
http://groups.google.com/groups?meta=&hl=fr&ie=ISO-8859-
1&scoring=d&numP&cat=&language=&q=&sitesearch=&domains=&a

s_ugroup=*access*+*vb*+*database*&query=InternetOpen%
2BInternetConnect%2BFtpPutFile%2BInternetCloseHandle

--
à+
Arnaud


Salut,
merci de ta réponse. En fait j'avais déjà vu des réponses
avec des API, mais je n'avais pas trop osé me lancer
dedans...
Avant que j'ose, 2 ou 3 petites précisions stp :
- est ce que ça marche aussi pour des envois ftp vers un
gros système IBM (OS390), ou c'est seulement pour du ftp
sur le net (ma question est peut être bête...) ?
- est-ce qu'il y a besoin d'avoir un truc particulier
installé pour que l'API fonctionne ? Là où je bosse ils
font des install bizarre où tout n'est pas installé, et
cette base va fonctionner sur un poste utilisateur, où
tout n'est pas installé non plus.

Merci