Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.11;
Скачать: CL | DM;

Вниз

Delete в SQLQuery не работает   Найти похожие ветки 

 
GL00m   (2007-07-02 12:56) [0]

Есть поток, в котором выполняется 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 по хелпу вроде бы должен удалять запись и переходить на следующую, а не происходит такого. В чем облажался?


 
Desdechado ©   (2007-07-02 13:09) [1]

A без потоков получается?


 
Anatoly Podgoretsky ©   (2007-07-02 13:14) [2]

> GL00m  (02.07.2007 12:56:00)  [0]

Возможно в ...


 
Сергей М. ©   (2007-07-02 13:21) [3]

Мне непонятна вот эта блажь - открывать НД в одном потоке, чтобы работать с ним в другом ..

Более того, вряд ли MySQL допустит такую вольность


 
Johnmen ©   (2007-07-02 13:29) [4]


> GL00m   (02.07.07 12:56) 

Всё это враки изначально, ибо TSQLQuery не только однонаправленный, но и редактированию не подлежит.
О чём, кстати, и написано в упомянутом хелпе.


 
GL00m   (2007-07-02 13:46) [5]

Без потоков не получается - долгая история, но нет.
В ... вряд ли, там ничего относящегося к этому квери нету.
Блажь-не блажь, но мне так удобнее работать.


> Всё это враки изначально, ибо TSQLQuery не только однонаправленный,
>  но и редактированию не подлежит.О чём, кстати, и написано
> в упомянутом хелпе.

Спасибо, действительно, просто как обычно не дочитав описания компонента в хелпе тупо ткнул в Methods и получил в списке методов именно для TSQLQuery Methods метод Delete. Хотя на странице с описанием TSQLQuery: There is no built-in editing support.


 
Desdechado ©   (2007-07-02 14:00) [6]

Johnmen ©   (02.07.07 13:29) [4]
Точно. Этого зверя не использую, обычно юзаю SQLDataset, вот и забыл...

> Без потоков не получается - долгая история, но нет.
Вообще-то я имел в виду не концепцию программы без потоков, а просто попробовать удалять не в потоке, для эксперимента.


 
GL00m   (2007-07-02 14:28) [7]


> Вообще-то я имел в виду не концепцию программы без потоков,
>  а просто попробовать удалять не в потоке, для эксперимента.

ааа... ну поздно уже, теперь понятно куда копать =)


 
GL00m   (2007-07-02 15:07) [8]

Спасибо! Все решилось путем добавления на форму DataSetProvider"а и ClientDataSet"а. Дальше в SomeFunc использую вместо SQLQuery1 ClientDataSet1.
Еще раз спасибо!


 
Desdechado ©   (2007-07-02 15:19) [9]

А мне не понятно, зачем тащить всю таблицу на клиента, да еще и в кэширующий датасет отправлять, чтоб потом по какому-то условию убрать записи. Не проще ли условие сразу вставить во WHERE-секцию SELECT"а для отбора нужных или DELETE"а для удаления ненужных?


 
GL00m   (2007-07-02 15:53) [10]


> вставить во WHERE-секцию SELECT"а для отбора нужных

У нас по какой-то причине админ поставил такой mySQL, на котором, по непонятной мне причине не работают вложенные запросы. Он на все вопросы говорит, чтобы все делали как можно проще без всякой вложенности и навороченности запросов. Пол-года назад я в это уже уперся, с тех пор даже не пытаюсь туда соваться.
На самом деле там тащится не вся таблица, а небольшая часть, не больше 80 записей, а делается все это ради "недобавления" повторяющихся записей.
Алгоритм программы туп: из БД mysql берется часть данных за последние сутки с допуском несколько минут, их надо добавить в архивную БД аксесс (не моя идея!!!), из них удаляются те, которые уже присутствуют в аксессе и остатки пихаются в аксесс. По не зависящим от меня причинам ни там, ни там нет уникальных полей, поэтому приходится крутиться как умею. =(


 
Desdechado ©   (2007-07-02 16:01) [11]

Причем тут вложенность запросов?

PS а в той пузырящейся жидкости, которую ты описал, островки здравомыслия есть?


 
GL00m   (2007-07-02 16:03) [12]

Вложенность запросов примерно вот здесь:

> Не проще ли условие сразу вставить во WHERE-секцию SELECT"а
> для отбора нужных или DELETE"а для удаления ненужных

применительно к моему случаю.



Страницы: 1 вся ветка

Текущий архив: 2007.11.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
2-1192705820
koss
2007-10-18 15:10
2007.11.11
ICQ и база данных


15-1191501823
Alkid
2007-10-04 16:43
2007.11.11
Common LISP - посоветуйте


2-1192691195
F@T@L_Err0r
2007-10-18 11:06
2007.11.11
COM1


2-1192347654
Vasiliy
2007-10-14 11:40
2007.11.11
InterBase. Попытка соединения с локальной БД в режиме Run-Time


15-1191690459
mike-d
2007-10-06 21:07
2007.11.11
easy - с Днем рождения!