2013-04-12 23 views
1

无法正常工作。使用带变量的runSQL将文件列表循环添加到表格

我正在循环一个对话框生成的文件列表并插入到表中。我无法让变量正常工作。查询表达式中的语法错误(缺少运算符)。

Dim SQLCode As String 
Dim varFile As Variant 

Access.DoCmd.OpenQuery ("ClearFileList") 

Set fDialog = Application.FileDialog(1) 
With fDialog 
    .AllowMultiSelect = True 
    .Title = "Select One or More Files" 
    .Filters.Clear 
    .Filters.Add "Lineviewer Files", "*.CSV" 

    If .show = True Then 
     For Each varFile In .SelectedItems 
      SQLCode = "INSERT INTO Filelist ([FileName]) VALUES (" & varFile & ");" 
      Access.DoCmd.RunSQL SQLCode 

     Next 
    End If 
End With 

感谢

回答

0

领域[FileName]和文件名可变varFile都应该是文本数据类型。因此,当您构建SQL语句时,请在varFile的值附近添加引号。这样数据库引擎会将该值识别为文本。

SQLCode = "INSERT INTO Filelist ([FileName]) VALUES ('" & varFile & "');" 

作为一个方面来看,你不需要建立和执行INSERT语句给每个选定的文件。您可以使用dbAppendOnly选项将目标表作为DAO记录集打开。

Dim db As DAO.Database 
Dim rs As DAO.Recordset 
Set db = CurrentDb 
Set rs = db.OpenRecordset("Filelist", dbOpenTable, dbAppendOnly) 

然后添加一个行的每个选择的项目。

For Each varFile In .SelectedItems 
    rs.AddNew 
    rs!FileName = varFile 
    rs.Update 
Next 

这种方法可能会更快,尽管可能会发现其中的差异。但它整齐地避免引用选定的项目,并且如果您的FileName是备忘录数据类型,将容纳大于255个字符的文件路径名称。

+0

我刚刚尝试过“”“”“”,它工作。 '''''更好,谢谢 –

+0

不客气。我修改了答案以包含我将使用的方法。看看你的想法。 – HansUp

+0

看起来不错,我会用你的建议。 –