Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Использование команды Update в LocalSQL Дельфи [D5, dBase, FoxPro]


bav9 ©   (2004-03-30 11:25:00) 

Две таблицы связаны по ключевому полю. В каждой есть логические поля - в одной - Pokaz, во второй - Vyzov. Необходимо переодически, по запросу - изменять значение Pokaz в зависимости от значений самого поля Pokaz  и поля Vyzov из другой таблицы. В tQuery задал Datasource и подаю команду :
 UPDATE klients.dbf set pokaz = pokaz and :vyzov
а она мне говорит :
 Invalid use of keyword. Token: and
Та же ошибка вылезает и при использовании остальных логических операторов ( .. set pokaz = not pokaz
В этом случае как правильно использовать ВЫРАЖЕНИЯ в команде Update, в частности - логические ( и вообще, можно ли их использовать :-( ).


bav9   (2004-03-30 19:10:00) [1]

Никто не сталкивался с такой проблемой ? НЕ ПОВЕРЮ ! Есть же способ ??? Поделитесь, плз, военной тайной !!!


bav9   (2004-03-30 16:55:00) [2]

Если использовать два tQuery - в одном - собирать значения : nch (код), pokaz, vyzov - а потом делать UPDATE во втором запросе, используя первый - то обновляется почему -то только первая найденная в первом запросе запись. Первый запрос :     'select klients.nch,klients.pokaz as mm1,vseoch.vyzov as mm2 from klients inner join vseoch on (klients.nch=vseoch.nch) where klients.pokaz=true or vseoch.vyzov=false'
Второй запрос : UPDATE klients.dbf set pokaz=true where nch=:nch'
Запросы связаны ч/з Datasource. ПОЧЕМУ ???


bav9   (2004-03-30 14:29:00) [3]

ждитте оттветта ..


bav9   (2004-03-30 13:00:00) [4]

может, dBase, Foxpro - и съест, а вот Delphi LocalSQL - не хочет. Перефразирую вопрос : можно ли в запросах tQuery указывать вычисляемые ЛОГИЧЕСКИЕ поля ? типа Select (klients.pokaz and vseoch.vyzov) as mmm from klients inner join vseoch on (klients.nch=vseoch.nch)


Курдль   (2004-03-30 12:10:00) [5]

Поправочка: if TABLE1.POKAZ and TABLE2.VIZOV
then update TABLE1 set POKAZ = True
else update TABLE1 set POKAZ = False
end if


Курдль   (2004-03-30 12:09:00) [6]


> bav9 ©   (30.03.04 11:39) [2]
> Обрабатывал, пихал, Комп - при большой базе - просто засыпает
> !


Это не Ваша проблема. Точнее, это проблема в Вашем выборе СУБД.

Попробуйте, съест ли "dBase, FoxPro" это:

if TABLE1.POKAZ and TABLE2.VIZOV TABLE1.POKAZ
 then update TABLE1 set POKAZ = True
 else update TABLE1 set POKAZ = False
end if


Reindeer Moss Eater   (2004-03-30 11:51:00) [7]

UPDATE klients.dbf set pokaz = pokaz and :vyzov

а где whereесли есть and?


bav9   (2004-03-30 11:39:00) [8]

Обрабатывал, пихал, Комп - при большой базе - просто засыпает !
Думал, прямо ч/з Update - работа пойде быстрее. Неужели - нет выхода, и ни как нельзя работать с выражениями прямо в запросе ?


Курдль   (2004-03-30 11:31:00) [9]

Классический (ANSI) SQL не допускает выражений при INSERT и UPDATE. Возможны отклонения в конкретных реализациях (читайте мануал dBase, FoxPro, если такой еще не не рассыпался от ветхости :)
Выход - обработать выражение pokaz and vyzovна клиенте и упихать в БД при помощи ... set pokaz = :pokaz


Наверх

Титульная страница Поиск, карта сайта Написать письмо