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
|
|
|