Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > .NET > Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate)
Регистрация

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


Ответ
 
Опции темы
Старый 12.11.2017, 14:23   #1
Grinvel
Пользователь
 
Регистрация: 25.09.2017
Сообщений: 16
Репутация: 10
По умолчанию Запрос UPDATE - принцип работы

БД Access. Добавляемые в БД записи должны вставать на места согласно алфавиту. Для этого при вставке прогоняю алгоритм сортировки, чтобы узнать позицию вставляемой детали. После этого нужно перезаписать индексы последующих записей.

Код:

int tempID = SortBD(frAddChange.TextInRegNumDetailBox);                     //индекс вставляемой записи
            CommandText = "UPDATE Table1 Set [№] = [№] + 1 Where [№] >= @idAddDetail";  //перезапись индексов записей, стоящих после удалённой
            bdParam.Add("@idAddDetail", Convert.ToString(tempID));

В этом случае возникает ошибка повторяющихся значений в ключевом поле. Тип ключевого поля [№] числовой.

В связи с этим вопрос: запрос Update работает с первой удовлетворяющей условиям записи и до последней? Если так, то возможна ли организация этого запроса в обратном порядке, т.е. с последней записи и до первой? Если нет, то какие есть альтернативы? Тот же принцип у меня используется при удалении детали, но в том случае индексы не повторяются.
Grinvel вне форума   Ответить с цитированием
Старый 12.11.2017, 15:41   #2
evg_m
Профессионал
 
Регистрация: 20.04.2008
Сообщений: 4,707
Репутация: 2097
По умолчанию

оставлять в БД записи НЕУПОРЯДОЧЕНЫМИ.
а при выборе (операторе select) использовать order by и recno
__________________
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума   Ответить с цитированием
Старый 12.11.2017, 18:23   #3
Grinvel
Пользователь
 
Регистрация: 25.09.2017
Сообщений: 16
Репутация: 10
По умолчанию

Я бы так и сделал, но проблема в том, что это больше нужно не во время работы программы, а после. Другими словами, чтобы при открытии access записи были упорядочены, т.к. эта база является стандартным перечнем, который время от времени правится. Поэтому для удобства поиска и нужна сортировка по алфавиту
Grinvel вне форума   Ответить с цитированием
Старый 12.11.2017, 19:38   #4
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,937
Репутация: 6285
По умолчанию

Это не правильный подход. На то он и order by. Но если очень хочется, то два update
Код:

UPDATE Table1 Set [№] = [№] + @a Where [№] >= @idAddDetail
UPDATE Table1 Set [№] = [№]- @a + 1 Where [№] >= @idAddDetail

где в @a число заведомо большее количества обновляемых записей
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума   Ответить с цитированием
Старый 12.11.2017, 20:15   #5
Grinvel
Пользователь
 
Регистрация: 25.09.2017
Сообщений: 16
Репутация: 10
По умолчанию

не самое элегантное решение, но подойдёт, спасибо всем за помощь
Grinvel вне форума   Ответить с цитированием
Старый 12.11.2017, 20:24   #6
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,937
Репутация: 6285
По умолчанию

Ну какое может быть элегантное решение для не элегантного подхода к базе ))
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума   Ответить с цитированием
Старый 12.11.2017, 20:37   #7
evg_m
Профессионал
 
Регистрация: 20.04.2008
Сообщений: 4,707
Репутация: 2097
По умолчанию

Код:

update t set N = N+1 where text>'новый текст'

insert into t (N,text) 
select count(*), 'новый текст' from t where text <'новый текст'

__________________
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Принцип работы 3D принтера oldsnowman Микроконтроллеры, робототехника, схемотехника, 3D принтеры 9 04.05.2017 01:09
Объясните принцип работы danada1 Помощь студентам 1 27.03.2013 15:20
принцип работы SaveDialog Form_13 Общие вопросы Delphi 1 20.02.2012 00:24
принцип работы ссылки sbcd Свободное общение 0 03.06.2011 21:50
Принцип работы NS-серверов Ivan_32 Свободное общение 1 31.10.2010 04:38


06:46.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru