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

Вниз

ПОМОГИТЕ ! Косяк с 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
1-69319
KINDA
2002-11-12 12:05
2002.11.21
Создание DLL


3-69190
Карелин Артем
2002-11-01 10:15
2002.11.21
Поиск по дате.


1-69392
lesa
2002-11-10 17:37
2002.11.21
Findfirst и файлы без расширения?


1-69362
[NEW]Splinter
2002-11-10 10:40
2002.11.21
Как записать в exe-шник?


1-69232
Anar
2002-11-10 21:05
2002.11.21
Привилегии и приоритеты