Форум: "Базы";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];
ВнизПОМОГИТЕ ! Косяк с UPDATE (LocalSQL) Найти похожие ветки
← →
62mkv (2002-10-30 15:09) [0]Большой трабл происходит, простите за жаргон.
Существуют две таблицы: клиенты и заказы, отмечаем галочками клиентов, добавляем в заказы, снимаем галочки. Работаем через TQuery, первый раз - SQL.Add(insert into orders...), второй (убрать галочки) -
SQL.Clear;
SQL.Add("update client set is_selected=false where is_selected=true AND ((KOD_UPDATER=1))");
ExecSQL; - выдает ошибку No current record, после чего в таблице появляются дубли на все записи с галочками, только с другим кодом (код автоинкремент)
а если выполнять в stand-alone, например в DBExplorer"e - то еще лохмаче - выполняется без ошибок, после чего выясняется, что все старые записи удалились! а на их месте дубли с другими кодами !
естественно, все заказы после этого ссылаются в никуда.
Мне интересно, update в принципе всегда так работает, или что то с оператором, или с настройками BDE/aliasa ?????
Engine: Paradox 7, RAD: Delphi 3
← →
62mkv (2002-10-30 15:13) [1]Забыл добавить : без слов "AND ((KOD_UPDATER=1))" все нормально работает.
И еще ОГРОМНАЯ ПРОСЬБА ОТВЕТИТЬ... я целый день сегодня над этим просидел, блин, работа стоит, че делать не знаю.
Спасибо заранее !
← →
sniknik (2002-10-30 15:47) [2]по моему запрос совершенно рабочий, я бы бы чуть по другому написал но и так должно работать.
я бы написал
SQL.Add("update client set is_selected=false where is_selected AND (KOD_UPDATER=1)");
наверное ошибка в другом.
← →
Darts (2002-10-30 16:30) [3]Или так:
SQL.Add("update client set is_selected=false where ((is_selected = TRUE) AND (KOD_UPDATER=1))");
← →
ЮЮ (2002-10-31 04:32) [4]Когда в древние времена я работал в такой же конфигурации:Engine: Paradox 7, RAD: Delphi 3, я тоже столкнулся с тем, что оператор update, редактирующий группу записей, поступает таким образом. Поэтому редактировать через update желательно только одну запись, явно указывая в Where код записи.
← →
62mkv (2002-10-31 07:04) [5]2sniknik :
Запрос программно формируется поэтому там две скобочки (думаю это не принципиально), а вот просто "is_selected" LocalSQL не понимает ;(( и not is_selected тож... =true надо добавлять
2ЮЮ :
а вообще интересно, это known bug или фича ?? кто нибудь в курсе ?
← →
sniknik (2002-10-31 08:45) [6]Вполне возможно, я писал и пробовал через ADO JET у него функционала больше.
а вот насчет того что ЮЮ пишет это не может быть фичей, SQL это же для пакетного изменения данных и в хелпе встречаются конструкции посложнее и они работают.
Скорее это баг но вряд ли BDE, может у тебя индексы порушились или еще што. Нужно на другой машине попробовать (на всякий случай BDE проверить). А еще сделай анологичный запрос для другой таблицы/поля, тоже будет?
еще в парадоксе наверно по другому(побольше) но у DBF ограничение на длину поля (у новых наверно нет), у тебя это ограничение превышается (должно<=10 символов), а ведь движок SQL общий для DBF, DB. В общем еще можно сделать поля меньше и попробовать так. (опять вряд ли но на всякий случай)
← →
62mkv (2002-10-31 08:53) [7]2sniknik:
"на длину поля" ты имеешь в виду - на длину имени поля ? вряд ли из-за этого. как бы я такое поле создал ? там другие ограничения, если интересно запостю.
насчет индексов, вряд ли.. вчера специально все грохнул и заново создал...
а вот такая штука сработала (навеяно ЮЮ) :
update client set is_selected=false where kod_klient in
(select kod_klient from client where is_selected=true
AND ((KOD_UPDATER=1)))
интересно правда ?
← →
sniknik (2002-10-31 10:40) [8]да уж. но вообщето через ключевое поле наверное более правильно, в jet Access некоторые запросы только так работают, удаление повторов например, а в BDE можно на номер позиции ссылатся (довольно странно для меня), и вот случай когда "коса нашла на камень", будем иметь в виду.
а длинну поля я упоминул потому то для DBF макс. 10символов для DB точно не знаю похоже 12. но SQL движок для обоих один, просто предположил что в какойто проверке это может не учли.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.078 c