我需要在n Access 2003 DB上执行的查询中运行' replace([column],[new],[old])'。我知道我可以在SQL中使用的所有相同的东西,并相信我,我会喜欢,但我现在没有这个选项。我正在尝试进行一个查询,其中所有的alpha字符都从列中删除,即。 '(111)111-1111 '只是变成' 1111111111 '。我也可以编写一个awsum自定义VBA函数并使用它执行查询,但再一次,不能通过 JET 使用这些函数。有什么想法吗?
Thanx回复家伙。好的,让我澄清一下情况。我正在运行.NET Web应用程序。此应用程序使用Access 2003数据库。我正在尝试进行升级,其中包含一种搜索页面。此页面执行如下查询:SELECT * FROM [table] WHERE replace([telnumber],' - ','')LIKE'1234567890'。问题是[telnumber]列中有许多记录有alpha字符,例如'(123)123-1234'。我需要在进行比较之前将其过滤掉。因此,当我在测试环境IN ACCESS中运行查询时,使用内置VBA函数的查询执行正常,但是当我从我的Web应用程序运行查询时,它会抛出一个异常,说明“找不到替换函数”。有什么想法吗?
答案 0 :(得分:1)
您的问题有点不清楚,但Access确实允许您在查询中使用VBA功能。在Access中完全合法:
SELECT replace(mycolumn,'x','y') FROM myTable
如果没有嵌入这样的函数,它可能无法执行,但它可以正常工作。
此外,如果它是一次性查询,并且您不担心从系统中工作的其他用户锁定一堆行,您也可以通过打开表并执行查找来解决问题。用Control-H替换。
答案 1 :(得分:1)
根据评论中的示例查询,我想知道使用通配符重写匹配模式是否“足够好”可以解释可能的非数字字符?
SELECT * FROM [table] WHERE telnumber LIKE '*123*456*7890'
答案 2 :(得分:0)
正如JohnFx所说,使用VBA功能(无论是内置还是自己编写)都应该有效。
如果您无法在查询中使用VBA功能(无论出于何种原因),也许可以选择全部代码? 如果它是一次性操作和/或性能不重要,您可以将整个表加载到Recordset中,循环遍历它并为每一行单独替换。
修改强>
好的,当您从.net应用程序查询Access数据库时,这是完全不同的事情 在这种情况下,不可能使用任何内置或自编的VBA函数,因为.net不知道它们。没办法。
那么,我们还有其他选择吗? 如果我理解正确,这不是一次性行动......你需要这样做,每当有人使用你的搜索页面时替换正确吗?
在这种情况下,我会做一些完全不同的事情 即使在查询中执行替换也会起作用,但从性能方面来看,这不是最佳选择,因为它可能会降低数据库的速度。
如果你不经常写入你的数据库,但做了很多阅读(根据你的描述似乎是这种情况),我会做以下事情:
- >当您进行搜索时,您已经拥有包含所有已剥离数字的TelNumberSearch列...无需为每次搜索再次删除它们。并且您仍然可以使用原始编号(带有字母字符)的列进行显示。
当然,您需要填写新列一次,但这是一次性操作,因此在这种情况下循环记录并对每个记录进行单独替换将是正常的。