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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2017, 13:23   #1
Grinvel
Пользователь
 
Регистрация: 25.09.2017
Сообщений: 16
По умолчанию Запрос 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, 14:41   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

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

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

Это не правильный подход. На то он и order by. Но если очень хочется, то два update
Код:
UPDATE Table1 Set [№] = [№] + @a Where [№] >= @idAddDetail
UPDATE Table1 Set [№] = [№]- @a + 1 Where [№] >= @idAddDetail
где в @a число заведомо большее количества обновляемых записей
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.11.2017, 19:15   #5
Grinvel
Пользователь
 
Регистрация: 25.09.2017
Сообщений: 16
По умолчанию

не самое элегантное решение, но подойдёт, спасибо всем за помощь
Grinvel вне форума Ответить с цитированием
Старый 12.11.2017, 19:24   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

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

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

insert into t (N,text) 
select count(*), 'новый текст' from t where text <'новый текст'
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Принцип работы 3D принтера oldsnowman Микроконтроллеры, робототехника, схемотехника, 3D принтеры 9 04.05.2017 00: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 03:38