Delphi. Эксперименты с INSERT или как добавить запись в середину таблицы БД?

В этом посте напишу о своем опыте с DBExpress MySQL и попыткой INSERT… То есть, хотелось бы научить программу вставлять в любую строку, а не только в последнюю. Но не тут-то было!

В самом простом случае (когда у нас нет ключевых полей) INSERT из DELPHI работает прекрасно… Жмём кнопку INSERT, вставляем запись – сохраняем в физической БД нажатием на SAVE…

4

 

Но такая “идилия” длится до тех пор, пока не нажмешь на Refresh…

Как я обработал кнопку INSERT?

Как я обработал кнопку SAVE?

И вроде бы всё Ок! Но, стоило сделать единственное поле экспериментальной таблицы MyTable сделать ключевым, то есть при формировании таблицы написать такой код…

Как тут же я столкнулся с тем, что записи переставляются в алфавитном, либо возрастающем порядке по тому или иному номеру. В нашем случае – одно поле VarChar, поэтому СУБД MySQL сортирует в алфавитном порядке… (хотя впоследствии запись всегда вставлялась в конец.. в общем разбираюсь в данном вопросе)

5

Проблема

 

При всех моих попытках идти стандартными способами новая строка всё время вставлялась в конец! Вот как выглядел “стандартный” код для INSERT, который рекомендуют в некоторых онлайн учебниках…

SimpleDataSet1.Insert; SimpleDataSet1.FieldByName(‘Primary_key’).AsInteger:=PK+1; SimpleDataSet1.FieldByName(‘Name’).AsString:=’New Record’; SimpleDataSet1.Post; SimpleDataSet1.ApplyUpdates(-1); SimpleDataSet1.Refresh;

Оканчивалось это так… Запись постоянно оказывалась в конце… Это и понятно! У нас есть ключевое поле в этой таблице и СУБД автоматически упорядочивает записи по нему. Чтобы этого избежать, нужно либо убрать ключевое поле (что немыслимо при разработке серьезного приложения), либо воспользоваться дополнительной колонкой Sort (см. решение проблемы ниже).
1

 

Решение

Итак, решение в том, чтобы ввести новый столбец Sort, и далее, умело нумеруя и переставляя записи отображать “всё это дело” пользователю. То есть, примерно таким образом…

2

 

Теперь, имея такой столбец, можно вставлять в любое место нашей таблицы, и вот какой результат у нас получится…

3

 

Вот основные шаги по коду…

 

This entry was posted in DBExpress, Delphi, Без рубрики. Bookmark the permalink.