通过JET使用Access 2003 VBA功能

时间:2010-10-13 20:05:34

标签: ms-access vba ado.net jet

你好。

我需要在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应用程序运行查询时,它会抛出一个异常,说明“找不到替换函数”。有什么想法吗?

3 个答案:

答案 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”列
  • 每当您保存某条记录时,您都会将电话号码保存在“电话号码”列中,您可以更换电话号码并保存已删除的电话号码“TelNumberSearch”列中的数字

- >当您进行搜索时,您已经拥有包含所有已剥离数字的TelNumberSearch列...无需为每次搜索再次删除它们。并且您仍然可以使用原始编号(带有字母字符)的列进行显示。

当然,您需要填写新列一次,但这是一次性操作,因此在这种情况下循环记录并对每个记录进行单独替换将是正常的。