【问题标题】:Microsoft Access 2010: Using data from a text box within an SQL update statementMicrosoft Access 2010:在 SQL 更新语句中使用文本框中的数据
【发布时间】:2012-03-08 23:48:54
【问题描述】:

是否可以在 SQL 语句中调用存储在表单文本框中的数据?我在按钮的 SaveRecord 操作之后的 RunSQL 操作中放置了以下语句。

UPDATE (Material 
INNER JOIN [Transaction] ON Material.Material = Transaction.Material)
INNER JOIN Ordered ON Transaction.[No] = Ordered.[No]
WHERE [Forms]![Order Material]![textBox_No] = Transaction.[No]
SET Material.[On Order] = [On Order]+[Amount];

我正在尝试提取存储在表单 (Order Material) 上的文本框 (textBox_No) 中的数据,并将其与更新查询提取的结果进行比较.如果 *textBox_No* 中的数据等于 TransactionNo 字段,我只想更新 On Order

当我点击我的按钮时,表单中输入的数据会正确更新,但是当 SQL 语句开始运行时,它会给我一个语法错误。

研究

我已尝试查找更新查询的语法指南,但 Microsoft 的网站仅提供了 the select query type 的示例。我确实找到了我认为对pulling data out of a text box on a form 很有帮助的指南,但是该指南适用于比我使用的更旧版本的 Microsoft Access。本指南是我得到[Forms]![Order Material]![textBox_No] 的地方,我试图用它来从文本框中提取数据。

【问题讨论】:

  • Here is a screenshot 我如何配置表单上的按钮。图片可能比我更好地解释了我是如何设置按钮的。

标签: sql ms-access where ms-access-2010


【解决方案1】:

WHERE 子句必须在 SET 子句之后。此外,“Transaction”是一个reserved word,所以它必须用方括号括起来。

UPDATE (Material 
INNER JOIN [Transaction] ON Material.Material = [Transaction].Material)
INNER JOIN Ordered ON [Transaction].[No] = Ordered.[No]
SET Material.[On Order] = [On Order]+[Amount]
WHERE [Forms]![Order Material]![textBox_No] = [Transaction].[No];

避免使用保留字命名表和字段是一种很好的做法(而且通常只会让生活更轻松)。有关保留字的完整列表,请参阅上面的链接。

【讨论】:

  • 奇怪,当我将 Transaction 设置为我的表名时,Access 没有抱怨。不过,我以后会记住保留字列表。非常感谢您的帮助!
  • 不,Access 不会抱怨。您可以为您的表命名任何您喜欢的名称:SelectFromWhereOrder By 等。但是一旦您开始尝试在查询和其他地方使用这些名称,Access 就会抱怨。到处都是方括号,你会发疯的。
  • @mwolfe02 Access以前不抱怨,2010年开始抱怨。如果您尝试使用name,您会收到一条消息,但不是transaction
  • 带有transaction字样的Access查询没有问题:Set rs = CurrentDb.OpenRecordset("SELECT ID, Transaction FROM Transaction")
  • @Remou:好消息。我还没有使用 Access 2010;警告似乎是一个适当的改进。
猜你喜欢
  • 2014-10-04
  • 2011-03-04
  • 2019-12-12
  • 2011-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-02
  • 1970-01-01
相关资源
最近更新 更多