Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-69425
AndreyAG
2002-11-11 11:00
2002.11.21
Окна!


3-69153
M|ke
2002-10-31 12:58
2002.11.21
Нужно заполнить числовые поля нулями. (срочно!)


3-69118
AndrewK
2002-10-24 17:54
2002.11.21
Посоветуйте как правильно работать с FlexCel.


14-69497
Дремучий
2002-10-29 22:28
2002.11.21
Задачка по SQL...


14-69496
Judith
2002-11-01 18:23
2002.11.21
С Halloween!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский