Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.19;
Скачать: CL | DM;

Вниз

Вопросы с ClientDataSet (UpdateMode, ProviderFlags)   Найти похожие ветки 

 
Bless ©   (2006-09-18 16:20) [0]

Решил попробовать ClientDataSet.
В этой связи сразу возникли два вопроса:

1)У DataSetProvider UpdateMode=upWhereKeyOnly. По идее это значит, что при обновлении записи провайдер будет в where использовать только ключевые поля. Но почему-то при ClientDataSet1.UpplyUpdates(0); ругается

Unable to find record.  No key specified

Почему? DataSetProvider.dataset = ADODataSet1, у которого CommandText = "select * from t1", а у таблицы t1 есть первичный ключ.

2)
Если я у поля ClientDataSet-а поставлю ProviderFlags pflnUpdate = true, то изменения этого поля (если верить справке) не должны включаться провайдером в UPDATE, так ведь? Но почему-то включаются. Почему?


 
Desdechado ©   (2006-09-18 16:38) [1]

1. pfInKey The field is included in the WHERE clause when the provider’s UpdateMode is upWhereKeyOnly.
Нужно указать, какие поля ключевые. У тебя не указано, вот и ругается.

2. pfInUpdate The field can be included in UPDATE statements. (That is, it can be modified)
Т.е. будет включено в UPDATE


 
Bless ©   (2006-09-18 16:53) [2]


> Desdechado ©   (18.09.06 16:38) [1]
>
> 1. pfInKey The field is included in the WHERE clause when
> the provider’s UpdateMode is upWhereKeyOnly.
> Нужно указать, какие поля ключевые. У тебя не указано, вот
> и ругается.
>


А где указать-то?


> 2.Т.е. будет включено в UPDATE


Опечатался.

Если я у поля ClientDataSet-а поставлю ProviderFlags pflnUpdate = false, то изменения этого поля (если верить справке) не должны включаться провайдером в UPDATE, так ведь? Но почему-то включаются. Почему?


 
Desdechado ©   (2006-09-18 17:00) [3]

> А где указать-то?
А подумать? F1 может помочь.


 
Romkin ©   (2006-09-18 17:01) [4]

Указываются флаги у полей того датасета, к которому подключен провайдер


 
Bless ©   (2006-09-18 17:26) [5]


> Romkin ©   (18.09.06 17:01) [4]
> Указываются флаги у полей того датасета, к которому подключен
> провайдер


Помогло, спасибо. Сам бы никогда не догадался.
Просто когда-то я пробовал (и сейчас проверил еще раз) выставлять флаги у ADODataset (без ClientDataSet) в надежде исключить какое-то поле из UPDATE. Не помогало. А для связки ADODataset ->DataSetProvider->ClientDataSet то же самое оказывается работает.


> Desdechado ©   (18.09.06 17:00) [3]
>
> > А где указать-то?
> А подумать? F1 может помочь.
>


Оказывается, Romkin[4] - это ответ на оба вопроса :)


 
Bless ©   (2006-09-19 12:41) [6]

Возник еще один вопрос:
Вызов метода CDS.RefreshRecord приводит к перезапросу всех данных, а не только текущей строки. Что где выставить чтоб это изменить?



Страницы: 1 вся ветка

Текущий архив: 2006.11.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
15-1162392726
click
2006-11-01 17:52
2006.11.19
"Другие" символы в Memo


2-1162395129
7D7
2006-11-01 18:32
2006.11.19
я непомню как это делается))


1-1160321075
flaxe
2006-10-08 19:24
2006.11.19
Встраивание в другие программы


2-1162208904
Kosh
2006-10-30 14:48
2006.11.19
путь к папке


1-1160461301
Bless
2006-10-10 10:21
2006.11.19
Этот таинственный MessageBox...