|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.04.2007, 18:23 | #1 |
Регистрация: 10.04.2007
Сообщений: 4
|
Delphi 7 + access + excel = out of memory
программер я плохой, но диплом писать надо...
Смысл проги такой: есть таблица access со стат данными про предприятия (7 показателей за каждый квартал с 2000 по 2006 год, итого, 1000 строк и ок. 200 столбцов). Соединяюсь через ado, Делаю выборку из таблицы (выбрать предприятия опред. отрасли и района). Данные отображаются в dbgrid. Далее перегоняю в обычный массив. Затем создаю E:=CreateOleObject('Excel.Applicati on'); Пергоняю из массива в ячейки активной книги. В итоге, после увеличения файла подкачки до 1 Гб прога начала работать (Athlon 2.0, 512 озу). Exe-ник соответственно тоже не запускается на средник по мощности компах. Не могу также при перегоне из массива в excel заполнить одну ячейки в строке (заголовки к таблице) - в этом случае гига оперативы не хватает! Короче, подскажите, что делать, плз!!! Вот код программы: Код:
|
13.04.2007, 08:53 | #2 |
Форумчанин
Регистрация: 03.11.2006
Сообщений: 321
|
В SQL не силён, но могу сказать, что в Вашей программе проблема в подходе к решению, надо не загонять данные в массив:
for i:=1 to kolzap do begin mas_data2[i,1]:=fields[0].AsFloat; sheet.cells[i+1,1]:=mas_data2[i,1]; mas_data2[i,2]:=fields[1].AsFloat; sheet.cells[i+1,2]:=mas_data2[i,2]; mas_data2[i,3]:=fields[2].AsFloat; sheet.cells[i+1,3]:=mas_data2[i,3]; mas_data2[i,4]:=fields[3].AsFloat; sheet.cells[i+1,4]:=mas_data2[i,4]; mas_data3[i,1]:=fields[4].AsString; sheet.cells[i+1,5]:=mas_data3[i,1]; mas_data3[i,2]:=fields[5].AsString; sheet.cells[i+1,6]:=mas_data3[i,2]; k:=7; for j:=(nachalo-1) to (konec-1) do begin mas_data[i,j]:=fields[j].AsFloat; sheet.cells[i+1,k]:=mas_data[i,j]; k:=k+1; end; а записи нужные сразу скидывать в нужный файл. |
13.04.2007, 14:26 | #3 |
Владимир М.
Участник клуба
Регистрация: 30.10.2006
Сообщений: 1,289
|
исправления :
1) сделать нормальную реляционную БД, а не все в одной таблице хранить. 2) использовать саму БД () или файлы для промежуточной обработки данных. 3) генерировать файл xml вместо xls, и потом вызвать метов saveas Excel.Application - xls и получим. / заполнение по ячейкам книги в памяти 1000 строк - это изврат. сам так раньше делал /
Берегите друг друга!
|
23.04.2007, 18:00 | #4 |
Пользователь
Регистрация: 23.04.2007
Сообщений: 38
|
Попробуй свою базу в Access экспортировать в таблицы Paradox7-8 или DBase. Потом в Database desctop отредактировать. А в DBGrid с помощью объекта TTable установить в поле Database свою базу
|
27.04.2007, 20:55 | #5 |
Новичок
Джуниор
Регистрация: 25.04.2007
Сообщений: 1
|
О! Люди, а не подскажете как правильно выкидывать данные в excel массивом, а то я пробовал, че-то не получается, пришлось по ячейкам данные вносить.
|
06.07.2008, 07:16 | #6 | |
Форумчанин
Регистрация: 29.06.2008
Сообщений: 603
|
Цитата:
Например, так: Uses ComObj; ... var FBuffer, RANGE, CELL1, CELL2 : Variant; ... FBuffer := VarArrayCreate([1, 100, 1, 100l], varVariant); for i := 1 to 100 do for j := 1 to 100 do FBuffer[i,j] := Random; CELL1 := FWorkBook.WorkSheets[1].Cells[1, 1]; CELL2 := FWorkBook.WorkSheets[1].Cells[100, 100]; RANGE := FWorkBook.WorkSheets[1].Range[CELL1, CELL2]; RANGE.Value := FBuffer; |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
экспорт отчета из Access 2007 в Excel. Возможно? | perlik0 | Microsoft Office Access | 2 | 21.07.2008 13:18 |
Memory Leak | Старовъръ | БД в Delphi | 2 | 14.07.2008 20:01 |
Экспорт из Access в Excel, Экспорт из отчётов в таблицу Excel | Kissedbythegod | Microsoft Office Access | 1 | 31.05.2008 22:15 |
PrtScSysRq vs Memory | JoanM | Общие вопросы Delphi | 17 | 10.01.2008 09:06 |