|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
12.12.2009, 20:12 | #1 |
Пользователь
Регистрация: 12.12.2009
Сообщений: 18
|
Как сохранить отсортированную таблицу
Здравствуйте, господа.
Помогите, пожалуйста, кто знает. Проблема вот в чем. Открываю таблицу в recordset. Сортирую ее. А вот как сохранить ее в отсортированном виде, не знаю. Можно, конечно, создать новую таблицу и с помощью запросов перекидать туда все по порядку, но при большом количестве записей это занимает часы. |
12.12.2009, 20:45 | #2 |
Участник клуба
Регистрация: 10.08.2009
Сообщений: 1,796
|
Здравствуйте Kingson.
Вы убеждены в целесообразности такого "сохранения", я не понимаю его назначения, объясните зачем требуется такое действие? Евгений. |
13.12.2009, 14:33 | #3 |
Форумчанин
Регистрация: 26.04.2008
Сообщений: 487
|
А если Вам нужно будет несколько сортировок делать, то Вы создадите столько же таблиц? Послушайте совет Евгения.
|
14.12.2009, 10:40 | #4 |
Пользователь
Регистрация: 12.12.2009
Сообщений: 18
|
А целесообразность вот в чем.
Есть две таблицы по 1500000 записей в каждой. Каждую из них надо отсортировать по трем колонкам. Первая сортируется нормально, а вот на сортировку второй уже не хватает памяти. База становится больше 2GB. Так вот, я думаю, если сбросить результат сортировки в таблицу и выгрузить его из памяти, то может и на вторую памяти хватит? А несколько сортировок мне делать не нужно, она нужна одна. |
14.12.2009, 18:33 | #5 |
Участник клуба
Регистрация: 10.08.2009
Сообщений: 1,796
|
Здравствуйте Kingson.
Вы не уловили иронию в предыдущих постах, для таблиц БД сортировка с последующим сохранением результата не нужна в принципе. Евгений. |
16.12.2009, 16:41 | #6 |
Пользователь
Регистрация: 12.12.2009
Сообщений: 18
|
А по моему это Вы меня не поняли.
Мне надо отсортировать две таблицы и это занимает больше памяти, чем Access может себе позволить. Так вот это, на мой взгляд, единственный способ. Отсортировать сперва одну таблицу, скинуть результат в файл, отсортировать другую и потом подгрузить первую. |
16.12.2009, 20:12 | #7 |
Форумчанин
Регистрация: 26.04.2008
Сообщений: 487
|
Если Ваши записи не особо секретные, выложите файл бд хотя бы с одной таблицей, думаю вашу сортировку можно сделать за секунды\доли секунды.
|
16.12.2009, 20:27 | #8 |
Пользователь
Регистрация: 12.12.2009
Сообщений: 18
|
Одна таблица занимает ~100MB и вторая тоже.
Вам все выложить или по частям? Как отсортировать за секунды по одной колонке я и сам знаю, а Вы попробуйте отсортировать таблицу из 1.5 млн. записей по 4-5 колонкам, а потом не выгружая ее вторую так же. И в диспетчере задач можете посмотреть с какой скоростью у Вас убывает память. А когда она будет занята на 2GB access вырубится. Вопрос-то не в том как сортировать, а в том, что огромные отсортированные таблицы не помещаются в памяти access'а. И мне приходится ради разгрузки оной вытряхивать одну из них в файл. И кстати я нашел, что можно таблицу записать в файл с помощью метода recordset.save(параметры). Работает здорово, получается .xml файл, но вот теперь вопрос, а как этот файл загрузить обратно в рекордсет? |
16.12.2009, 21:50 | #9 |
Участник клуба
Регистрация: 10.08.2009
Сообщений: 1,796
|
Здравствуйте Kingson.
"Для тех кто на бронепоезде": Хранимые данные сортировать бессмысленно. Ни "1.5 млн." ни две записи находящиеся в таблице не требуют сортировки для хранения. При необходимости сформировать набор записей с определенной сортировкой обращаются не к таблице а SQL конструкции - запросу (представлению) с заданными параметрами сортировки. А если действительно требуется "пересохранение" с определенной сортировкой (назначение которого я представить не могу) его можно заменить созданием новой таблицы выполнив подобную конструкцию: SELECT Field1, Field2, Field3 INTO Table2 FROM Table1 ORDER BY Field1, Field2 DESC , Field3 без использования рекордсета. Евгений. |
21.12.2009, 21:15 | #10 |
Пользователь
Регистрация: 12.12.2009
Сообщений: 18
|
Здравствуйте, Евгений.
Хорошо Вам говорить про бронепоезда, а у меня над головой висит программа, которая никак не хочет работать, хоть тресни. А главное программа-то вроде не сложная. Есть две таблицы, и их надо сравнить. Выделенного ключевого поля как такового нет. А есть примерно 6 столбцов, которые и выполняют его функцию (этакий комбинированный ключ). Так вот, нужно как-то пометить одинаковые записи, а так же записи где ключевой (комби) столбец одной таблицы больше столбца другой и наоборот. Я делаю это таким образом. Загоняю таблицы в рекордсеты. Сортирую их там, а дальше построчно сравниваю. Вот тут-то и вылезает, то, о чем я писал. Отсортировать две таблицы разом невозможно (не хватает памяти). А может я вообще все неправильно делаю? Может есть какой-нибудь другой, изящный способ решить эту задачу? Может намекнете? Кстати за подсказку спасибо. Попробую. Последний раз редактировалось Kingson; 21.12.2009 в 21:19. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как сохранить картинку.... | Lifefine | Мультимедиа в Delphi | 22 | 24.10.2009 11:43 |
Как сохранить в БД? | Natssska | Помощь студентам | 1 | 11.06.2009 00:27 |
Как правильно сохранить данные в таблицу??? | kAtenok87 | PHP | 4 | 07.05.2009 11:24 |
Сохранить как? | InseR | Общие вопросы Delphi | 31 | 27.06.2007 16:18 |
Как сохранить TfontStyle | Маркъ | Общие вопросы Delphi | 2 | 02.04.2007 18:41 |