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

Вниз

DB - SQLDataSet - DataSetProvider-ClientDataSet   Найти похожие ветки 

 
LinOS ©   (2003-09-18 09:19) [0]

Есть такая цепочка.
Есть форма с кнопкой и DBGrid.
При откратии формы пишу

DM.SQLDataSet.CommandText := "SELECT id, f_name, s_name, o_name FROM staff WHERE status IS NULL";
DM.SQLDataSet.Open;
DM.ClientDataSet.Open;

DBTable присоединена к ClientDataSet.
Теперь вношу в DBGrid новую запись и нажимаю кнопку. На ней обработчик такой:

if DM.ClientDataSet.ChangeCount > 0 then
DM.ClientDataSet.ApplyUpdates(-1);

По идеи все что я внес в DBGrid должно запоститься на сервер в BD. Однако пишет сообщения:
1. Unknow table name: "staff".
2. Unable to find record. Nokey specified.
Пробовал определять ключевое поле таким образом:

DM.SQLDataSet.Fields.FieldByName("id").ProviderFlags := [pfInKey];

Не помогает.
Мастера. Подскажите как делать?


 
Nikolay M. ©   (2003-09-18 09:54) [1]


> DM.SQLDataSet.Open

Не уловил, для чего это нужно?

Чему равно DataSetProvider.ResolveToDataSet?

DM. CDS.Fields.FieldByName("id").ProviderFlags := [pfInKey];


 
LinOS ©   (2003-09-18 10:11) [2]

DataSetProvider.ResolveToDataSet := False;
Ладно, пускай убрал DM.SQLDataSet.Open и сделал
DM.CDS.Fields.FieldByName("id").ProviderFlags := [pfInKey];

Тоже самое.
Как правильно настроить такую связку?


 
Nikolay M. ©   (2003-09-18 10:18) [3]


> Как правильно настроить такую связку?

\Delphi6\Demos\Midas\Alchtest


 
LinOS ©   (2003-09-18 10:51) [4]

А по проще нет ничего?


 
Romkin ©   (2003-09-18 10:54) [5]

Устанавливать InKEy надо в датасете, к которому провайдер присоединен, а не на клиенте


 
Nikolay M. ©   (2003-09-18 11:12) [6]


> Устанавливать InKEy надо в датасете, к которому провайдер
> присоединен, а не на клиенте

А он уже так делал :)


 
LinOS ©   (2003-09-18 11:38) [7]

Ну, что? insert/update писать, да заполнять grid самому - бред. Не может быть так. Они сами пишут, что ClientDataSet используется как кэш, а для записи в БД достаточно выполнить процедуру ApplyUpdates.


 
Nikolay M. ©   (2003-09-18 11:42) [8]

Разберись с примером, там все есть.


 
Romkin ©   (2003-09-18 11:46) [9]

Если ты юзаешь CommandText, то должен знать, к чему это приводит, и сам обо всем заботиться.
Меня вообще бесят регулярные вопросы, начинающиеся с SQL.Add("blabla") и затем выставление параметров.
Что мешает нормально разобраться в Params, Fields etc?
Сам ведь у провайдера указал upWhereKeyOnly, теперь спрашиваешь, как поля выставить

http://www.delphimaster.ru/articles/midas/index.html
http://www.delphimaster.ru/articles/midas2/index.html
http://rsdn.ru/article/db/midas.xml


 
LinOS ©   (2003-09-18 13:46) [10]

Спасибо. Пробую по другому.
По книжке.
SQLDS
Provider
CDS

В CDS.CommandText пишу "select * from staff"
Активирую.
В SQLDS заполняю filds и полю id устанавливаб свойство pfInKey.
Перехожу в CDS заполняю поля.
Отсоединяюсь.
Запускаю приложение
CDS.Open - появляются данные в Grid.
Редактирую Grid
Жму на кнопку (CDS.ApplyUpdate(-1))
Ошибка unknow table name "staff".
Почему?


 
LinOS ©   (2003-09-18 13:50) [11]

Если в Provider-е поставить ResolveToDataSet=True, то ругается, SQLDS: Cannot modify a read-only dataset.


 
Romkin ©   (2003-09-18 13:55) [12]

Ну зачем тебе CommandTExt, если на сервере поля запроса уже выставлены? Забудь о нем. Какой тип у SQLDS? Какая БД? А у SQLDS LiveREsult = True?
Попробуй TProvider.OnGetTableName заполнить


 
LinOS ©   (2003-09-19 06:40) [13]

//Ну зачем тебе CommandTExt, если на сервере поля запроса уже //выставлены? Забудь о нем. Какой тип у SQLDS?
Что значит "какой тип"? CommandType = ctQuery.

//Какая БД?
БД SAPDB через ODBC.

//А у SQLDS LiveREsult = True?
И где такой параметр у TSQLDataSet?

//Попробуй TProvider.OnGetTableName заполнить
КАк работает? Что заполнять?


 
LinOS ©   (2003-09-19 07:49) [14]

Все, мастера - разобрался. Оказывается различает UPPERCASE and LOWCASE буквы в названиях таблиц. Не знаю почему, но когда я создаю таблицу в БД, то создаю в LOWCASE. И когда пишу Select из какой-нибудь data base tools, то все нормально. А тут вот такая особенность.



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

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

Наверх




Память: 0.5 MB
Время: 0.021 c
14-27646
Настенька
2003-09-22 07:15
2003.10.09
файл с расширением *.dat


7-27752
plotn
2003-07-24 09:44
2003.10.09
usb device aka mp3 player


1-27447
Ser_ega
2003-09-27 23:09
2003.10.09
Дата и время!


14-27672
МаХиМ
2003-08-30 15:06
2003.10.09
ТУт посоветовали прогу Delphi называется


3-27384
Lamer1
2003-09-18 16:17
2003.10.09
Проблемы с TClientDataSet