ZQuery.Delete removes a record in another table

Forum related to SQLite

Moderators: gto, cipto_kh, EgonHugeist

Post Reply
vinni
Fresh Boarder
Fresh Boarder
Posts: 4
Joined: 13.08.2010, 06:58
Contact:

ZQuery.Delete removes a record in another table

Post by vinni »

Hi!

The situation. There is a table (in SQLite3), named Table1. And a query ZQuery1. Do the following:

[php]ZQuery1.SQL.Text := 'select * from table1';
ZQuery1.Open;
ZQuery1.Delete;
[/php]

So, the record is removes from both ZQuery1 and table1 (located in database).

Is it normal? How can I to delete a record from ZQuery1 only?

Thanks!
mrLion
Senior Boarder
Senior Boarder
Posts: 71
Joined: 20.03.2010, 10:17

Post by mrLion »

вообще-то нормально. так и должно быть. :) Причем, судя по тексту удаляется та запись на которой стоит указатель. Учитывая, что запрос не содержит директиву order by, то при каждом обращении может быть произвольная запись. Может быть, если ты поставишь свойство ReadOnly Query (или что-то типа этого) то удаляться не будет. Ниоткуда. Если же тебе нужны только некоторые записи, то используй

... where field=.....

А зачем такая конструкция?
vinni
Fresh Boarder
Fresh Boarder
Posts: 4
Joined: 13.08.2010, 06:58
Contact:

Post by vinni »

У меня выбираются записи из Table1 и встают в стек на некую обработку. Обработка происходит в отдельном потоке. Так вот в качестве стека я хотел использовать ZQuery1, т.к. это самый удобный вариант. После обработки одной записи из стека она должна быть удалена - соответственно, она удалялась и из основной таблицы Table1.
Теперь сделал по-другому. Создал еще одну таблицу, в которую запросом выбираются записи из Table1. Это и есть стек. После обработки текущая запись удаляется из этой таблицы через тот же ZQuery. При этом записи в Table1 остаются нетронутыми.
mrLion
Senior Boarder
Senior Boarder
Posts: 71
Joined: 20.03.2010, 10:17

Post by mrLion »

ZQuery.Open;
ZQuery.FetchAll;
ZQuery.First;
For I:=0 to I<=ZQuery.RecordCount do
Begin
... обработка...
ZQuery.Next;
End;

в чем проблема то?
Никакого удаления, просто перебор всех выбранных и подлежащих обработке записей. Или я что-то недопонял?!
vinni
Fresh Boarder
Fresh Boarder
Posts: 4
Joined: 13.08.2010, 06:58
Contact:

Post by vinni »

Ну я же говорю: в отдельном потоке. Чтобы не хранить индекс обрабатываемой записи - просто берем каждый раз первую. А когда станет RecordCount = 0, то Thread.Terminate.

Кстати, а FetchAll зачем?
mrLion
Senior Boarder
Senior Boarder
Posts: 71
Joined: 20.03.2010, 10:17

Post by mrLion »

Зачем, блин, хранить индекс???? И такой подход - просто издевательство. Представь, что таблица хранить 1000 записей. Пе6рвый запрос выбирает 1000, второй 999, 998... ну и т.д. Нагрузка на сервер и сеть - чумовая. FetchAll - принудительно выбирает все записи по условию запроса. А алгоритм последовательно обрабатывает выбранные записи. Потом закрываешь запрос и все, забыл про него.
И причем здесь отдельный поток? БД многозадачная.... Ой... Я работаю с PostgreSQL, может в твоем случае это не так. Я вообще с этими огрызками типа MySQL не имел дела. Задачи не те.

P.S. Ну как вариант попробуй ZTable....
vinni
Fresh Boarder
Fresh Boarder
Posts: 4
Joined: 13.08.2010, 06:58
Contact:

Post by vinni »

Ладно, может быть я не так доходчиво объясняю... Да и смысла нет. А в таблице врядли будет больше 100 записей. По крайней мере сейчас выбор всех записей работатет моментально.
В любом случае, спасибо за совет! :-)
Тему можно закрывать.
User avatar
mdaems
Zeos Project Manager
Zeos Project Manager
Posts: 2766
Joined: 20.09.2005, 15:28
Location: Brussels, Belgium
Contact:

Post by mdaems »

vinni,

Has your problem been solved? Please use english summaries when using other languages on the forum.

Mark
Image
Post Reply