Неопределенная функция «Заменить» в выражении

У меня есть приложение VB.Net. Я подключаю его к базе данных MS Access. Теперь мне нужно выполнить запрос. Мой запрос: Update table1 set field1=replace(field1,'|','"')

Этот запрос, похоже, отлично работает с анализатором запросов базы данных Access, но когда я делаю ту же форму кода VB.Net, он выдает мне сообщение об ошибке «Неопределенная функция« Заменить »в выражении».

Я использую соединение и команду OLEDB. Я использую функцию «executenonquery».

Может кто-нибудь мне помочь?


person Rajdeep    schedule 14.06.2011    source источник


Ответы (2)


К сожалению, когда вы подключаетесь к базе данных Access из своего приложения VB.Net, вы вообще не используете механизм запросов Access. Вы используете Джет. Некоторые функции, доступные в Access (например, Заменить), недоступны в Jet.

Классическим решением является использование комбинации Iif, Instr и т. д. (они доступны). Да, это не так приятно, как играть с Replace, но вам придется научиться обходиться без него.

person hawbsl    schedule 14.06.2011
comment
Я очень новичок в запросе Sql. Я смущен, чтобы найти альтернативу функции замены, которая принята в Jet. Любая помощь? - person Rajdeep; 14.06.2011

Принятый в настоящее время ответ на этот вопрос несколько устарел. С использованием

Provider=Microsoft.ACE.OLEDB.12.0

следующий код С# отлично работает:

cmd.CommandText =
    "UPDATE table1 SET field1 = Replace(field1, '|', '\"')";
cmd.ExecuteNonQuery();

Другими словами, функция Replace() могла вызвать проблемы со старым драйвером OLEDB "Jet" (и, возможно, более ранними версиями драйвера "ACE"), но в версии для Access 2010 это больше не проблема.

person Gord Thompson    schedule 24.07.2014
comment
Существует ли определенная версия VS, необходимая для запуска Microsoft.Ace.OLEDB.12? Если нет, то где я могу получить его, чтобы добавить в свой проект? - person DotNet Programmer; 07.03.2016
comment
Никакая конкретная версия Visual Studio не требуется, и вам не нужно добавлять какие-либо дополнительные ссылки в ваш проект. Просто используйте объекты System.Data.OleDb и строку подключения, включающую Provider=Microsoft.ACE.OLEDB.12.0. (И убедитесь, что разрядность установленной версии ядра базы данных Access соответствует разрядности вашего приложения: 64-разрядная или 32-разрядная.) - person Gord Thompson; 07.03.2016
comment
Я не вижу Ace.OLEDB.12.0 как вариант для импорта в мой класс. У меня есть System.Data.OleDb, импортированный в мой класс - person DotNet Programmer; 07.03.2016
comment
Просто создайте объект OleDbConnection с соответствующей строкой подключения. Подробности смотрите на connectionstrings.com и/или ищите примеры здесь, на SO. - person Gord Thompson; 08.03.2016