【问题标题】:Update a table using variable使用变量更新表
【发布时间】:2020-04-29 19:08:43
【问题描述】:

我对使用 VBA 还是很陌生。我有一个访问数据库,用户单击一个按钮,这将上传多个文件。

上传的文件是临时表并获取添加到其中的字段等。一旦对临时表进行了更新,记录就会转移到永久表中。

它一次上传多个文件,因此当文件上传到表时,它们会输入到名为“temp_filename”的表中,每个文件都有自己的表。

下面是我的代码。对于 alter table 语句,我想上传刚刚创建的临时表。因为每次我尝试将其分配给变量时,该表都会被命名为不同的名称。我尝试了不同的语法等,但是我不断收到错误。谁能看到我哪里出错了?如有任何帮助,我们将不胜感激。

Public Sub Import()

Dim oFileDiag As Office.FileDialog
Dim path As String: path = ""
Dim oFSO As New FileSystemObject
Dim FileSelected As Variant
Dim FileNameSelected As Variant
Dim UpdatedTableName As Variant

Set oFileDiag = Application.FileDialog(msoFileDialogFilePicker) ''Picks file to import
oFileDiag.AllowMultiSelect = True ''Allows multiple files to be selected
oFileDiag.Title = "Please select the reports to upload"
oFileDiag.Filters.Clear
oFileDiag.Filters.Add "Excel Spreadsheets", "*.xlsx, *.xls" ''Only allows xlsx and xls file types to upload

If oFileDiag.Show Then
    For Each FileSelected In oFileDiag.SelectedItems

        FileNameSelected = oFSO.GetFileName(FileSelected)
        UpdatedTableName = "temp_" & FileNameSelected

        If oFileDiag.SelectedItems.Count > 0 Then path = oFileDiag.SelectedItems(1)
            If Len(path) > 0 Then
            DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, UpdatedTableName, path, 1

            DoCmd.RunSQL "ALTER TABLE UpdatedTableName ADD COLUMN [Date_of_Report] TEXT(100);"

            MsgBox "The " & FileNameSelected & " file has been uploaded"

        Else
            MsgBox "File not found"
        End If
    Next
End If

【问题讨论】:

  • 看起来DoCmd.RunSQL "ALTER TABLE UpdatedTableName ADD COLUMN [Date_of_Report] TEXT(100);"UpdatedTableName 视为不是变量,而是字面意思。我不熟悉 Access VBA,但它不应该像字符串一样连接吗? DoCmd.RunSQL "ALTER TABLE " & UpdatedTableName & " ADD COLUMN [Date_of_Report] TEXT(100);" 也许您可以完全删除 UpdatedTableName 变量,而是写:DoCmd.RunSQL "ALTER TABLE temp_" & FileNameSelected & " ADD COLUMN [Date_of_Report] TEXT(100);"
  • 感谢@ionizing,我已经尝试了以下两行,但仍然出现运行时错误 3293 DoCmd.RunSQL "ALTER TABLE" & UpdatedTableName & " ADD COLUMN [Date_of_Report] TEXT(100);" DoCmd.RunSQL "ALTER TABLE ' " & UpdatedTableName & " ' ADD COLUMN [Date_of_Report] TEXT(100);"
  • 我对 Access 不够熟悉,无法为您提供帮助,抱歉。听起来 Access 正在崩溃,可能在 DoCmd.TransferSpreadsheet。您可以在每个DoCmd 之后添加debug.print "whatever" 命令,以查看您的代码在崩溃之前能走多远。在即时窗口中查看debug.print的输出,在编辑器中是Ctrl+G。

标签: vba ms-access


【解决方案1】:

您需要将表名连接到 SQL 字符串中:

    DoCmd.RunSQL "ALTER TABLE [" & UpdatedTableName & "] ADD COLUMN [Date_of_Report] TEXT(100);"

我使用方括号以防表名中有空格。

问候,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    相关资源
    最近更新 更多