为什么不能将字段名称用作访问参数查询中的参数?
Why can't I use the field name as a parameter in an Access parameter query?
今天对一个应用程序进行了一些 insert/update 查询,得到了我没有预料到的结果。
查询
我的插入查询与此类似:
PARAMETERS nm TEXT(10), st TEXT(2);
INSERT INTO park(pname, pstate)
VALUES([nm],[st]);
他们的同伴更新是这样的:
PARAMETERS id LONG, nm TEXT(10), st TEXT(2);
UPDATE park
SET
pname = [nm], pstate = [st]
WHERE
ID = [id];
他们正在更新的 table 与此类似:
park
ID LONG | pname TEXT(10) | pstate TEXT(2)
意外结果
通过编写查询,我通过 运行 针对数据库对每个查询进行了测试,并为各种参数提供了测试值。在插入查询之后,我将通过更新新插入的记录来测试更新。
在大多数情况下,table 是空的,因此更新只会更新就地的单个记录。
但是,一旦我运行更新了先前填充的table,我发现查询正在尝试更新 ALL 条记录,而不仅仅是通过参数提供 ID 的记录。
问题是为什么??
问题
虽然 ID
肯定是 park
table 中的一个字段,但使用 id
作为参数实质上是在 WHERE
子句中说明以下内容:
WHERE ID = id;
或
WHERE ID = ID;
因为 ID
总是 等于它自己,UPDATE
试图更新 ALL 记录而不是只有具有提供的 ID 的预期记录。
解决方案
为了解决这个问题,我简单地使用了 table 的第一个和最后一个字母,在 id
之前更新了每个案例,我正在更新由其 ID
标识的记录.所以工作代码 - 只更新识别的记录 - 是:
PARAMETERS pkid LONG, nm TEXT(10), st TEXT(2);
UPDATE park
SET
pname = [nm], pstate = [st]
WHERE
ID = [pkid];
显然,我在编写查询时并没有密切注意——虽然我对其他参数使用了不同的名称,但当涉及到 ID
时,我并没有这样做更新查询。
底线
无论何时使用参数化查询,请确保您的参数名称不要与您的table的字段名称匹配。
这样做可以避免上述问题以及其他相关问题。
您还需要避免在 table、字段和参数名称中使用保留字。
希望这可以帮助某人在更新记录时避免可能令人讨厌的意外——或者试图弄清楚为什么他们的参数查询似乎不起作用。
今天对一个应用程序进行了一些 insert/update 查询,得到了我没有预料到的结果。
查询
我的插入查询与此类似:
PARAMETERS nm TEXT(10), st TEXT(2);
INSERT INTO park(pname, pstate)
VALUES([nm],[st]);
他们的同伴更新是这样的:
PARAMETERS id LONG, nm TEXT(10), st TEXT(2);
UPDATE park
SET
pname = [nm], pstate = [st]
WHERE
ID = [id];
他们正在更新的 table 与此类似:
park
ID LONG | pname TEXT(10) | pstate TEXT(2)
意外结果
通过编写查询,我通过 运行 针对数据库对每个查询进行了测试,并为各种参数提供了测试值。在插入查询之后,我将通过更新新插入的记录来测试更新。
在大多数情况下,table 是空的,因此更新只会更新就地的单个记录。
但是,一旦我运行更新了先前填充的table,我发现查询正在尝试更新 ALL 条记录,而不仅仅是通过参数提供 ID 的记录。
问题是为什么??
问题
虽然 ID
肯定是 park
table 中的一个字段,但使用 id
作为参数实质上是在 WHERE
子句中说明以下内容:
WHERE ID = id;
或
WHERE ID = ID;
因为 ID
总是 等于它自己,UPDATE
试图更新 ALL 记录而不是只有具有提供的 ID 的预期记录。
解决方案
为了解决这个问题,我简单地使用了 table 的第一个和最后一个字母,在 id
之前更新了每个案例,我正在更新由其 ID
标识的记录.所以工作代码 - 只更新识别的记录 - 是:
PARAMETERS pkid LONG, nm TEXT(10), st TEXT(2);
UPDATE park
SET
pname = [nm], pstate = [st]
WHERE
ID = [pkid];
显然,我在编写查询时并没有密切注意——虽然我对其他参数使用了不同的名称,但当涉及到 ID
时,我并没有这样做更新查询。
底线
无论何时使用参数化查询,请确保您的参数名称不要与您的table的字段名称匹配。
这样做可以避免上述问题以及其他相关问题。
您还需要避免在 table、字段和参数名称中使用保留字。
希望这可以帮助某人在更新记录时避免可能令人讨厌的意外——或者试图弄清楚为什么他们的参数查询似乎不起作用。