Поиск:

Ответ в темуСоздание новой темы Создание опроса
> замена значения в поле кроме первых 2х символов... 
V
    Опции темы
SAnatoliy
Дата 20.5.2009, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 1.10.2007

Репутация: нет
Всего: нет



Сейчас в нижеприведенном коде происходит замена двух столбцов (NUM_ABON1=:aB2, NUM_ABON2=:aB2 ), а мне надо чтоб в поле (NUM_ABON1) происходила замена не полностью, а только после первых двух символов.

как это можно реализовать? 

есть код:
Код

AnsiString ChZapisi;
String aB1,aB2,aB3;

DataModule1->IBDataSet2->Open();

  for(DataModule1->IBDataSet2->First(); !DataModule1->IBDataSet2->Eof;
      DataModule1->IBDataSet2->Next()) {

     ChZapisi = DataModule1->IBDataSet2->FieldByName("CH")->AsString.c_str();

      if(ChZapisi == 1) {
        aB1 = DataModule1->IBDataSet2->FieldByName("TEL_OLD")->AsString.c_str();
        aB2 = DataModule1->IBDataSet2->FieldByName("TEL_NEW")->AsString.c_str();

        DataModule1->IBQuery2->Params->Clear();
        DataModule1->IBQuery2->Params->CreateParam(ftString,"aB1",ptInput); //что искать
        DataModule1->IBQuery2->Params->CreateParam(ftString,"aB2",ptInput); //на что менять
        DataModule1->IBQuery2->Params->CreateParam(ftString,"SDate",ptInput);
        //DataModule1->IBQuery2->Params->CreateParam(ftString,"aB3",ptInput); //первые символы ABON 1

        DataModule1->IBQuery2->SQL->Clear();
        DataModule1->IBQuery2->SQL->Add("update tabl_main set NUM_ABON1=:aB2, NUM_ABON2=:aB2 where (NUM_ABON2=:aB1) and (DATA_IMP=:SDate)");

        DataModule1->IBQuery2->ParamByName("aB2")->AsString = aB2;
        DataModule1->IBQuery2->ParamByName("aB1")->AsString = aB1;
        DataModule1->IBQuery2->ParamByName("SDate")->AsString = SDate;
        //DataModule1->IBQuery2->ParamByName("aB3")->AsString = aB3;
        DataModule1->IBQuery2->ExecSQL();
      }
  }
  DataModule1->IBTransaction1->Commit();


PM MAIL   Вверх
Gluttton
Дата 26.5.2009, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: нет
Всего: 54



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

update tabl_main 
set 
NUM_ABON1=substring(NUM_ABON1 from 1 for 2)||substring(:aB2 from 3), 
NUM_ABON2=:aB2 
where (NUM_ABON2=:aB1) and (DATA_IMP=:SDate)


Источник по конкатенации строк.
Источник по выделению подстроки.

Проверил - работает smile ...

Это сообщение отредактировал(а) Gluttton - 28.5.2009, 20:10


--------------------
Слава Україні!
PM MAIL   Вверх
SAnatoliy
Дата 1.6.2009, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 1.10.2007

Репутация: нет
Всего: нет



чтот делает не совсем то. (

Приведу что нужноз:

Есть таблица "tabl_main".
в ней есть поля: ...., NUM_ABON1, NUM_ABON2, .....
Значение: NUM_ABON1 = qaz12345678, NUM_ABON2=0987654321.

Код

Надо найти "0987654321" в колонке "NUM_ABON2", если найдено, то 
заменить в колонке "NUM_ABON1" значением из колонки "NUM_ABON2" при этом не удаляя первые два сим0000вола.


Тоесть должно получистя вроде этого. NUM_ABON1=qaz0987654321 и NUM_ABON2=12345678. 
PM MAIL   Вверх
Gluttton
Дата 1.6.2009, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: нет
Всего: 54



Код

update tabl_main 
set 
NUM_ABON1=substring(NUM_ABON1 from 1 for 2)||NUM_ABON2, 
where NUM_ABON2="0987654321"


Итак, ищем запись в которой NUM_ABON2="0987654321" ("0987654321" можно заменить на переменную smile ), и там где находим, в поле NUM_ABON1, всё что правее первых двух символов заменяем содержимым поля NUM_ABON2.
Так?

Цитата

чтот делает не совсем то. (

Цитата

а мне надо чтоб в поле (NUM_ABON1) происходила замена не полностью, а только после первых двух символов.

Я это понял "по своему" и в предыдущем посте было реализовано так:
"и там где находим, в поле NUM_ABON1, всё что правее первых двух символов заменяем тем, что правее второго символа поля NUM_ABON2."
При этом критерий отбора был оставлен без изменений smile .

Это сообщение отредактировал(а) Gluttton - 1.6.2009, 10:55


--------------------
Слава Україні!
PM MAIL   Вверх
SAnatoliy
Дата 1.6.2009, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 1.10.2007

Репутация: нет
Всего: нет



Огромное Вам спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »


 




[ Время генерации скрипта: 0.0421 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.