![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Delete в SQLQuery не работает [D7, MySQL]
GL00m © (2007-07-02 12:56:00)Есть поток, в котором выполняется SQLQuery1.Openс запросом типа
SELECT dfield1,dfield2,dfield3 FROM d_table(БД MySQL). После этого выполняется Synchronize(SomeFunc). В функции SomeFuncделаю следующее:
SQLQuery1.First;
while not SQLQuery1.Eof do
begin
...
if SomeVar > 0 then
SQLQuery1.Delete
else
SQLQuery1.Next;
end;
И при этом получаю вечный цикл, когда SomeVar > 0. Никаких ошибок. Сначала думал, что в Query нельзя удалять записи. По хелпу оказалось, что можно. Delete по хелпу вроде бы должен удалять запись и переходить на следующую, а не происходит такого. В чем облажался?
GL00m (2007-07-02 16:03:00) [1]Вложенность запросов примерно вот здесь:
> Не проще ли условие сразу вставить во WHERE-секцию SELECT'а
> для отбора нужных или DELETE'а для удаления ненужных
применительно к моему случаю.
Desdechado (2007-07-02 16:01:00) [2]Причем тут вложенность запросов?
PS а в той пузырящейся жидкости, которую ты описал, островки здравомыслия есть?
GL00m (2007-07-02 15:53:00) [3]
> вставить во WHERE-секцию SELECT'а для отбора нужных
У нас по какой-то причине админ поставил такой mySQL, на котором, по непонятной мне причине не работают вложенные запросы. Он на все вопросы говорит, чтобы все делали как можно проще без всякой вложенности и навороченности запросов. Пол-года назад я в это уже уперся, с тех пор даже не пытаюсь туда соваться.
На самом деле там тащится не вся таблица, а небольшая часть, не больше 80 записей, а делается все это ради "недобавления" повторяющихся записей.
Алгоритм программы туп: из БД mysql берется часть данных за последние сутки с допуском несколько минут, их надо добавить в архивную БД аксесс (не моя идея!!!), из них удаляются те, которые уже присутствуют в аксессе и остатки пихаются в аксесс. По не зависящим от меня причинам ни там, ни там нет уникальных полей, поэтому приходится крутиться как умею. =(
Desdechado (2007-07-02 15:19:00) [4]А мне не понятно, зачем тащить всю таблицу на клиента, да еще и в кэширующий датасет отправлять, чтоб потом по какому-то условию убрать записи. Не проще ли условие сразу вставить во WHERE-секцию SELECT'а для отбора нужных или DELETE'а для удаления ненужных?
GL00m (2007-07-02 15:07:00) [5]Спасибо! Все решилось путем добавления на форму DataSetProvider'а и ClientDataSet'а. Дальше в SomeFunc использую вместо SQLQuery1 ClientDataSet1.
Еще раз спасибо!
GL00m (2007-07-02 14:28:00) [6]
> Вообще-то я имел в виду не концепцию программы без потоков,
> а просто попробовать удалять не в потоке, для эксперимента.
ааа... ну поздно уже, теперь понятно куда копать =)
Desdechado (2007-07-02 14:00:00) [7]Johnmen © (02.07.07 13:29) [4]
Точно. Этого зверя не использую, обычно юзаю SQLDataset, вот и забыл...
> Без потоков не получается - долгая история, но нет.
Вообще-то я имел в виду не концепцию программы без потоков, а просто попробовать удалять не в потоке, для эксперимента.
GL00m (2007-07-02 13:46:00) [8]Без потоков не получается - долгая история, но нет.
В ... вряд ли, там ничего относящегося к этому квери нету.
Блажь-не блажь, но мне так удобнее работать.
> Всё это враки изначально, ибо TSQLQuery не только однонаправленный,
> но и редактированию не подлежит.О чём, кстати, и написано
> в упомянутом хелпе.
Спасибо, действительно, просто как обычно не дочитав описания компонента в хелпе тупо ткнул в Methods и получил в списке методов именно для TSQLQuery Methodsметод Delete. Хотя на странице с описанием TSQLQuery: There is no built-in editing support.
Johnmen (2007-07-02 13:29:00) [9]
> GL00m (02.07.07 12:56)
Всё это враки изначально, ибо TSQLQuery не только однонаправленный, но и редактированию не подлежит.
О чём, кстати, и написано в упомянутом хелпе.
Сергей М. (2007-07-02 13:21:00) [10]Мне непонятна вот эта блажь - открывать НД в одном потоке, чтобы работать с ним в другом ..
Более того, вряд ли MySQL допустит такую вольность
Anatoly Podgoretsky (2007-07-02 13:14:00) [11]> GL00m (02.07.2007 12:56:00) [0]
Возможно в ...
Desdechado (2007-07-02 13:09:00) [12]A без потоков получается?