Chuck
Chuck

Reputation: 1226

Keeping multiple file names while importing via transfertext

Private Sub Command38_Click()
    Dim f As Object
    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim strUpdate As String
    Dim strFile As String
    Dim strFolder As String
    Dim varItem As Variant
    Dim P As String
    Dim DeleteEverything As String

        DoCmd.SetWarnings False
        DeleteEverything = "DELETE * FROM [ucppltr]"
        DoCmd.RunSQL DeleteEverything
    Set f = Application.FileDialog(3)
    f.AllowMultiSelect = True
    f.InitialFileName = "S:\Formware\outfile\ucppt12\Storage"
    f.Filters.Clear
    f.Filters.Add " Armored TXT Files", "*.asc"
        If f.Show Then
        For Each varItem In f.SelectedItems
            strFile = Dir(varItem)
            strFolder = Left(varItem, Len(varItem) - Len(strFile))
            P = strFolder & strFile
            DoCmd.TransferText acImportDelim, "UCPP Import Specification", "ucppltr", P, False
        Next
        End If
    strUpdate = "PARAMETERS fileName Text;" & vbCrLf & _
    "UPDATE ucppltr" & vbCrLf & _
    "Set [File Name] = fileName"
    Debug.Print strUpdate
    Set db = CurrentDb
    Set qdf = db.CreateQueryDef("", strUpdate)
    qdf.Parameters("fileName") = strFile
    qdf.Execute dbFailOnError
    Set qdf = Nothing
    Set db = Nothing
    Set f = Nothing

    MsgBox DCount("*", "ucppltr") & " Records were imported"
End Sub

As you can see from the code on import I want to store the file name and while it does work it doesn't work exactly how I need it to. When we do work for this client it is 5 files ate a time once a week so I would like it to save all 5 file names however it only saves the last one it imports. My question, is there a way to save each file name to each one ( I doubt that) or can I save all 5 file names to all the records I import instead of just the last file name?

I always have the option of only allowing a single import and making them import and append the table 5 times I just wanted to check to see if there is a more efficent way before doing so.

Thanks in advance for any help in this matter!

Upvotes: 0

Views: 418

Answers (1)

Luke Wage
Luke Wage

Reputation: 703

There is a problem in your logic. Inside the loop, strFile holds the current file name. So after your loop is finished, only the current (=last) file name is passed on to the query.

I made some changes, so the filenames are now stored in the new variable strFileList, delimited by a ";". Please check, if this is a feasible solution.

Private Sub Command38_Click()
Dim f As Object
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim strUpdate As String
Dim strFile As String
Dim strFolder As String
Dim varItem As Variant
Dim P As String
Dim DeleteEverything As String

' Variable to hold file list
Dim strFileList As String

    DoCmd.SetWarnings False
    DeleteEverything = "DELETE * FROM [ucppltr]"
    DoCmd.RunSQL DeleteEverything
Set f = Application.FileDialog(3)
f.AllowMultiSelect = True
f.InitialFileName = "S:\Formware\outfile\ucppt12\Storage"
f.Filters.Clear
f.Filters.Add " Armored TXT Files", "*.asc"
    If f.Show Then
    For Each varItem In f.SelectedItems
        strFile = Dir(varItem)
        strFolder = Left(varItem, Len(varItem) - Len(strFile))
        P = strFolder & strFile
        DoCmd.TransferText acImportDelim, "UCPP Import Specification", "ucppltr", P, False

        'Add file name to file list
        strFileList = strFileList & strFile & ";"
    Next
    End If
strUpdate = "PARAMETERS fileName Text;" & vbCrLf & _
"UPDATE ucppltr" & vbCrLf & _
"Set [File Name] = fileName"
Debug.Print strUpdate
Set db = CurrentDb
Set qdf = db.CreateQueryDef("", strUpdate)

'Pass file list to query
qdf.Parameters("fileName") = strFileList

qdf.Execute dbFailOnError
Set qdf = Nothing
Set db = Nothing
Set f = Nothing

MsgBox DCount("*", "ucppltr") & " Records were imported"
End Sub

Upvotes: 1

Related Questions