【问题标题】:MS-Access Too Few Parameters. Expected 3MS-Access 参数太少。预计 3
【发布时间】:2020-10-07 18:57:00
【问题描述】:

我导入一个 csv 文件,用于更新现有表数据或在匹配数据不存在时插入它。这工作了一段时间,然后我添加了三个字段(后退、前进、退出——以响应基础数据的变化),现在我遇到了错误。

代码抛出错误:

    strTest = "update tblStories INNER JOIN tblTemp2 ON format(tblTemp2.[Time Posted],'MM/dd/yyyy hh:mm:ss') = format(tblStories.[Time Posted] ,'MM/dd/yyyy hh:mm:ss') set tblStories.[Completion Rate]=tblTemp2.[Completion Rate],tblStories.[Avg Views/User]=tblTemp2.[Avg Views/User],tblStories.[Impressions]=tblTemp2.[Impressions],tblStories.[Reach]=tblTemp2.[Reach],tblStories.[Reply Count]=tblTemp2.[Reply Count],tblStories.[Back]=tblTemp2.[Back],tblStories.[Forward]=tblTemp2.[Forward],tblStories.[Exit]=tblTemp2.[Exit]"
    ExecuteSQL (strTest)
    strTest = "insert into tblStories ([Image URL],[Completion Rate],[Avg Views/User],[Impressions],[Reach],[Reply Count],[Back],[Forward],[Exit],[Time Posted]) SELECT tblTemp2.[Image URL],tblTemp2.[Completion Rate],tblTemp2.[Avg Views/User],tblTemp2.[Impressions],tblTemp2.[Reach],tblTemp2.[Reply Count],tblTemp2.[Back],tblTemp2.[Forward],tblTemp2.[Exit],tblTemp2.[Time Posted] FROM tblTemp2 LEFT JOIN tblStories ON  format(tblTemp2.[Time Posted],'MM/dd/yyyy hh:mm:ss') = format(tblStories.[Time Posted] ,'MM/dd/yyyy hh:mm:ss')  WHERE (((tblStories.[Time Posted]) Is Null))"
    ExecuteSQL (strTest)

当我中断打印并确认时,我得到以下信息:

    update tblStories INNER JOIN tblTemp2 ON format(tblTemp2.[Time Posted],'MM/dd/yyyy hh:mm:ss') = format(tblStories.[Time Posted] ,'MM/dd/yyyy hh:mm:ss') set tblStories.[Completion Rate]=tblTemp2.[Completion Rate],tblStories.[Avg Views/User]=tblTemp2.[Avg Views/User],tblStories.[Impressions]=tblTemp2.[Impressions],tblStories.[Reach]=tblTemp2.[Reach],tblStories.[Reply Count]=tblTemp2.[Reply Count], tblStories.[Back]=tblTemp2.[Back], tblStories.[Forward]=tblTemp2.[Forward], tblStories.[Exit]=tblTemp2.[Exit]

想法?

【问题讨论】:

  • 任一表中[Time Posted]字段的数据类型是什么?短文本或日期/时间?

标签: sql vba ms-access


【解决方案1】:

本质上,这个错误的翻译意味着三个未知的列。对 MS Access 引擎的查询中的任何外来标识符都被视为一个参数,不会在您的操作调用中使用。如所写,三个 new 列([Back][Forward][Exit])必须存在于两个表中(而不仅仅是一个)。错误表明其中一个表缺少这些列。

请记住,SQL 中的数据操作语言 (DML) 查询不会调整表的结构。所以UPDATEINSERT 不会添加新列。这些查询连同DELETE 仅调整(添加/编辑/删除)数据行。另一方面,SQL 中的数据定义语言 (DDL) 查询确实会调整表的结构。但这些是不同的命令(CREATEALTERDROP)。

总之,在尝试运行这些查询之前,请确保预先存在所有指定的列。最后,如果[Time Posted] 是日期字段,则不需要Format()。下面以更好的格式说明(在 Access 查询中不包括 cmets)。

UPDATE tblStories 
INNER JOIN tblTemp2 
   ON tblTemp2.[Time Posted] = tblStories.[Time Posted]

SET  tblStories.[Completion Rate] = tblTemp2.[Completion Rate]
   , tblStories.[Avg Views/User] = tblTemp2.[Avg Views/User]
   , tblStories.[Impressions] = tblTemp2.[Impressions]
   , tblStories.[Reach] = tblTemp2.[Reach]
   , tblStories.[Reply Count] = tblTemp2.[Reply Count]
   , tblStories.[Back] = tblTemp2.[Back]                   -- COLUMNS MUST EXIST IN BOTH
   , tblStories.[Forward] = tblTemp2.[Forward]             -- COLUMNS MUST EXIST IN BOTH
   , tblStories.[Exit] = tblTemp2.[Exit]                   -- COLUMNS MUST EXIST IN BOTH
INSERT INTO tblStories ([Image URL], [Completion Rate], [Avg Views/User],
                        [Impressions],[Reach], [Reply Count], 
                        [Back], [Forward], [Exit], [Time Posted])  -- COLUMNS MUST EXIST IN TABLE
SELECT tblTemp2.[Image URL]
     , tblTemp2.[Completion Rate]
     , tblTemp2.[Avg Views/User]
     , tblTemp2.[Impressions]
     , tblTemp2.[Reach]
     , tblTemp2.[Reply Count]
     , tblTemp2.[Back]                                     -- COLUMN MUST EXIST IN TABLE
     , tblTemp2.[Forward]                                  -- COLUMN MUST EXIST IN TABLE
     , tblTemp2.[Exit]                                     -- COLUMN MUST EXIST IN TABLE
     , tblTemp2.[Time Posted] 

FROM tblTemp2 
LEFT JOIN tblStories 
     ON tblTemp2.[Time Posted] = tblStories.[Time Posted] 
WHERE tblStories.[Time Posted] IS NULL

如果[Time Posted] 是一个短文本字段,只需运行CDate 即可加入:

ON CDate(tblTemp2.[Time Posted]) = CDate(tblStories.[Time Posted])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多