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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2008, 23:51   #1
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию Работа с ADO - вопрос

Такой вопрос. Используя ADO открываю таблицу Access. Далее, для того чтобы вставить запись записываю ADOTable1.Edit;
ADOTable1.Insert;
После чего, когда запись вставлена, она автоматически переходит в конец таблицы. Почему это происходит? Ведь метод Insert используется как раз чтобы вставить между заисями. Кто-нибудь знает?
Dux вне форума Ответить с цитированием
Старый 31.03.2008, 23:54   #2
Банзай
Пользователь
 
Аватар для Банзай
 
Регистрация: 21.08.2007
Сообщений: 89
По умолчанию

а сортируется-то видать по индексу?
подписываюсь
Банзай вне форума Ответить с цитированием
Старый 01.04.2008, 00:03   #3
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

А как отключить эту сортировку?
Dux вне форума Ответить с цитированием
Старый 01.04.2008, 02:17   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Переключить на индекс по тому полю, по которому вы хотите иметь сортировку.
mihali4 вне форума Ответить с цитированием
Старый 01.04.2008, 02:33   #5
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Переключить на индекс по тому полю, по которому вы хотите иметь сортировку.
Ув. Mihali, я в этом деле чайник, нельзя ли по-подробнее?
Dux вне форума Ответить с цитированием
Старый 01.04.2008, 06:12   #6
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Цитата:
Сообщение от Dux Посмотреть сообщение
Такой вопрос. Используя ADO открываю таблицу Access. Далее, для того чтобы вставить запись записываю ADOTable1.Edit;
ADOTable1.Insert;
После чего, когда запись вставлена, она автоматически переходит в конец таблицы. Почему это происходит? Ведь метод Insert используется как раз чтобы вставить между заисями. Кто-нибудь знает?
Я думаю с этим придется смириться. Почитайте внимательно хелп. Это действует только для таблиц парадокса. Выдержка из хелпа Insert method (TDataSet):
Цитата:
...
- For Paradox tables with primary indexes, the record is inserted into the dataset in a position based on its index.
- For Paradox tables without primary indexes, the record is inserted into the dataset at the current position.
...
Для dBase, FoxPro и Access запись добавляется в конец таблицы:
Цитата:
...
- For dBASE, FoxPro, and Access tables, the record is physically appended to the dataset at the end. If an index happens to be active, the new record may appear in a position relative to the index, but the record is still actually stored at the end of the table.
...
А с учетом того, что вы используете ADO для связи с таблицей, то действует, IMHO, скорее всего последнее:
Цитата:
...
- For SQL databases, the physical location of the insert is implementation-specific. For indexed tables, the index is updated with the new record information.
...
Тоесть физическое положение записи в таблице определяется драйвером. Хотя в последнем я могу и ошибаться.
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Старый 01.04.2008, 14:26   #7
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Andrei, большое спасибо за информацию. Ситуация прояснилась..
Dux вне форума Ответить с цитированием
Старый 01.04.2008, 14:51   #8
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Еще один вопрос, а можно ли через ADO работать с таблицами Paradox? Если да, то через какой провайдер?
Dux вне форума Ответить с цитированием
Старый 01.04.2008, 15:52   #9
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Цитата:
Сообщение от Dux Посмотреть сообщение
Еще один вопрос, а можно ли через ADO работать с таблицами Paradox? Если да, то через какой провайдер?
Можно. Через Microsoft OLE DB Provider for ODBC drivers.

Можно вопрос? Если не секрет, зачем вам понадобилось физически вставлять записи в середину таблицы? Это же не корректно. При физической вставке записи в середину таблицы приложению приходится переписывать всю таблицу, начиная с того места, куда вставили запись и до конца таблицы. Мало того, что этот процесс отнимает массу времени, есть вероятность в процессе этих перезаписей разрушения таблицы и потери данных. Особенно в больших таблицах.

Существует же масса неразрушающих способов, таких как SQL запросы, индексы и пр. для того чтобы предоставить юзеру информацию в удобоваримом для него виде. Я бы пошел по этому пути.
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Старый 01.04.2008, 16:39   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Mihali, я в этом деле чайник, нельзя ли по-подробнее?
Записи в таблице базы данных находятся, в общем-то говоря, в довольно хаотическом порядке.
Для структуризации или "наведения порядка" существуют так называемые индексы, то есть (дополнительные) индексные файлы, в которых записывается нужный для вывода порядок записей относительно того или иного поля записи.
Поскольку индексы привязываются к определенным полям, вследствие этого мы можем запросто сортировать записи по тому или иному полю.
Что касается "чайника", то есть целая серия книг, в том числе и по базам данных, для упомятой кухонной утвари...
Всего-то нужно заглянуть в вечно первую тему в разделе "Общие вопросы Delphi".
mihali4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
вопрос по сокетам и общение как в ICQ.Сложный вопрос... Руслантус Общие вопросы C/C++ 2 12.08.2008 21:10
Вопрос: работа с окнами Акашаев Нурлан Общие вопросы Delphi 1 26.06.2008 10:12
Работа с циклами 2. Вопрос SPQR Помощь студентам 5 27.10.2007 11:20