![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Stack overflow [D6, WinXP]
Roman-620 © (2005-08-08 11:45:00)Такая проблемка.
При работе программы выскакивает ошибка "Stack Overflow".
Причём я сам-то в этот момент стек не использую как таковой.
Имеется большая табличка StringGrid содержимое которой экспортируется в Excel (Ole)
XLApp.WorkBooks[1].WorkSheets[1].Cells[i,j]:=StringGrid1.Cells[j,i];
В цикле.
И вот в определённый момент этот цикл прерывается указанной ошибкой.
Видимо в этот момент средства Delphi / Windows действительно используют стек.
Как избавиться от этой ошибки или же каким-нибудь другим образом производить экспорт данных?
Ни таблиц, ни запросов, ни баз данных как таковых нет вообще.
Есть просто стандартная StringGrid c набором значений.
For i:=1 to n do
Begin
XLApp.WorkBooks[1].WorkSheets[1].Cells[i,1]:=StringGrid1.Cells[0,i];
XLApp.WorkBooks[1].WorkSheets[1].Cells[i,2]:=StrToInt(StringGrid1.Cells[1,i]);
...
XLApp.WorkBooks[1].WorkSheets[1].Cells[i,3]:=StrToDataTime(StringGrid1.Cells[18,i]);
End;
Из этого понятно, что вообще делается в цикле.
Так вот, цикл до конца не проходит.
На каком-то из шагов он прерывается вышеобозначенным сообщением об ошибке.
Polevi (2005-08-09 08:41:00) [1]какой ужасный код
на королевстве есть статья на тему работы с Excel, почитай ее
GanibalLector (2005-08-09 00:17:00) [2]>StrToInt,StrToDataTime
без них пробовал??? Для примера сделай что-то типа :='LOL';
или try/except поставь ;)
>For i:=1 to n do
я надеюсь,что n:=StringGrid1.RowCount -1
Slym (2005-08-08 15:39:00) [3]Roman-620 (08.08.05 14:44) [6]
XLApp.WorkBooks[1].WorkSheets[1];
А разница большая...
XLApp.WorkBooks[1].WorkSheets[1]:
1. Поиск проперти WorkBooks.
2. Вызов Функции чтения проперти WorkBooks с параметром 1
3. Поиск проперти WorkSheets.
4. Вызов Функции чтения проперти WorkSheets с параметром 1
И это у тебя n*18 раз!
А про Stack Overflow - вроде все чисто... Смотри в других местах, ибо зачатие ошибки может происходить в ином месте от ее рождения
Roman-620 (2005-08-08 14:44:00) [4]2 Slym
Не вижу разницы между моим и твоим кодом.
Дело в том, что у меня экспортируются значения не все как строчки, а некоторые как даты, цифры и т.д.
А если написать упрощённо, то твой код как раз и получится.
И вот именно в этом цикле и возникает такая хрень
Slym (2005-08-08 14:04:00) [5]var WorkSheet:variant;
i,j:integer;
begin
WorkSheet:=XLApp.WorkBooks[1].WorkSheets[1];
For i:=1 to n do
for j:=0 to 18 do
WorkSheet.Cells[i,j+1]:=StringGrid1.Cells[0,i];
End;
Roman-620 (2005-08-08 12:31:00) [6]Никаких БД.
Просто StringGrid с набором данных
dmitry501 (2005-08-08 11:51:00) [7]БД IB используется?
Roman-620 (2005-08-08 11:46:00) [8]Надо срочно
Roman-620 (2005-08-08 11:46:00) [9]Надо срочно