Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.068 c
2-1191676736
Jiku
2007-10-06 17:18
2007.11.11
Как определить адрес в строке активного окна проводника


11-1176224694
Don
2007-04-10 21:04
2007.11.11
Владимиру по KOLadd


15-1191866338
DeadLord
2007-10-08 21:58
2007.11.11
странное поведение StringGrid


15-1191682768
новый админ
2007-10-06 18:59
2007.11.11
медленный доступ к удаленному серверу


2-1189405023
Mariya
2007-09-10 10:17
2007.11.11
Поиск в Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский