Попытка изменить доступное только для чтения поле DataSet - PullRequest
1 голос
/ 24 января 2011

Я использую C ++ Builder 6.0

Я использую TADODataSet выполнить следующую инструкцию SQL:

SELECT Id, SUM(Saldo) AS Saldo 
FROM Table 
GROUP BY Id

Я использую этот набор данных только для отчетов. Нет необходимости обновлять дату обратно в базу данных. Когда я пытаюсь изменить поле "Saldo"

adospCard->Edit();
adospCard->FieldByName("Saldo")->AsFloat=0.0;
adospCard->Post();

Я получаю ошибку: Поле 'Saldo' не может быть изменено. Я добавляю эту строку

adospCard->FieldByName("Saldo")->ReadOnly=false;

и ошибка больше не возникала, но поле 'Saldo' не изменилось.

adospCard->Edit();
//adospCard->FieldByName("Saldo")->AsFloat=1536.5
adospCard->FieldByName("Saldo")->AsFloat=0.0;
//adospCard->FieldByName("Saldo")->AsFloat=0
adospCard->Post();
//adospCard->FieldByName("Saldo")->AsFloat=1536.5

Как изменить значение поля 'Saldo'?

Ответы [ 3 ]

2 голосов
/ 24 января 2011
  1. Добавить вычисляемое поле в набор данных.
  2. Рассчитайте правильное значение для Сальдо в этом рассчитанном поле (вы можете использовать Saldo в качестве источника для этого, если вы хочу)
  3. отобразить это вычисленное поле в вашем отчете в вместо поля Салдо.

Edit: Примеры добавления вычисляемых полей см., Например, здесь , здесь и здесь .

- Йерун

1 голос
/ 24 января 2011

Рассмотрите возможность сохранения своего результата в ClientDataset - если вы можете быть уверены, что результат не слишком велик.

Я не использую "TADODataSet", поэтому следующее может не применяться:) ...

Когда я делаю то же самое (или подобное), используя предпочитаемую базу данных (т.е. сервер базы данных Advantage), я бы использовал предложение INTO, хотя и с компонентом TSQLQuery (со включенным свойством RequestLive).Например:

SELECT Id, SUM (Saldo) AS Saldo INTO #TempTable ИЗ таблицы GROUP BY Id

1 голос
/ 24 января 2011

Как сказал ldsandon, вы не можете изменять поле "Saldo", поскольку оно вычисляется. Если вам нужно установить значение в ноль, когда Id - это «что-то», вам лучше сделать это в своем запросе. Лучший подход зависит от критериев установки значения на ноль.

Или сохраните результаты исходного запроса во временной таблице, а затем измените его перед возвратом результатов в отчет.

Наконец, какой инструмент отчетности вы используете? Может ли это изменить "Saldo = 0" при рендеринге отчета?

...