2017-01-20 7 views
0

Я написал код, который импортирует файлы excel в таблицу доступа. Когда каждый файл импортируется, имя файла записывается и сохраняется в отдельной таблице с именем «FilesDownloaded».Поиск значения в таблице доступа VBA

Я бы хотел добавить код vba, который перед импортом файла, который он проверит, чтобы проверить, сохранено ли имя файла (myfile) в таблице «FilesDownloaded». Это предотвратит импорт одного и того же файла в два раза.

Код:

Function Impo_allExcel() 
Dim myfile 
Dim mypath 
Dim que As Byte 
Dim rs As DAO.Recordset 


que = MsgBox("This proces will import all excel items with the .xls in the folder C:\MasterCard. Please make sure that only the files you want imported are located in this folder. Do you wish to proceed?", vbYesNo + vbQuestion) 
If que = 7 Then 
    Exit Function 
Else 
    'do nothing and proceed with code 
End If 

DoCmd.SetWarnings (False) 

DoCmd.RunSQL "DELETE * FROM tblMaster_Import;" 


MsgBox "Please WAIT while we process this request" 



mypath = "C:\Master\" 
ChDir (mypath) 
myfile = Dir(mypath & "*.xls") 



Do While myfile <> "" 
    If myfile Like "*.xls" Then 
    'this will import ALL the excel files 
    '(one at a time, but automatically) in this folder. 
    ' Make sure that's what you want. 
    'DoCmd.TransferSpreadsheet acImport, 8, "tblMasterCard_Import", mypath & myfile 
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "tblMaster_Import", mypath & myfile, 1 

    Set rs = CurrentDb.OpenRecordset("FilesDownloaded") 
    rs.AddNew 
    rs.Fields("Filename").Value = myfile 
    rs.Update 
    rs.Close 
    Set rs = Nothing 

    End If 
    myfile = Dir() 
Loop 




'append data to tblAll (risk of duplicates at this point) 
DoCmd.RunSQL "INSERT INTO tblAll SELECT tblMaster_Import.* FROM tblMaster_Import;" 

DoCmd.OpenQuery "qryUpdateDateField", acViewNormal 
''this code will apend to an existing table and runs the risk of doubling data. 
DoCmd.SetWarnings (True) 

MsgBox "Your upload is complete" 

End Function 
+0

Имеет ли файл, который вы импортируете, ID? Возможно, вы можете установить первичный ключ в таблице, чтобы избежать дублирования? –

ответ

0

Возможное решение сделать запрос, который дает вам результат строк в таблице FilesDownloaded, с условием, что имя равно файлом. Что-то вроде этого:

countString = "SELECT COUNT(*) FROM [FilesDownloaded] WHERE [NAMEOFCOL] = " & myFile 

Затем запустите запрос, и если результат больше 1, вы, очевидно, имеете его.

+0

Я ввел код как: Do While myfile <> "" countString = "Select Count (*) From [FilesDownloaded] Где [Filename] = myfile" Если myfile Like "* .xls" И countString = 0 Затем Im получает сообщение об ошибке несоответствия. Помогите? – Mwes

+0

Вы должны запустить запрос и получить результат. Взгляните http://stackoverflow.com/questions/23992226/how-to-save-the-result-of-a-sql-query-into-a-variable-in-vba и https://msdn.microsoft .com/EN-US/библиотека/офис/ff194626.aspx – Vityata