Использование функций Access 2003 VBA через JET - PullRequest
1 голос
/ 14 октября 2010

Привет всем.

Мне нужно запустить ' replace ([column], [new], [old]) ' в запросе, выполняемом в n Access 2003 DB.Я знаю все эквивалентные вещи, которые я мог бы использовать в SQL, и поверьте мне, я бы с удовольствием, но у меня сейчас нет этой опции.Я пытаюсь сделать запрос, где все альфа-символы вырезаны из столбца т.е.' (111) 111-1111 ' просто становится ' 1111111111 '.Я также могу написать пользовательскую функцию VBA awsum и выполнить запрос, используя это, но еще раз, я не могу использовать эти функции через JET .Есть идеи?


Спасибо за ответы, ребята.Хорошо, позвольте мне прояснить ситуацию.Я использую веб-приложение .NET.Это приложение использует Access 2003 дБ.Я пытаюсь сделать обновление, где я включаю тип страницы поиска.На этой странице выполняется запрос, подобный следующему: SELECT * FROM [table] WHERE replace ([telnumber], '-', '') LIKE '1234567890'.Проблема в том, что в столбце [telnumber] есть много записей, в которых есть альфа-символы, например, '(123) 123-1234'.Это мне нужно отфильтровать, прежде чем я сделаю сравнение.Таким образом, запрос, использующий встроенную функцию VBA, выполняется нормально, когда я запускаю запрос в среде тестирования IN ACCESS, но когда я запускаю запрос из моего веб-приложения, он выдает исключение, в котором указано что-то вроде «Заменить функцию не найдена».Есть идеи?

Ответы [ 3 ]

1 голос
/ 15 октября 2010

Исходя из примера запроса из вашего комментария, мне интересно, может ли он быть "достаточно хорошим", чтобы переписать шаблон сопоставления с использованием подстановочных знаков для учета возможных нецифровых символов?

SELECT * FROM [table] WHERE telnumber LIKE '*123*456*7890'
1 голос
/ 14 октября 2010

Ваш вопрос немного неясен, но Access позволяет вам использовать функции VBA в запросах. Это вполне законно в Access, чтобы сделать это:

SELECT replace(mycolumn,'x','y') FROM myTable

Может не работать так же хорошо, как запрос без таких встроенных функций, но он будет работать.

Кроме того, если это разовый запрос и у вас нет проблем с блокировкой ряда строк от других пользователей, работающих в системе, вы также можете просто открыть таблицу и найти и заменить на Control-H.

0 голосов
/ 14 октября 2010

Как уже сказал JohnFx, использование функций VBA (независимо от того, встроены они или написаны вами) должны работать.

Если вы не можете заставить его работать с функцией VBA в запросе (по какой-либо причине), возможно, было бы возможно сделать все это для каждого кода?
Если это одноразовое действие и / или не критично для производительности, вы можете просто загрузить всю таблицу в набор записей, просмотреть ее и выполнить замену отдельно для каждой строки.


EDIT:

Ладно, это совсем другое дело, когда вы запрашиваете базу данных Access из приложения .net.
В этом случае невозможно использовать какие-либо встроенные или самописные функции VBA, потому что .net их не знает. Ни за что.

Итак, какие еще есть варианты?
Если я вас правильно понял, это не разовое действие ... вам нужно делать это, заменяя вещи каждый раз, когда кто-то использует вашу страницу поиска , правильно?

В этом случае я бы сделал что-то совершенно другое.
Даже если замена в запросе сработает, с точки зрения производительности это не лучший вариант, поскольку, скорее всего, это замедлит работу вашей базы данных.

Если вы не так часто записываете в свою базу данных, но делаете много чтений (что, по вашему описанию, имеет место), я бы сделал следующее:

  • Добавить столбец «TelNumberSearch» в вашу таблицу
  • Каждый раз, когда вы сохраняете запись, вы сохраняете номер телефона в столбце "TelNumber", и вы делаете замену на номере телефона и сохраняете удаленный номер в столбец "TelNumberSearch"

-> Когда вы выполняете поиск, у вас уже есть столбец TelNumberSearch со всеми вычеркнутыми числами ... нет необходимости удалять их снова при каждом поиске. И у вас все еще есть столбец с исходным номером (с альфа-символами) для отображения.

Конечно, вам нужно заполнить новый столбец один раз, но это одноразовое действие, так что в этом случае все в порядке, просматривая записи и выполняя отдельную замену для каждого.

...