ошибка в хранимой процедуре Access - PullRequest
0 голосов
/ 02 марта 2011

Я создал запрос: SELECT Replace(column_name,a,b) AS expr1 FROM table1; имя этого запроса: filepath .

Я написал следующий код на C #.когда я компилирую код, он Синтаксическая ошибка в предложении PROCEDURE.

            OleDbCommand cmd1 = new OleDbCommand();
            cmd1.Connection= ren_connection1;
            cmd1.CommandType = CommandType.Text;
            cmd1.CommandText = "Execute filepath";

            OleDbParameter oldfilevalue = new OleDbParameter();
            oldfilevalue.ParameterName = "a";
            oldfilevalue.OleDbType = OleDbType.VarChar;
            oldfilevalue.Direction = ParameterDirection.Input;
            oldfilevalue.Value = oldname2;

            OleDbParameter newfilevalue = new OleDbParameter();
            newfilevalue.ParameterName = "b";
            newfilevalue.OleDbType = OleDbType.VarChar;
            newfilevalue.Direction = ParameterDirection.Input;
            newfilevalue.Value = oldname1;

            cmd1.Parameters.Add(oldfilevalue);
            cmd1.Parameters.Add(newfilevalue);

            i = cmd1.ExecuteNonQuery();

// значение oldefile может быть таким: D: / myfile / pictures / cars/ // значение нового файла может быть таким: D: / myfile / pictures / jeeps /

я хочу заменить строку на строку другой строкой без изменения всей строки ..и я думал, что замена будет работать, но это не так: (

версия доступа: 2007.

любая идея или помощь будет принята с благодарностью.

Большое спасибо.

Ответы [ 4 ]

2 голосов
/ 03 марта 2011

Боюсь, замена доступна только в том случае, если вы работаете в Access, как упоминает Винсент, это функция VBA, а не функция Jet / ACE. Также обсуждается: Исключение при попытке выполнить "ЗАМЕНА" для MS Access . Я ответил на ваш первый вопрос, обновить доступ к таблице , с возможным решением.

1 голос
/ 04 марта 2011

Решение в @ oneday, когда ей ответят:

Исключение при попытке выполнить "ЗАМЕНА" для MS Access

Используется Mid (), Len ()и InStr () вместо Replace ().

1 голос
/ 02 марта 2011

Я нашел следующее здесь :

До обновления компании до XP не было проблем с базами данных доступа, поэтому я не уверен, что это будетРешение вашей проблемы.Но у меня была проблема, похожая на вашу, после обновления до XP с 2000 года с некоторыми базами данных доступа.Неопределенные функции «Заменить» начали появляться ошибки.В конце дня оказалось, что установлена ​​версия VBA.6,0 против 6,3.На проблемных машинах было установлено 6.0.Начать доступ Помощь -> О MS Access -> ИНФОРМАЦИЯ О СИСТЕМЕ -> ПРИЛОЖЕНИЯ -> Microsoft Access 2000 -> РЕЗЮМЕ.Версия VBA 6.00 вызвала ошибку, версия VBA 6.03 не проблема.Береги себя, Ник

Теперь вопрос в том, какую версию VBA ты используешь?

1 голос
/ 02 марта 2011

Попробуйте изменить свой командный текст с помощью

cmd1.CommandText = "EXECUTE yourProcedureName";

Редактировать Теперь, когда ваша процедура вызывается правильно, вам нужно обойти отсутствующую функцию "Заменить" (кстати, вы пробовали Винсента Ванкалбергапредложение посмотреть, можно ли сделать «Заменить на работу?» Это было бы намного проще ....)

Что я говорил в комментариях, так это то, что вы можете выбрать содержимое таблицы, выполнить замену вкод c # и (при необходимости) обновите вашу таблицу новыми значениями.

ваш выбор станет:

SELECT table1_id, column_name FROM table1;

и ваш код изменится следующим образом:

//you should change ExecuteNonQuery to ExecuteReader, since you want 
// to read the results of your SELECT 
OleDbDataReader rdr= cmd1.ExecuteReader();

//Iterate through the table
while(rdr.Read())
{
   string currentValue=rdr["column_name"].ToString();
   string newValue = currentValue.Replace(a, b);

   //now do what you need with the row
   // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...