Страницы: 1
RSS
подключение к ftp с помощью vba
 
Добрый день, форумчане.
Пытаюсь подключиться к серверу FTP средствами vba.
Есть  данные:
Host: ftps.host_name.ch
Username:   user_n
Password:     password
Port : 990

Подключалась с помощью far, все в порядке.

При использовать api функций InternetOpen и InternetConnect(использовала http://www.codenet.ru/progr/vbasic/FTP.php
) первая отрабатывает. а вторая нет.
Не знаю. в чем может быть причина.
у меня сейчас только одна догадка: в FAR выбираю encryption: SSL/TLS Implicit encryption, а в функции InternetConnect такого параметра  вообще нет.
 
Как бы...Какое отношение к Excel имеет вопрос? Я не против, просто интересно.
Вы сослались на API, однако не утрудились хоть мельком упомянуть код, при помощи которого делаете это в Excel Вы(то, откуда взят код мы видим, но не факт, что Вы все сделали правильно). И что значит "не отрабатывает"? Просто не подключается, выдает ошибку, еще что?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Уважаемый The_Prist , поскольку код пишу на vba в excel, поэтому посчитала, что к excel имеет отношение.
код следующий


Код
Private Declare Function InternetOpen _
   Lib "wininet.dll" Alias "InternetOpenA" ( _
   ByVal sAgent As String, _
   ByVal nAccessType As Long, _
   ByVal sProxyName As String, _
   ByVal sProxyBypass As String, _
   ByVal nFlags As Long) As Long

Private Declare Function InternetConnect _
   Lib "wininet.dll" Alias "InternetConnectA" ( _
   ByVal hInternetSession As Long, _
   ByVal sServerName As String, _
   ByVal nServerPort As Integer, _
   ByVal sUserName As String, _
   ByVal sPassword As String, _
   ByVal nService As Long, _
   ByVal dwFlags As Long, _
   ByVal dwContext As Long) As Long
   
Private Declare Function FtpPutFile _
   Lib "wininet.dll" Alias "FtpPutFileA" ( _
   ByVal hFtpSession As Long, _
   ByVal lpszLocalFile As String, _
   ByVal lpszRemoteFile As String, _
   ByVal dwFlags As Long, _
   ByVal dwContext As Long) As Boolean
   
Private Declare Function FtpGetFile _
   Lib "wininet.dll" Alias "FtpGetFileA" ( _
   ByVal hFtpSession As Long, _
   ByVal lpszRemoteFile As String, _
   ByVal lpszNewFile As String, _
   ByVal fFailIfExists As Boolean, _
   ByVal dwFlagsAndAttributes As Long, _
   ByVal dwFlags As Long, _
   ByVal dwContext As Long) As Boolean
Public Sub for_ftp()

hINetSession = InternetOpen("MyFTPClient", 0, vbNullString, vbNullString, 0)

hSession = InternetConnect(hINetSession, "ftps.host_name.ch", _
   "990", "usr_n", "password", 1, 0, 0)

При этом переменная hSession  выдает 0.
 
попробуйте так:
Код
hSession = InternetConnect(hINetSession, "ftps.host_name.ch", _
 "990", "usr_n", "password", 3, 0, 0)
Потому как Ваш провайдер возможно через HTTP выполняет соединение с сервером FTP.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Помогло!Спасибо огромное!
Еще нужно отправить файл на ftp-сервер.Одна надежда на вас.

Пишу так :
t = FtpPutFile(hSession, "c:\temp\a.txt", "sh.txt", 1, 0).
Опять  переменная t принимает значение False.
 
Здесь точно не подскажу. Попробуйте указывать полный путь к папке на сервере, а не только имя.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Уже пробовала-не помогает(.
 
Там много всяких тонкостей. У папки с файлом должны быть права на чтение, запись, редактирование. Если для папки эти права не установлены - закачать файл не получится, т.к. ftp отклонит запрос. Задайте через htaccess или иным методом права для папки и вложенных файлов/папок 777 и попробуйте. Если не поможет - надо трассировать тип ошибок(включите переменную, отвечающую за ответ функции - последний аргумент, вроде бы)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Копирование с помощью FAR получается.
Значит доступы все есть.
Для поиска ошибок пробовала использовать функцию GetLastError:
Код
Declare Function GetLastError Lib "kernel32.dll" () As Long
t = FtpPutFile(hSession, "c:\temp\a.txt", "sh.txt", 1, 0)
ErrorCode = GetLastError()
Errorcode выдается 0
 
Коллеги, смогли решить проблему?
Страницы: 1
Читают тему
Наверх