Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 464

/ вопрос открыт /

Здравствуйте, эксперты!
Такой вопрос. Используя ADO открываю таблицу Access. Далее, для того чтобы вставить запись записываю ADOTable1.Edit;
ADOTable1.Insert;
После чего, когда запись вставлена, она автоматически переходит в конец таблицы. Почему это происходит? Ведь метод Insert используется как раз чтобы вставить между заисями. Пожалуйста подскажите.

Dux Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Dux (статус: Посетитель)
Вопрос отправлен: 31 марта 2008, 21:47
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Dux!
Вас жестоко обманули. Метод Insert вставляет запись. Но дело в том, что в таблице базы данных, пока записи не отсортированы говорить о порядке записей бессмысленно. Можно конечно говорить о их физическом расположении, но закладываться на это не стоит - каждый сервер имеет законное право переставлять местами записи при выдаче их клиенту, главное, что бы они удоволетворяли результатам запроса.
Почему так? это основа реляционных баз данных.
Если хотите, что бы записи вставлялись в определённых позициях, нужно ввести суррогатный ключ и отсортировать запрос по этому ключу. Таким ключём может быть дата или просто номер. При вставке новой записи нужно будет просто росчитать положение.
Попробую объяснить почему сделали так странно. В самом простом приближении, таблица базы данных - это типизированный файл. Каждая запись занимает какое то место. Когда запись удаляют, никогда не происходит физического "подтягивания хвоста" и "укорачивания файла". Это кажеться безумием, ведь в файле будут "дыры". Но сжатие файла после каждой записи сильно бы ударило по производительности. Вместо этого запись помечается как удалённая, а когда вставляется новая запись, но ищеться "дырка" подходящего размера и запись вставляется туда.
Поэтому, через некоторое время угадать, куда будет вставленна запись практически нереально. Конечо, сервера делают некоторые ухищения, что бы скрыть и упростить это. Но полагаться на порядок записей нельзя. Это сугубо личное дело каждого сервера БД.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 1 апреля 2008, 00:44
Оценка за ответ: 5

Комментарий к оценке: Большое спасибо за содержательный ответ!

Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:52
Выполнено за 0.02 сек.