Консультация № 142103
24.08.2008, 14:23
0.00 руб.
0 2 1
Господа, подскажите плиз! Возможно ли в DBGrid наладить перетаскивание строк? Если да, то можно пример? Мне требуется добавлять записи в таблицу в определённое место, к примеру над текущей строкой. Но когда я делаю Insert, то запись появляется в конце таблицы. Использую Delphi 10 и mdb через ADO.

Обсуждение

Неизвестный
25.08.2008, 06:10
общий
это ответ
Здравствуйте, Maximus777!

В реляционных базах данных нет понятия "первая", "вторая", "34-я" и т.д. запись/строка - это набор данных лежащий в произвольном порядке.
Но за счет введения ключей и индексов, можно добиться того, что данные будут упорядочены по первому полю, точнее, по всему индексу, но первое поле индекса будет формирующим, или задать сортировку в ручную ORDER BY например. Таким образом, "перетаскивание" или "вставка" в определенное положение данных не имеет смысла, т.к. их порядок, повторяю, зависит от индексации в таблице данных.

Используйте настройки таблицы (индексы, ключевые поля).
Неизвестный
25.08.2008, 16:38
общий
но изменить ключевое поле у меня не получилось


Нет и не может быть "номера записи", в этом смысле - все записи равносильны и безымянны.
Например:
Масло
Меланин
Миша
Мир
Мина


Последовательность понятна? это в случае, если мы создали индекс по этому полю - можно не создавать индекс если это поле ключевое, то сортировка будет идти по нему по умолчанию.

Вот отсюда и можно "плясать".. Например, у вас какие то данные могут быт про индексированы (фамилия, имя, номер чего-то и т.д.) то вставляя записи, они будут "сортироваться с заданным индексом или, если это первичный ключ, то по ключу (если нет иной сортировки)..
т.е. очередное слово "мармелад" будет отображено сразу за "Масло"..
Можно применить суррогатный ключ, т.е. это такой ключ, который назначается искусственно созданным полям, например, номер записи.. Тогда, присвоив этому полю свойство уникального (или первичного) ключа, мы можем управлять куда вставить данные.. передвигать их меняя номер записи, но повторяю - номер записи, в этом случае, есть искусственно созданное поле и о его "правильности" мы должны беспокоиться сами.. т.е. заполнять его с следить за нумерацией..
Вообще, это искусственная проблема, которая в нормальных приложениях не возникает, ибо само определение реляционных баз данных даёт на это ответИ нет необходимости стремиться «вставить запись в заданное положение».
Изменять ключевое поле не надо, часто просто не получится.

PS: любое приложение для работы с базой данных - всего лишь способ отображения, изменения добавления и удаления записей.
Форма ответа