Главная страница
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.064 c
2-1162480191
Riply
2006-11-02 18:09
2006.11.19
Два комонента, использующие OpenGL


15-1162468189
Карелин Артем
2006-11-02 14:49
2006.11.19
Тайный смысл фразы "How are you"...


8-1141656784
Belorus
2006-03-06 17:53
2006.11.19
Медиа плеер.


5-1142928524
Neo Trinitron
2006-03-21 11:08
2006.11.19
Проблема с Items


1-1160221931
AlexeyT
2006-10-07 15:52
2006.11.19
Перехватить клавиши в TWebBrowser