![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не понятно что удерживает таблицу [D7, ADS]
kyn66 © (2009-10-28 12:42:00)Добрый день. Для временного хранения использую таблицу на диске. Перед использованием ее очищаю
if Cps1Tbl.Active then
Cps1Tbl.Close;
Cps1Tbl.Exclusive := True;
Cps1Tbl.EmptyTable;
Cps1Tbl.Exclusive := False;
Cps1Tbl.Open;
.. Нашпиговываю данными
while not OborotQuery.EOF do
begin
Cps1Tbl.InsertRecord([OpsTblKod.Value, OborotQueryTovKod.Value,
OborotQueryCena.Value,
OborotQueryKolOst.Value, OborotQuerySumOst.Value,
OborotQueryKolPol.Value, OborotQuerySumPol.Value,
OborotQueryKolReal.Value, OborotQuerySumReal.Value,
OborotQueryOstMesKol.Value, OborotQueryOstMesSum.Value]);
OborotQuery.Next;
end;
Затем выбираю из нее данные данные по критерию
CpsQuery.SQL.Clear;
CpsQuery.SQL.Add('SELECT DISTINCT RegKod,TovKod,TovCena FROM Cps1 ORDER BY RegKod');
CpsQuery.Open;
CpsQuery.First;
while not CpsQuery.EOF do
begin
Cps2Tbl.InsertRecord([CpsQueryRegKod.Value, CpsQueryTovKod.Value, CpsQueryTovCena.Value]);
CpsQuery.Next;
end;
За первым проходом все нормально. Стоит повторно выполнить эту опреацию - ошибка именно на этом месте Cps1Tbl.EmptyTable; http://yurec66.narod.ru/Vopros/errcps1.jpg/Такое ощущение, что таблица почему то не закрывается, чтото ее удерживает.
kyn66 (2009-10-28 13:43:00) [81]Да, забыл добавить(плохо что форум не оборудован редактированием постов) что таблица не имеет ни индексов, ни мемо полей...
Сергей М. (2009-10-28 13:41:00) [82]
> я же ошибку и указал
Это ты видишь при запуске под отладчиком или автономно ?
kyn66 (2009-10-28 13:40:00) [83]Я пошагово прошел полностью для CpsQuery.CloseТАм закрываются курсоры и т.д. и т.п. Т. е. выхода на исключения нету. А за вторым разом до брекпоинта уже не доходит, тем более я писал, что таблица принимает статус [5]
kyn66 (2009-10-28 13:37:00) [84]
> Но для начала [3]
Ну так я же ошибку и указал http://yurec66.narod.ru/Vopros/errcps1.jpg
Сергей М. (2009-10-28 13:34:00) [85]
> Знать бы в каком месте ожидать подвоха
Да что там искать-то ? У тебя там всего-то дюжина строк, можно и пошагово пройтись ..
Но для начала [3]
kyn66 (2009-10-28 13:31:00) [86]Не успел сказать об этом. Действительно, отлавливать закрытие сложно. Знать бы в каком месте ожидать подвоха, на что конкретно обратить внимание.
Сергей М. (2009-10-28 13:24:00) [87]
> Anatoly Podgoretsky © (28.10.09 13:21) [8]
Можно и не поймать.
Но в голове при этом должна родиться мысль - искать почемуоно не клюёт
Anatoly Podgoretsky (2009-10-28 13:21:00) [88]> Сергей М. (28.10.2009 13:18:07) [7]
Можно и не поймать, ведь никакой обработки ошибок в коде нет, есть увереность, что ошибок НИКОГДА не будет.
Сергей М. (2009-10-28 13:18:00) [89]
> kyn66 © (28.10.09 13:06) [2]
>
> Закрыл
Значит не закрыл. Чудес-то не бывает)
Ставь брейкпойнт на CpsQuery.Close и лови закрытие.
Вот как поймаешь, так и поедем дальше.
Anatoly Podgoretsky (2009-10-28 13:17:00) [90]
> Подсознательно я понимаю, что ошибка в этом коде
В этом коде ошибки нет.
kyn66 (2009-10-28 13:15:00) [91]Если размышлять логически без кода... Есть открытая таблица с набором данных. Выполняем запрос для олучения данных из этой таблицы. После получения запроса таблица не нужна. Закрываем ее. Обработав запрос , закрываем и его. Повторяем действия..... - в отладчике свойства таблицы:
Active - False
Exclusive - True;
Вроде все должно быть нормально. Выполняю очистку - обломс!
kyn66 (2009-10-28 13:09:00) [92]Подсознательно я понимаю, что ошибка в этом коде
CpsQuery.SQL.Clear;
CpsQuery.SQL.Add('SELECT DISTINCT RegKod,TovKod,TovCena FROM Cps1 ORDER BY RegKod');
CpsQuery.Open;
CpsQuery.First;
Т.к. отключая его, ошибки не возникает. Но без этого куска никак. Вот и непонимаю, в чем дело...
Anatoly Podgoretsky (2009-10-28 13:09:00) [93]> kyn66 (28.10.2009 12:42:00) [0]
Между прочим, обычно приложение указывает ошибку, если нет то убери except end
kyn66 (2009-10-28 13:06:00) [94]Закрыл, просто строка не захватилась в код
while not CpsQuery.EOF do
begin
Cps2Tbl.InsertRecord([CpsQueryRegKod.Value, CpsQueryTovKod.Value,
CpsQueryTovCena.Value]);
CpsQuery.Next;
end;
CpsQuery.Close;
Сергей М. (2009-10-28 13:02:00) [95]
> чтото ее удерживает
CpsQuery ее удерживает - ты же не закрыл этот запрос