【发布时间】:2010-11-03 19:06:03
【问题描述】:
如何使它成为一个选择语句? 这是供 Microsoft 访问的。 我希望它在整个表格中的任何单元格的任何地方和任何部分查找并找到“Coal 104”并将其替换为“Lava 104”
【问题讨论】:
-
您想在代码中执行此操作吗?这是您想要重复的事情还是一次性任务?
如何使它成为一个选择语句? 这是供 Microsoft 访问的。 我希望它在整个表格中的任何单元格的任何地方和任何部分查找并找到“Coal 104”并将其替换为“Lava 104”
【问题讨论】:
您可以使用 VBA 代码来实现。您需要遍历数据库中的所有表,并为每个表遍历所有字段。
对于每个字段,创建一个 sql 语句来更新包含您的搜索值的行并将其替换为您的目标值。然后执行你的动态sql语句。
【讨论】:
在我的脑海中。
Update myTable SET cell1 = Replace(cell1, 'Coal 104', 'Lava 104'), -- repeat for all cells in table
-- optional, but may run faster
WHERE cell1 LIKE '*Coal 104*' OR -- repeat for all cells in table
如果有必要说,只对 VARCHAR 字段执行此操作。
【讨论】:
LIKE '*Coal 104*' 并且没有得到任何匹配。 ADO 始终在 SQL92 模式下运行,因此需要 ANSI 样式的通配符。
ALIKE '%Coal 104%'。
由于尚不清楚您是否要更新表中的值,或者是否可以只显示我详细说明的新值(这甚至可能有助于更好地理解该过程)。
这是包含单元格 1 中输入值的表格“mytable”
**cell1**
abc Coal 104 efg
abcdefg
othervalue
Coal 104 xyz
more
如果您使用 MS Access 中的图形查询编辑器显示所有值(尚未替换),Access 将创建以下 SQL 语句(在编辑器窗口中右键单击并选择“SQL-View”):
SELECT myTable.cell1
FROM myTable;
(其实没什么特别的) 现在回到图形编辑器窗口,您可以插入第二个值,例如显示替换值的 cell1_new(这在任何情况下都可能对“调试”有用)并且您得到(再次在 SQL 视图中)
SELECT myTable.cell1, Replace([cell1],"Coal 104","Lava 104") AS cell1_new
FROM myTable;
运行我看到的查询:
**cell1** **cell1_new**
abc Coal 104 efg abc Lava 104 efg
abcdefg abcdefg
othervalue othervalue
Coal 104 xyz Lava 104 xyz
more more
(需要说明的是,这不会更新原始表中的值,它只是一个视图)。
使用图形查询编辑器,您甚至可以构建更新查询。 首先将查询类型更改为“更新查询”(我不确定这在英文 MS Access 中是什么名称)。 其次将用于显示“cell1_new”值的替换“公式”插入到单元格1 下方的更新行中(没有“单元格1_new:”)。删除此列 cell1_new 的公式(因为我们现在只更新列 cell1 中的值) 第三,建议您可以将更新的值限制为仅包含“Coal 104”的行,因此在标准行中输入“Coal 104” .
在涂鸦编辑器中,它或多或少应该是这样的:
Field cell1
Table myTable Update
Replace([cell1],"Coal 104","Lava 104")
crieteria Like "*Coal 104*"
再次检查 SQL 语句(我发现它比图形视图更容易理解)现在如下所示:
UPDATE myTable SET myTable.cell1 = Replace([cell1],"Coal 104","Lava 104")
WHERE (((myTable.cell1) Like "*Coal 104*"));
(我在 WHERE-Statement Access 中留下了那些烦人的括号,所以看起来一样)。
要完成,请运行此查询(例如按感叹号)。通常(除非您在设置中更改了此行为)Access 会询问您是否真的要更新 - 在本例中 - 两个值。
我希望这有助于了解如何使用图形编辑器来试验不同的查询。我认为在这方面 Access 是一个不错的学习工具。
HTH 安德烈亚斯
【讨论】: