![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с удалением строк в базе данных [D7, Paradox]
Святослав © (2006-01-11 01:06:00)Программно удаляю строки из БД
Query1:=TQuery.Create(nil);
Query1.DatabaseName:=Path;
Query1.SQL.Clear;
Query1.SQL.Add('delete from info where pole=znachenie');
Query1.ExecSQL;
Query1.ApplyUpdates;
Query1.Destroy;
Выскакивает ошибка «Dataset not in edit or insert», подскажите где искать и как с ней бороться???
Если сделать так
Query1:=TQuery.Create(nil);
Query1.DatabaseName:=Path;
Query1.SQL.Clear;
Query1.SQL.Add('delete from info where pole=znachenie');
Query1.ExecSQL;
//Query1.ApplyUpdates;
Query1.Destroy;
Все работает, но физически строки из таблицы не удаляются, сколько база занимала столько и занимает
Святослав (2006-01-12 18:51:00) [1]Спасибо всем!
Буду работать дальше...
evvcom (2006-01-12 15:05:00) [2]
> Можно ли послать SQL-запрос который гарантировал бы изменения
> и на физическом уровне или за это отвечает исключительно
> СУБД?
За это отвечает исключительно СУБД! В твоем случае изменения происходят на физическом уровне. Разве после удаления записей ты их продолжаешь видеть? А в качестве СУБД выступает движок BDE.
А что касаемо размера, так это нормально. Посмотри в любом инструменте, Database Desktop например, там есть поле с галочкой Pack Table. Аналогично в BDE есть функция DbiPackTable.
Reindeer Moss Eater (2006-01-12 14:44:00) [3]Можно ли послать SQL-запрос который гарантировал бы изменения
Если бы таковой был, то его можно было бы послать.
Святослав (2006-01-12 14:19:00) [4]
> Desdechado ©
> если внимательно почитать справку, то ApplyUpdates просто
> передает изменения в клиентском датасете на сервер, а у
> тебя никакого клиентского датасета нет, вот и матюк
Спасибо, помогло понять!!!
> Johnmen ©
Еще вопрос:
Можно ли послать SQL-запрос который гарантировал бы изменения и на физическом уровне или за это отвечает исключительно СУБД?
База была на 500 000 позиций, удалил до 10 000, она как занимала 100м так и занимает, теперь если добавлю еще 500 000 то она начнет плодиться, рано или поздно сожрет всю память!
Что делать?
Desdechado (2006-01-12 12:41:00) [5]если ты явно не стартовал транзакцию, то и подтверждать ее явно не надо
если стартовал, то подтверждай
если внимательно почитать справку, то ApplyUpdates просто передает изменения в клиентском датасете на сервер, а у тебя никакого клиентского датасета нет, вот и матюк
Johnmen (2006-01-12 12:41:00) [6]Правильно не знаешь. Транзакии к Парадоксу отношения не имеют.
Здесь ещё читани
http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988623315&n=14
Святослав (2006-01-12 12:35:00) [7]Все дело в транзакциях, чтоб изменения вступили в силу SQL – запрос надо подтвердить, что-то вроде COMMIT WORK! Но где и как им пользоваться не знаю! если кто знает как это сделать из DELPHI под BDE подскажите!!!
Query1.ApplyUpdates по идей должен завершить транзакцию, но выскакивает матюк
0bsid (2006-01-11 17:51:00) [8]ExecSQL и Free
размер базы запросто может и не меняться, но запись удалится
evvcom (2006-01-11 16:21:00) [9]Кстати-n (какое уж там по счету), вероятнее всего вообще ничего не удаляется.
Резюме - см. Anatoly Podgoretsky © (11.01.06 14:59) [7]
Anatoly Podgoretsky (2006-01-11 14:59:00) [10]Не тебе, а в общий поток.
А резюме стандартное - переписать все нафиг.
Johnmen (2006-01-11 14:18:00) [11]>Anatoly Podgoretsky © (11.01.06 14:05) [5]
Это мне?
Anatoly Podgoretsky (2006-01-11 14:05:00) [12]Кстати и возможные утечки тоже не из этой.
Desdechado (2006-01-11 13:13:00) [13]записи удаляются, поскольку тебе они недоступны
а проблемы физического хранения - не твоя забота, а движка БД
Johnmen (2006-01-11 08:57:00) [14]кстати-2, Destroy тоже не из этой...
Johnmen (2006-01-11 08:54:00) [15]кстати, Clear тоже не из этой...
sniknik (2006-01-11 08:17:00) [16]ApplyUpdates это вообще "не из той оперы", а размер... ищи в форуме про упаковку таблиц