Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2013, 18:16   #1
АлИван
Пользователь
 
Регистрация: 13.03.2012
Сообщений: 21
По умолчанию Как заменить отдельные слова с помощью таблицы и запроса

Здравствуйте. Помогите, пожалуйста, произвести замену некоторых значений в таблице с помощью запроса. Результатом запроса должно стать поле НДолжность, которое приведено в ТблНовДолжности. Для наглядности планируемый результат запроса набран вручную.
Замену нужно провести с помощью ТблЗаменаДол.
Вложения
Тип файла: rar БД.rar (11.0 Кб, 22 просмотров)
АлИван вне форума Ответить с цитированием
Старый 08.11.2013, 18:32   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Студенты блин, вы научитесь самостоятельно работать или нет?? на кой хер вы вообще учитесь на професию инженера если способностей ноль?
Вы хоть бы свои идеи выложили ... кому интересно ваш код разбирать
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 09.11.2013, 01:34   #3
АлИван
Пользователь
 
Регистрация: 13.03.2012
Сообщений: 21
По умолчанию

Дорогой Вы наш "инженер до мозга костей" ! Студентом я никогда не был и уже, наверное, вряд ли стану. Уже за 50 перешел... И не надо хамить.
И ни на какой х... Ну ладно, бог Вам судья. Ну не хочется Вам помощь, что Вы лезете и хамите.
Уважаемый форум! Почему Вы позволяете такое? Наказывать никого не надо, бог воздаст... Удачи всем!
АлИван вне форума Ответить с цитированием
Старый 09.11.2013, 08:06   #4
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию

Простой запрос на выборку из таблицы с заменой; исходная таблица остаётся неизменной (Запрос1):
Код:
select 
	Switch (
		Должность Like '*помощник*',Replace(Должность,'помощник','заместитель'),
		Должность Like '*делопроизводитель*',Replace(Должность,'делопроизводитель','инспектор'),
		Должность Like '*старший*',Replace(Должность,'старший','главный'),
		Должность Like '*машинист*',Replace(Должность,'машинист','оператор')
		   ) as НДолжность
from тблДолжности
Запрос на изменение данных непосредственно в этой таблицы (Запрос2); после его выполнения возврат изменений будет невозможен (поэтому предварительно сделайте резервную копию файла):

Код:
update тблДолжности set Должность =
	Switch (
		Должность Like '*помощник*',Replace(Должность,'помощник','заместитель'),
		Должность Like '*делопроизводитель*',Replace(Должность,'делопроизводитель','инспектор'),
		Должность Like '*старший*',Replace(Должность,'старший','главный'),
		Должность Like '*машинист*',Replace(Должность,'машинист','оператор')
		   )
Андрэич вне форума Ответить с цитированием
Старый 09.11.2013, 08:08   #5
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию

Файл во вложении:
Андрэич вне форума Ответить с цитированием
Старый 09.11.2013, 08:16   #6
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию

Файл во вложении:..
Вложения
Тип файла: rar Копия Копия БД.rar (11.4 Кб, 35 просмотров)
Андрэич вне форума Ответить с цитированием
Старый 09.11.2013, 13:22   #7
АлИван
Пользователь
 
Регистрация: 13.03.2012
Сообщений: 21
По умолчанию

Спасибо Вам большое. Пока нет другого варианта, можно воспользоваться Вашим. Для небольшого числа замен достаточно. Просто пример упрощен и если в таблице нужно заменить несколько сотен должностей, запрос будет очень длинным. Можно ли провести замену с помощью запроса на обновление, ссылаясь на данные в таблицах? Еще раз спасибо!
АлИван вне форума Ответить с цитированием
Старый 09.11.2013, 15:29   #8
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию

Цитата:
Сообщение от АлИван Посмотреть сообщение
пример упрощен и если в таблице нужно заменить несколько сотен должностей...
Я так и знал: "малой кровью" не отделаться :-)

А SQL-запросом - это принципиально? Посредством VBA, если другое не придумается, подойдёт?

Выложите фрагменты обеих таблиц, можно с изменёнными данными, но максимально похожими на оригинал, что важно (нет ли ошибок в написании, расположение слов и т.д.)
Андрэич вне форума Ответить с цитированием
Старый 10.11.2013, 12:17   #9
АлИван
Пользователь
 
Регистрация: 13.03.2012
Сообщений: 21
По умолчанию

VBA - можно и VBA. Принципиально важно, чтобы замена происходила в зависимости от того, что будет в ТблЗаменаДолж, даже если в поле СДол стоит к примеру "хрен", а в поле НДол "редька", то в ТблДолжности везде, где бы ни встретилось слово "хрен" оно бы менялось на "редька"
Интересно было б посмотреть, как справится с этим VBA.
АлИван вне форума Ответить с цитированием
Старый 12.11.2013, 22:18   #10
Myhaylo
Форумчанин
 
Регистрация: 19.07.2012
Сообщений: 520
По умолчанию

Код:
Dim table As DAO.Recordset
  Set table = CurrentDb.OpenRecordset("SELECT ТблЗаменаДолж.СДол, ТблЗаменаДолж.НДол FROM ТблЗаменаДолж ORDER BY ТблЗаменаДолж.СДол;", dbOpenDynaset)
  With table
    DoCmd.SetWarnings False
    While Not .EOF
      DoCmd.RunSQL "UPDATE ТблНовДолжности SET ТблНовДолжности.НовДолжность = Left([Должность],InStr(1,[Должность],""" + !СДол + """)-1)+""" + !НДол + """+Mid([Должность],InStr(1,[Должность],""" + !СДол + """)+Len(""" + !СДол + """)) WHERE (((ТблНовДолжности.Должность) Like ""*" + !СДол + "*""));"
      .MoveNext
    Wend
    .MoveFirst
    While Not .EOF
      DoCmd.RunSQL "UPDATE ТблНовДолжности SET ТблНовДолжности.НовДолжность = Left([НовДолжность],InStr(1,[НовДолжность],""" + !СДол + """)-1)+""" + !НДол + """+Mid([НовДолжность],InStr(1,[НовДолжность],""" + !СДол + """)+Len(""" + !СДол + """)) WHERE (((ТблНовДолжности.НовДолжность) Like ""*" + !СДол + "*""));"
      .MoveNext
    Wend
    DoCmd.SetWarnings True
  End With
Окупант, руки прочь от Украины!!! Слава Героям!
Myhaylo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
в заданной строке символов (отдельные слова, разделенные пробелом) найти слова с совпадающими первой и последней буквами (С++) T_h_i_s Помощь студентам 0 19.11.2012 18:37
Разделение слова на отдельные символы,вычисление их количества tagantroy Паскаль, Turbo Pascal, PascalABC.NET 2 18.07.2011 00:39
Как с помощью SQL перенести данные из одной таблицы в другую lenuxoid БД в Delphi 1 23.04.2009 20:45
Как получить с помощью функции автоматического вычисления итогов общий итог внизу таблицы prikolist Microsoft Office Excel 2 01.12.2008 13:10
Как сделать выбор параметра запроса из таблицы valery Microsoft Office Access 1 30.11.2007 11:17