powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Field ' ' cannot be modified
13 сообщений из 13, страница 1 из 1
Field ' ' cannot be modified
    #39883969
Papadopulos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Проблема: получаю из SQL Server набор данных посредством TADOQuery, переношу его
в TClientDataSet, далее пытаюсь его редактировать. При первой же правке получаю сообщение
Field 'Norm' cannot be modified
Интересно здесь то, что другая похожая процедура делает практически всё то же самое без ошибок.
В чем причина?
...
Рейтинг: 0 / 0
Field ' ' cannot be modified
    #39883970
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PapadopulosИнтересно здесь то, что другая похожая процедура делает практически всё то же самое без ошибок.
В чем причина?
Разница определенно между ними есть.
...
Рейтинг: 0 / 0
Field ' ' cannot be modified
    #39883993
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит поле Norm у вас калькулируемое
...
Рейтинг: 0 / 0
Field ' ' cannot be modified
    #39884006
Papadopulos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanPapadopulosИнтересно здесь то, что другая похожая процедура делает практически всё то же самое без ошибок.
В чем причина?
Разница определенно между ними есть.
Разница есть только в самих наборах данных - там различия в полях, но и там и там есть это самое редактируемое поле "Norm", оно типа float в MS SQL
...
Рейтинг: 0 / 0
Field ' ' cannot be modified
    #39884008
Papadopulos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBrЗначит поле Norm у вас калькулируемое
Нет
...
Рейтинг: 0 / 0
Field ' ' cannot be modified
    #39884021
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Papadopulosпереношу его
в TClientDataSetштатно через провайдер или каким-то иным способом?
...
Рейтинг: 0 / 0
Field ' ' cannot be modified
    #39884022
Papadopulos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В причине разобрался. Ошибка есть в тех случаях, когда запрос в MS SQL возвращает агрегированный запрос. Видимо в ADOQuery при принятии датасета в агрегируемые поля проставляется признак ReadOnly. Вот теперь бы ещё понять как его снять
...
Рейтинг: 0 / 0
Field ' ' cannot be modified
    #39884024
Papadopulos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vavan,

Да, через провайдер
...
Рейтинг: 0 / 0
Field ' ' cannot be modified
    #39884085
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PapadopulosВидимо в ADOQuery при принятии датасета в агрегируемые поля проставляется признак ReadOnlyлибо вероятно fieldkind у него не fkData образуется, раз уж оно калькулируемое
Papadopulosтеперь бы ещё понять как его снятьатрибут запрещающий редактирование поля проставляется в TDataPacketWriter.AddColumn:
Код: pascal
1.
if Info.Field.ReadOnly or (Info.Field.FieldKind <> fkData) then Attr := Attr or fldAttrREADONLY

соответствеено вокруг этого и плясать (наследники, хаки и т.п.) хотя еще вопрос на кой бы его такое в cds потом редактировать
...
Рейтинг: 0 / 0
Field ' ' cannot be modified
    #39884134
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PapadopulosВ причине разобрался. Ошибка есть в тех случаях, когда запрос в MS SQL возвращает агрегированный запрос. Видимо в ADOQuery при принятии датасета в агрегируемые поля проставляется признак ReadOnly. Вот теперь бы ещё понять как его снять
Под "агрегированный запрос" вы имеете в виду, когда запрос возвращает результат из нескольких таблиц, а также запрос с использованием union?
Если так, то подумайте, в какую таблицу провайдер будет писать данные при изменении строки?
...
Рейтинг: 0 / 0
Field ' ' cannot be modified
    #39884168
Papadopulos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
goldmi45PapadopulosВ причине разобрался. Ошибка есть в тех случаях, когда запрос в MS SQL возвращает агрегированный запрос. Видимо в ADOQuery при принятии датасета в агрегируемые поля проставляется признак ReadOnly. Вот теперь бы ещё понять как его снять
Под "агрегированный запрос" вы имеете в виду, когда запрос возвращает результат из нескольких таблиц, а также запрос с использованием union?
Если так, то подумайте, в какую таблицу провайдер будет писать данные при изменении строки?
Агрегированный запрос это запрос с группировкой данных и использованием агрегатных функций.
Провайдер в данном случае нужен только для получения данных в TClientDataSet, обратно в базу ничего не пишется.

Я в итоге убрал агрегирование из запроса и сделал его на клиенте.
Всем спасибо за информацию!
...
Рейтинг: 0 / 0
Field ' ' cannot be modified
    #39884175
Papadopulos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vavanPapadopulosВидимо в ADOQuery при принятии датасета в агрегируемые поля проставляется признак ReadOnlyлибо вероятно fieldkind у него не fkData образуется, раз уж оно калькулируемое

Кстати проверил - в обоих случаях образуется fkData
...
Рейтинг: 0 / 0
Field ' ' cannot be modified
    #39884198
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Papadopulosпроверил - в обоих случаях образуется fkDataда я пальцем в небо, сам как правило в cds агрегируемые/калькулируемые делаю и ado забыл когда видел
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Field ' ' cannot be modified
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]