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

Да, через провайдер
...
Рейтинг: 0 / 0
01.11.2019, 11:06
    #39884085
vavan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Field ' ' cannot be modified
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
01.11.2019, 11:45
    #39884134
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Field ' ' cannot be modified
PapadopulosВ причине разобрался. Ошибка есть в тех случаях, когда запрос в MS SQL возвращает агрегированный запрос. Видимо в ADOQuery при принятии датасета в агрегируемые поля проставляется признак ReadOnly. Вот теперь бы ещё понять как его снять
Под "агрегированный запрос" вы имеете в виду, когда запрос возвращает результат из нескольких таблиц, а также запрос с использованием union?
Если так, то подумайте, в какую таблицу провайдер будет писать данные при изменении строки?
...
Рейтинг: 0 / 0
01.11.2019, 12:12
    #39884168
Papadopulos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Field ' ' cannot be modified
goldmi45PapadopulosВ причине разобрался. Ошибка есть в тех случаях, когда запрос в MS SQL возвращает агрегированный запрос. Видимо в ADOQuery при принятии датасета в агрегируемые поля проставляется признак ReadOnly. Вот теперь бы ещё понять как его снять
Под "агрегированный запрос" вы имеете в виду, когда запрос возвращает результат из нескольких таблиц, а также запрос с использованием union?
Если так, то подумайте, в какую таблицу провайдер будет писать данные при изменении строки?
Агрегированный запрос это запрос с группировкой данных и использованием агрегатных функций.
Провайдер в данном случае нужен только для получения данных в TClientDataSet, обратно в базу ничего не пишется.

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

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


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