|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Delphi 7 + access + excel = out of memory
В общем, программер я плохой, но диплом писать надо...
Смысл проги такой: есть таблица access со стат данными про предприятия (7 показателей за каждый квартал с 2000 по 2006 год, итого, 1000 строк и ок. 200 столбцов). Соединяюсь через ado, Делаю выборку из таблицы (выбрать предприятия опред. отрасли и района). Данные отображаются в dbgrid. Далее перегоняю в обычный массив. Затем создаю E:=CreateOleObject('Excel.Application'); Пергоняю из массива в ячейки активной книги. В итоге, после увеличения файла подкачки до 1 Гб прога начала работать (Athlon 2.0, 512 озу). Exe-ник соответственно тоже не запускается на средник по мощности компах. Не могу также при перегоне из массива в excel заполнить одну ячейки в строке (заголовки к таблице) - в этом случае гига оперативы не хватает! Короче, подскажите, что делать, плз!!! Вот код программы: var |
#2
|
||||
|
||||
Пиши напрямую из датасэта в Exel
--------------------------------------------- Программирование - не профессия, а стиль жизни |
#3
|
|||
|
|||
Цитата:
Не получится, так как мне нужно предварительно массив обработать (кроме семи показателей будут еще несколько производных) Или как то можно обычный массив загнать в dataset ? |
#4
|
||||
|
||||
Поробуй грузить не поячеечно, а блоками.
|
#5
|
||||
|
||||
Цитата:
После этого пиши так ds.Insert(); ds.FieldByName('name').AsString := 'xxx'; ds.ApplyUpdates(); --------------------------------------------- Программирование - не профессия, а стиль жизни |
#6
|
|||
|
|||
А не может быть проблемы в том, что у меня остаются активными несколько ADOQuery и ADOTable ?
Где здесь вообще ошибка, на какой стадии: delphi и БД, delphi и excel? почему после компиляции программа запускается только с гигабайтным файлом подкачки, хотя в процессе совершенно не тормозит? |
#7
|
||||
|
||||
А еще оптимизируй запросы. Зачем выбирать в запросах все поля (*) если все ты их не используешь?
Например вот: Код:
with unit2.DataModule2.ADOQuery1 do begin Active:=false; sql.Clear; sql.Add('select * '); sql.Add('from alldata'); //+unit1.Form1.Edit1.Text+ sql.add('where region like ''117%'''); active:=true; unit1.Form1.Edit2.Text:=inttostr(unit1.Form1.DBGri d1.DataSource.DataSet.RecordCount); end; Я не в курсе структуры, но вот этот запрос скорее всего аналогичен, точнее результат ты получишь тот же - т.е. количество: Код:
SELECT COUNT(Region) FROM AllData WHERE Region LIKE '117%' |
#8
|
|||
|
|||
Цитата:
Хотя не думал, что даже такие запросы могут быть так требовательны к ресурсам. Табличка то небольшая, всего 1000х200, не думал, что выборка даже всех записей так загружать память системы |
#9
|
||||
|
||||
Цитата:
|
#10
|
|||
|
|||
Цитата:
да у меня даже .exe файл не открывается (пишет, что недостаточно памяти), хотя выборка данных и создание excel.application начинается только после нажатия одной кнопки на форме |
#11
|
|||
|
|||
Может быть такое, что прогу я компилил на мощном компе с большим файлом подкачки, а запускаю на менее мощном и из-за этого ошибка?
|
#12
|
||||
|
||||
Цитата:
--------------------------------------------- Программирование - не профессия, а стиль жизни |