Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
217 / 216 / 114
Регистрация: 14.01.2013
Сообщений: 459
1

SQL-запрос на обновление строк

08.12.2015, 10:01. Показов 2549. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток! Помогите, пожалуйста, написать, как мне кажется, не сложный запрос.
Имеется таблица: tablel1, в ней есть поле: refdes, в котором уникальные значения, т.е. одинаковых значений нет (значения, например: r1, r2, r3 и т.д.). И ещё есть поля с разными значениями (параметрами), которые могут повторяться: field1, field2, field3 и т.д.
И вот мне нужно сделать UPDATE запрос, например, мне нужно обновить строки с refdes=r2,r3, обновить поля: field1, field2, field3, но значения взять для этих полей из r1.
Есть соображения, но не пойму как объединить эти два запроса:
SELECT field1, field2, field3 FROM tablel1 WHERE refdes=r1
и
UPDATE tablel1 SET field1=?, field2=?, field3=? WHERE refdes=r2 or refdes=r3
Заранее спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.12.2015, 10:01
Ответы с готовыми решениями:

Запрос SQL на обновление из VBA
Всем привет! Помогите, пожалуйста.... Написал код (корявый но работает!) Set bst =...

Sql запрос на обновление
Ребят, сделал базу данных по кинотеатру, потребовали сделать, запрос на обновление полей для записи...

запрос на SQL на обновление
Добрый день ВСЕМ!!!!!!!! Помогите пожалуйста с запросом. Мне нужно обновить одну таблицу данными с...

InterBase. SQL запрос на обновление
Добрый день! Как построить запрос на изменение записи в таблице?

8
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
08.12.2015, 10:24 2
Лучший ответ Сообщение было отмечено es_ как решение

Решение

Видимо, придется пользоваться длукапами, поскольку связей не прослеживается
SQL
1
2
3
4
5
UPDATE tablel1 SET 
field1=Dlookup("field1","tablel1","refdes=r1"),
field2=Dlookup("field2","tablel1","refdes=r1"),
field3=Dlookup("field3","tablel1","refdes=r1")
WHERE refdes=r2 OR refdes=r3
1
217 / 216 / 114
Регистрация: 14.01.2013
Сообщений: 459
08.12.2015, 10:35  [ТС] 3
Ого! Я, конечно, не каждый день работаю с SQL-запросами, но всё же часто, и тем не менее про Dlookup первый раз услышал. Видимо, не зря говорят: "Век живи, век учись".
Спасибо большое за помощь, всё работает так как я и хотел!
0
Эксперт MS Access
7398 / 4535 / 295
Регистрация: 12.08.2011
Сообщений: 14,023
08.12.2015, 10:49 4
Это не SQL-функция и к SQL не имеет никакого отношения.
0
217 / 216 / 114
Регистрация: 14.01.2013
Сообщений: 459
08.12.2015, 10:56  [ТС] 5
Цитата Сообщение от alvk Посмотреть сообщение
Это не SQL-функция и к SQL не имеет никакого отношения.
Это функция, которую, можно использовать только в Access?
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
08.12.2015, 11:53 6
Да, это функция Access.Application. Если Вы обращаетесь в БД из внешнего приложения, то с учетом сложности запроса, изменить данные можно либо рекордсетом, либо создав объект Access.Application и произведя обновление его методами. На ВБА это будет так
Visual Basic
1
2
3
4
5
6
7
8
9
10
Dim path, app As Object, s
path = "C:\путь\МояБД.mdb"
Set app = CreateObject("Access.Application")
app.OpenCurrentDatabase path
s = "UPDATE tablel1 SET " _
& "field1=Dlookup('field1','tablel1','refdes=r1'), " _
& "field2=Dlookup('field2','tablel1','refdes=r1'), " _
& "field3=Dlookup('field3','tablel1','refdes=r1') " _
& "WHERE refdes=r2 OR refdes=r3"
app.docmd.runsql s
Еще вариант без открытия аппликейшн, воспользоваться DAO
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Dim dbe As Object, db As Object,s
Set dbe = CreateObject("DAO.DBEngine.36")    'DAO.DBEngine.36 для mdb, DAO.DBEngine.120 для accdb
Set db = dbe.OpenDatabase("C:\путь\МояБД.mdb")
s = "UPDATE tablel1 SET " _
& "field1=Dlookup('field1','tablel1','refdes=r1'), " _
& "field2=Dlookup('field2','tablel1','refdes=r1'), " _
& "field3=Dlookup('field3','tablel1','refdes=r1') " _
& "WHERE refdes=r2 OR refdes=r3"
db.Execute s
 
'Или, если в БД есть сохраненный запрос с длукапами, то выполнить его. 
'Тогда в коде писать текст запроса не надо
Dim dbe As Object, db As Object,s
Set dbe = CreateObject("DAO.DBEngine.36")    'DAO.DBEngine.36 для mdb, DAO.DBEngine.120 для accdb
Set db = dbe.OpenDatabase("C:\путь\МояБД.mdb")
db.Execute "ИмяЗапроса"
1
шапоклякистка 8-го дня
3679 / 2239 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
08.12.2015, 12:04 7
Лучший ответ Сообщение было отмечено es_ как решение

Решение

SQL
1
2
3
4
5
UPDATE tablel1 
  INNER JOIN (SELECT tablel1.*, 1 AS NEW FROM tablel1) AS sq 
  ON tablel1.refdes = sq.new 
SET sq.field1 = [tablel1].[field1], sq.field2 = [tablel1].[field2], sq.field3 = [tablel1].[field3]
WHERE (((sq.refdes)=2 OR (sq.refdes)=3));
3
шапоклякистка 8-го дня
3679 / 2239 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
08.12.2015, 12:06 8
Работает.
Вложения
Тип файла: rar refdes.rar (20.3 Кб, 22 просмотров)
3
217 / 216 / 114
Регистрация: 14.01.2013
Сообщений: 459
08.12.2015, 13:25  [ТС] 9
mobile, Ещё раз спасибо! Мне как раз таки нужно запрос выполнить из стороннего приложения.
Программку пишу на C#, с БД общаюсь по средствам OleDbConnection, и при выполнении вами написанного запроса всё прошло на ура. Так что всё ок!

texnik-san, супер! Примерно что-то подобное я себе и представлял, только, конечно же, знаний в области SQL мне не хватило, спасибо! )
0
08.12.2015, 13:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.12.2015, 13:25
Помогаю со студенческими работами здесь

Sql Запрос на обновление данных. SqlDataSet
Здравствуйте! Как правильно должен выглядеть такой запрос: Есть две таблицы Поставка пакетов и...

Не работает SQL запрос на обновление данных
Не могу понять почему не работает простенький SQL запрос на обновление, имена всех полей...

Обновление нескольких строк за 1 запрос
Доброго времени суток, появился вопрос по обновлению данных. Делаю post запрос на сервер, получаю...

Обновление ячеек на листе в excel через sql-запрос
Добрый день! На листе в экселе имеется таблица, которая время от времени служит источником...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru