2013-04-05 2 views
1

Я перечисляя в каталог передачи файлов с помощью следующей функции:данных Несовпадение типа в FtpFindFirstFile

Public Sub EnumFiles(hConnect As Long) 
Const cstrProcedure = "EnumFiles" 
Dim pData As WIN32_FIND_DATA, hFind As Long, lRet As Long 
Dim strSubCode As String 
Dim sql As String 
On Error GoTo HandleError 

sql = "INSERT INTO tblIncomingFiles (AvailableFile) Values ('" & pData.cFileName & "')" 
'get sub code to search with 
strSubCode = GetSubscriberCode 
'create a buffer 
pData.cFileName = String(MAX_PATH, 0) 
'find the first file 
hFind = FtpFindFirstFile(hConnect, "*" & strSubCode & "*", pData, 0, 0) 
'if there's no file, then exit sub 
If hFind = 0 Then Exit Sub 
'show the filename 
Debug.Print Left(pData.cFileName, InStr(1, pData.cFileName, String(1, 0), vbBinaryCompare) - 1) 
CurrentDb.Execute sql 
Do 
    'create a buffer 
    pData.cFileName = String(MAX_PATH, 0) 
    'find the next file 
    'lRet = FtpFindNextFile(hFind, pData.cFileName) 
    'if there's no next file, exit do 
    If lRet = 0 Then Exit Do 
    'show the filename 
    'Me.Print Left(pData.cFileName, InStr(1, pData.cFileName, String(1, 0), vbBinaryCompare) - 1) 
    CurrentDb.Execute sql 
Loop 
'close the search handle 


HandleExit: 

    Exit Sub 

HandleError: 
    ErrorHandle Err, Erl(), cstrModule & "." & cstrProcedure 
    Resume HandleExit 
End Sub 

Я получаю несоответствие типов данных (Error 13) в этой строке:

hFind = FtpFindFirstFile(hConnect, "*" & strSubCode & "*", pData, 0, 0) 

, и это выделяет pData. Я объявил pData как WIN32_FIND_DATA в верхней части функции, а WIN32_FIND_DATA объявлен как тип в этом модуле.

Public Declare Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileA" _ 
(ByVal hFtpSession As Long, ByVal sSearchFile As String, ByVal lpFindFileData As Long, _ 
ByVal lFlags As Long, ByVal dwContext As Long) As Long 

Private Type WIN32_FIND_DATA 
dwFileAttributes As Long 
ftCreationTime As FILETIME 
ftLastAccessTime As FILETIME 
ftLastWriteTime As FILETIME 
nFileSizeHigh As Long 
nFileSizeLow As Long 
dwReserved0 As Long 
dwReserved1 As Long 
cFileName As String * MAX_PATH 
cAlternate As String * 14 
End Type 

Любая идея, почему я могу получить эту ошибку?

+0

Пожалуйста, измените вопрос, чтобы показать 'type' декларацию для' WIN32_FIND_DATA' в этом модуле, и полное 'Declare Function FtpFindFirstFile' линии, а также. –

+0

@GordThompson Я добавил запрошенный код. Спасибо – Ryan

ответ

1

У меня есть рабочий пример, который я нашел here, а моя заявка FtpFindFirstFile немного отличается от вашей. Шахта

Private Declare Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileA" _ 
(ByVal hFtpSession As Long, ByVal lpszSearchFile As String, lpFindFileData As WIN32_FIND_DATA, _ 
ByVal dwFlags As Long, ByVal dwContent As Long) As Long 
+0

Спасибо! Я попробую и отправлю обратно! – Ryan

+0

Работал отлично! благодаря – Ryan

Смежные вопросы