C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Query, редактирование поля, редактирование поля С Query
Bairon
Отправлено: 09.10.2003, 08:22


Не зарегистрирован







знаю что где то рядом...но...лучше один раз спросить чем неделю мучаться...)
имеем таблицу (DBF), надо изменить значение поля по условиям....долго объяснять...лучше код приведу...

1 Вариант
TQuery *QueryParus;

QueryParus= new TQuery(NULL);
QueryParus->DatabaseName="d:";
QueryParus->Close();
QueryParus->SQL->Clear();
// тут запрос на требуемую запись
QueryParus->SQL->Add("select * from 'd:\\0810033.dbf' where code=3008 and Timeopr=(select max(Timeopr) from 'd:\\0810033.dbf')");
QueryParus->Open();
QueryParus->UpdateMode=true;
QueryParus->UpdateRecord();
QueryParus->FieldByName("Value")->AsFloat = 99999;

как результат ошибка  — "Dataset not in edit or insert mode" ((

2 Вариант
TQuery *QueryParus;

здесь в самом SQL запросе вставим команду update
QueryParus->SQL->Add("update 'd:\\0810033.dbf' set VALUE =99999 where code=3007 and Timeopr=(select max(Timeopr) from 'd:\\0810033.dbf')");
QueryParus->ExecSQL();

как результат  — "invalid use of keyword" Token: value

то есть, я понял VALUE, есть служебное слово, поскольку анологичная операция с другими полями все делает красиво...

вот такой вот пирожок...как обойти...? поможите кто чем может, люди умные...)
Admin
Отправлено: 09.10.2003, 13:04


Владимир

Группа: Администратор
Сообщений: 1190



Как-то вы неправильно пытаетесь изменить запись.
Во-первых — у вас запрос Select — только на чтение из таблицы,
изменять вы можете с помощью компонента UpdateSQL, указав его в
свойстве UpdateObject у TQuery и поставив RequestLive в true

Далее,
QUOTE
QueryParus->UpdateMode=true;


Что-то такого значения свойства я не видел. Видел:
CODE

upWhereAll, upWhereChanged ,upWhereKeyOnly


Или изменяйте значение свойства с помощью компонента Table

Table1->Edit(); // переходим в режим редактирования
Table1->FieldByName("Value")->AsFloat = 99999;
Table1->Post(); // сохраняем изменения

или с помощью SQL-запроса, например другого TQuery:
"Update myTable set ... = 99999 where ..." как у вас в 2

----

Насчет служебного слова value — так оно и есть, или измените
поле в таблице, или попробуйте через кавычки, то есть
update 'd:\\0810033.dbf' set 'VALUE' =99999 where
или
update 'd:\\0810033.dbf' as myTable set myTable.'VALUE' =99999 where

Должно помочь.

Отредактировано Admin — 09/10/2003, 14:12

Вернуться в Работа с базами данных в C++Builder