Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Update DB set x=y where ??? Paradox, sql 
:(
    Опции темы
Illusion Dolphin
Дата 25.8.2005, 03:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 2
Всего: 63



Пишу в 4 ночи, может вопрос тупой по сути, но я ничего не въезжаю.
Долгое время у меня была процедура, пишу упрощённо:
Код

for i:=1 to n do
begin
query.close;
query.sql.text:='update "c:\1.db" set x="'+myvar+'" where ID = '+inttostr(i);
query.ExesSQL;
end;

x - поле типа BLOB Memo.
работала хорошо, но долго. Решил упростить так:
Код

query.close;
query.sql.text:='update "c:\1.db" set x="'+myvar+'" where ((ID = 1) or (ID = 2) or (ID = 3) or (ID = 4) or (ID = 5) or (ID =6) or (ID = 7) or (ID = 8)...)'; //***
query.ExesSQL;
end;

Сначала протестил - вроде пашет, а потом... В итоге n=50, в результате выполнения запроса (***) никаких ошибок не возникает, но х установилось не в 50ти записях, а в 16ти-24х! Причём без какой-то зависимости и не удалось мне понять, сколько же точно записей обновляется. При выполнении процедуры 3 раза (при n=50 у меня в базе) в итоге все поля были обновлены...
Объясните, что это за лажа, можно ли писать так запрос (***) и есть ли выход?


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Alex
Дата 26.8.2005, 02:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 17
Всего: 162



Код

query.close;
query.sql.text:='update "c:\1.db" set x="'+myvar+'" where ID >= 1 and ID <= '+inttostr(n);
query.ExesSQL;



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Akina
Дата 26.8.2005, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 454



Код

query.sql.text:='update "c:\1.db" set x="'+myvar+'" where ID between 1 and '+inttostr(n);



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Illusion Dolphin
Дата 26.8.2005, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 2
Всего: 63



Alex,
Akina
Спасибо за попытку помочь, но как всегда пришлось помогать самому себе.
Дело в том, что от 1го до N это я для примера дал, в реале это может быть типа "234, 5, 1234, 456, 2467..." - т.е. совсем не связные значения. После долгого тестирования я понял, что обновляются первые 16 значений (если все их отсортировать по возрастанию (может быть потому что у меня ID Autoincrement). В итоге запрос разбивал на N, в каждом из которых устанавливается значение в 16 полях. Вероятно это из-за какого-то ограничения данной БД :/


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
kobra
Дата 26.8.2005, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 1
Всего: 9



Код

where ID in (...)
а так?
PM MAIL   Вверх
Illusion Dolphin
Дата 26.8.2005, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 2
Всего: 63



Цитата

а так?

А так работает smile. Значит это всё-таки было ограничение на кол-во полей, учавствующих в условии... Сенькс бальшой


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0619 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.