![]() |
| ||
|
|
Новости |
Поиск |
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-29 16:04:00) [21]
> Inovet © (29.10.09 15:53) [72]
>Мне вот этот метод больше нравится.
Так это как разновидность метода очистки. Просто EmptyTable как то раньше , на автомате на ум пришло. А вот насчет очистки с помощью
SQL у меня есть непонятки. Когда то задавал вопрос на форуме, но так и не получил ответа. Удаляю из таблицы с 1630918 записями , ну к примеру 110000 строк. Так вот процесс удаления DELETE FROMзанимает некоторое продолжительное время, ну где то сек 30. Не понятно, почему SQL так долго удаляет
Anatoly Podgoretsky (2009-10-29 15:59:00) [22]> kyn66 (29.10.2009 15:55:13) [73]
А ты не путай оценки со своими тараканами, все правильно, оценка точная.
kyn66 (2009-10-29 15:55:00) [23]
> Anatoly Podgoretsky © (29.10.09 15:01) [69]
> > kyn66 (29.10.2009 15:00:08) [68]Ну вот наконец и обругал,
> а сначала приличным прикидывался.
Да и не думал даже обругивать. Просто форум, тем более ветка "Начинающим" и служит для того, чтобы более грамотные товарищи помогали своим начинающим, неопытным и т.д. коллегам, а не хвалились своим мастерством по отношению к слабейшим. И тем более не красиво высказывать свои оскорбления И также учитывая твои способности.... Это к тому, что их недостаточно для быстрого решения простейшей задачи.в их сторону. Модерам, сорри за офтоп.
Inovet (2009-10-29 15:53:00) [24]> [71] kyn66 © (29.10.09 15:49)
>
> > Inovet © (29.10.09 15:46) [70]
>
> [53] - точно в цель! Спасибо еще раз.
А на
[54] Inovet © (28.10.09 19:52)
ты не ответил. Мне вот этот метод больше нравится.
kyn66 (2009-10-29 15:49:00) [25]
> Inovet © (29.10.09 15:46) [70]
[53] - точно в цель! Спасибо еще раз.
Inovet (2009-10-29 15:46:00) [26]> Мне твое предложение подошло очень даже. Все пошло работать
> как надо. Большое спасибо за совет.
Пожалуйста, вот только за какой из
> [53] Inovet © (28.10.09 18:56)
> [54] Inovet © (28.10.09 19:52)
Anatoly Podgoretsky (2009-10-29 15:01:00) [27]> kyn66 (29.10.2009 15:00:08) [68]
Ну вот наконец и обругал, а сначала приличным прикидывался.
kyn66 (2009-10-29 15:00:00) [28]
> Anatoly Podgoretsky © (29.10.09 11:31) [65]
> > kyn66 (29.10.2009 10:31:04) [64]Это к тому, что их недостаточно
> для быстрого решения простейшей задачи.
Ну не всем же носить ордена мастера.... No comments. Некоторые (Inovet) даже дельные советы дают, реально помогающие, прошу заметить...
kyn66 (2009-10-29 14:58:00) [29]
> Inovet © (29.10.09 12:51) [66]
Да нет конечно, повторно ничего не нужно делать. Это я просто случайно нажал второй раз и вышла такая ситуация. Вот и решил ее устранить, т.к. юзер тоже может повторить такие же действия ни о чем не думая.
Мне твое предложение подошло очень даже. Все пошло работать как надо. Большое спасибо за совет.
Inovet (2009-10-29 12:51:00) [30]> Тогда определение назначения не совсем понятно.
Закрытие на уровне файлов закрытых Query. Не стоит её тыркать куда не попадя. Вот твоя задача мне не очень понятна всё к тому чтобы отсортировать и без дублей что ли: вводишь данные, "Затем выбираю из нее данные данные по критерию", затем в другой раз старые удаляешь
Anatoly Podgoretsky (2009-10-29 11:31:00) [31]> kyn66 (29.10.2009 10:31:04) [64]
Это к тому, что их недостаточно для быстрого решения простейшей задачи.
kyn66 (2009-10-29 10:31:00) [32]
Anatoly Podgoretsky © (29.10.09 10:16) [62]
> А что по твоему делает EmptyTable в рамках твоей задачи?
Пардон, действительно пропустил суть своего-же вопроса...
> Anatoly Podgoretsky © (29.10.09 10:17) [63]
> И также учитывая твои способности.
А это к чему?
Anatoly Podgoretsky (2009-10-29 10:17:00) [33]И также учитывая твои способности.
Anatoly Podgoretsky (2009-10-29 10:16:00) [34]> kyn66 (29.10.2009 09:30:00) [60]
А что по твоему делает EmptyTable в рамках твоей задачи?
kyn66 (2009-10-29 10:05:00) [35]
> Inovet © (28.10.09 18:56) [53]
> Короче. Всю ветку не стал читать. ADS может оставлять файлы
> открытыми после закрытия Query для более быстрого открытия
> в следующий раз, не знаю как это с данной проблемой с очичткой
> таблицы соотносится. Попробую AdsCloseSQLStatement - закрывает
> все.
AdsCloseSQLStatement
Completely closes all files associated with any TAdsQuery instance.
Вроде заработало, однако нужно предварительно закрывать CpsQuery.Close. Тогда определение назначения не совсем понятно.
kyn66 (2009-10-29 09:30:00) [36]
> А чем "DELETE FROM Cps1tbl" не устраивает или у тебя DBF?
> Потом под временные лучше временные и применять #Cps1t
Так здесь не удалять нужно. Сперва с одной таблицы(OborotTbl) идет разделенный отбор в две другие(SborTbl и Cps1Tbl) таблицы, данные одной из которых(Cps1) в последствии подвергаются отбору по критерию CpsQuery.SQL.Add('SELECT DISTINCT RegKod,TovKod,TovCena FROM Cps1 ORDER BY RegKod')Вот такая технология.
kyn66 (2009-10-29 09:24:00) [37]
> turbouser © (28.10.09 18:30) [52]
> Точно EmptyTable закрывает таблицу? А если сделать
Похоже на закрытие силком :). Дело в том, что EmptyTable не начнет свою работу, пока таблица активна. Выдается ошибочное сообщение. Поэтому повторное закрытие совершеннот никчему.
turbouser (2009-10-29 02:07:00) [38]
> Amoeba © (29.10.09 01:17) [57]
>
>
> Если
Amoeba (2009-10-29 01:17:00) [39]
> turbouser © (29.10.09 00:01) [56]
>
>
> > Amoeba © (28.10.09 21:13) [55]
>
>
> > это абсолютно излишне
>
> :) не факт. компоненты разные бывают.
Если правильный наследник TDataSet, то факт.
turbouser (2009-10-29 00:01:00) [40]
> Amoeba © (28.10.09 21:13) [55]
> это абсолютно излишне
:) не факт. компоненты разные бывают.