![]() |
|
![]() ![]() ![]() |
|
Lunatikus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 29.6.2007 Репутация: 1 Всего: 6 |
Здравствуйте.Подскажите,пожалуйста,кто знает,как после ADOQuery.open получить все значения какого-то поля списком или массивом(чтобы значения шли в строгой последовательности как выдает запрос ADOQuery)?И возможно ли это?Просто перебор 1млн. записей с помощью next затормаживает.А перебор именно для считывания этих значений и на их основе вычисления новых для последующего апдейта таблицы в базе.База MS SQL Server 2000
Это сообщение отредактировал(а) Lunatikus - 10.9.2007, 12:37 -------------------- TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games). сайт гильдии |
|||
|
||||
Savek |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 10.4.2006 Где: Воронеж Репутация: 7 Всего: 7 |
Вряд ли, да и чем массив или список лучше RecordSet-a?
|
|||
|
||||
Lunatikus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 29.6.2007 Репутация: 1 Всего: 6 |
чем лучше,не знаю,не работал с рекордсетом.Какие методы мне надо знать,чтобы получить любое значение любого поля,зная его номер внутри рекордсета?Еще увидел,что у него,Как и у, ADOQuery етсь понятие текущей записи(если бы из адоквери можно было вытащить значение не текущей и я бы это знал,я бы не парился со списком отдельным).Каким образом ее передвигать?Спасибо за помощь =)
Это сообщение отредактировал(а) Lunatikus - 10.9.2007, 13:01 -------------------- TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games). сайт гильдии |
|||
|
||||
ZeroMem |
|
|||
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 24.8.2004 Где: Комсомольск-на-Ам уре Репутация: нет Всего: нет |
Используй компоненты EhLib MemTable. Там можно указать свойство загружать ВСЕ(!!!) в массив, а потом достаточно просто получить к нему доступ. Вот только кажется там каждый элемент будет типа Variant... кажется. А вообще куском лучше не грузить. Лучше попробовать кусками этим же компонентом тягать данные.
|
|||
|
||||
Lunatikus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 29.6.2007 Репутация: 1 Всего: 6 |
представь себе хотя бы 10 полей типа врачар(255) в миллион строк...и все это вариант...
-------------------- TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games). сайт гильдии |
|||
|
||||
Savek |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 10.4.2006 Где: Воронеж Репутация: 7 Всего: 7 |
First; Last; Next; Prior; MoveBy; Locate; lookup; FindFirst; FindNext; .. и т.д. Если работаешь с базами данных про массивы забудь! Опиши подробнее задачу попробуем найти правильное решение |
|||
|
||||
Lunatikus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 29.6.2007 Репутация: 1 Всего: 6 |
задача уже решена,но выполнение процеса занимает три часа минимум.А все почему?Ситуация примерно такая,без улсожнений:
представьте календарь и несколько артикулов(товаров).ДЛя каждого артикула свой календарь,В котором ко дню привязан определенный остаток,прогноз(получается в минус остатка текущего),заказ(тоже в минус остатку),приход товара(в плюс).На основе этих полей надо просчитать остатки будущих дней(прогноз,заказы и приходы будущих дней известны и известен остаток на текущий день).Как я делал?В лоб.Я перебирал записи последовательно,сохранял остаток в переменную.Вычитал из нее значения из следующей записи и так далее....загрузка произошла изза того,что я каждый такой шаг выполняю запрос на запись в базу полученного остатка.А правильнее надо было бы делать один запрос в конце.Но тогда надо расчитать остатки программно опять же перебором,чтобы узнать значения поля остатка.Потому и хочу получить сразу весь список значений,чтобы работать с ним,а не использовать next,ибо это зло -------------------- TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games). сайт гильдии |
|||
|
||||
Savek |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 10.4.2006 Где: Воронеж Репутация: 7 Всего: 7 |
||||
|
||||
Lunatikus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 29.6.2007 Репутация: 1 Всего: 6 |
никаких таблиц.Есть запрос,результат которого-этот самый календарь на все артикулы:
---data-----------articul----ostatok----prognoz----zakaz---prihod--- 01.01.2007 A1 10 1 0 0 02.01.2007 A1 NULL 1 1 10 03.01.2007 A1 NULL 1 0 0 01.01.2007 A2 15 2 2 0 02.01.2007 A2 NULL 2 0 0 03.01.2007 A2 NULL 2 0 4 01.01.2007 A3 5 1 0 0 02.01.2007 A3 NULL 1 1 0 03.01.2007 A3 NULL 1 0 3 примерно это выдает запрос.И вот в этом наборе данных и перебираю по одной строке,считаю остаток следующей строки,записываю его апдейтом.Смещаюсь вниз,снова считаю...вот так ![]() елси бы я знал сразу все значения всех этих полей и мог к каждому элементу мгновенно доступиться,было бы проще и рациональнее.Но,увы,я не знаю другого метода,кроме как вот так,перебором с next'ом Это сообщение отредактировал(а) Lunatikus - 10.9.2007, 16:10 -------------------- TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games). сайт гильдии |
|||
|
||||
Savek |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 10.4.2006 Где: Воронеж Репутация: 7 Всего: 7 |
||||
|
||||
ALeXandrK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 342 Регистрация: 31.1.2007 Где: Санкт-Петербург Репутация: 2 Всего: 6 |
А почему бы тебе в твой запрос не добавить стрку INSERT INTO temp,
чтобы этот запрос превратился в таблицу, а потом, соответственно, следующим запросом подсчитать тебе все, что нужно и удалить временную таблицу?! Самый быстрый способо в твоем случае - это именно в запросе все считать, т.к. это будет минимальный набор телодвижений (без переходов, подсчетов, записи и т.п.), т.е. сразу очень много лишнего уберешь. Это сообщение отредактировал(а) ALeXandrK - 10.9.2007, 17:17 -------------------- Богат не/ни тот, у кого много, а тот, кому хватает |
|||
|
||||
SergeBS |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 11 Всего: 22 |
Lunatikus,
К Delphi твои проблемы не относятся. Прочитай Грабера(Грубера) про SQL или в BOL. Есть такая штука: агрегатные функции. Например:
Догадайся, что эта строка вычислит ![]() ALeXandrK,
Не "ни тот", а "нЕ тот"! |
||||
|
|||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
||||
|
||||
Lunatikus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 29.6.2007 Репутация: 1 Всего: 6 |
SergeBS, строка вычислит сумму остатков.Плин,Я ,конечно,новичок в программировании БД и составлении запросов SQL.Но не считайте меня совсем дибилом.Значит я не так задачу расписал,что ты предлагаешь мне сумму.Хотите,чтобы я показал вам запрос,который дает календарь?ну ловите.Запрос на столь сложное вычисление значения следующей строки на основе вычисленного уже значения предыдущей.Уже я сделал тему в разделе MS SQL на эту тему,как запросом сделать подобное вычисление.А теперь посмотрите на запрос,который выдает календарь.Писать все таблицы и объяснять,как создавался запрос смысла не вижу-никто не захочет разбираться во множественных связях 5 таблиц и таком вот запросе:
никто не захочет тратить время на разборку этого,или я не прав?) Добавлено через 1 минуту и 58 секунд Akella, как можно перевести в хранимую процедуру выполнение кода проги?Мне для начала тогда надо запросом вычисления сделать.А если это получится и так все будет сервер выполнять...чет я запутался... -------------------- TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games). сайт гильдии |
|||
|
||||
kobra |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 730 Регистрация: 15.6.2005 Где: Грузия, Тбилиси Репутация: 1 Всего: 9 |
честно скозать, не понял алгоритм, но в принципе наверное это не стол важно.
лично я, в любом случае сделал бы на сервере. хатя бы потому что гонять милион записеи по сети не етично. но что косается
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |