Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

редактируемый датасет в ADO


Hooch ©   (2003-08-07 11:01:00) 

День добрый госопода !
Проблема такова: есть TadoDataSet, в нем запрос "SELECT 10 AS ID", в результате выполнения получается НЕредактируемый набор данных, не зависимо от типа курсора и блокировки, что б сделать набор редактируемым я ходил 2 путями, либо делал в ставку во временную таблицу потом выборку из ней, либо создавал другой DataSet и переносил в него данные, а нет ли в ADO другой более быстрой и простой возможности сделать набор редактируемым ?


Hooch   (2003-08-07 15:05:00) [1]

да уж, тяжела и неказиста жизнь простого прораммиста :-)
Всем спасибо за советы !


sniknik   (2003-08-07 14:49:00) [2]

Hooch © (07.08.03 14:37)
сам тогда думай,
только в случае с автоинкрементом (выше) никаких востановлений при ADODataSet1.Post нет (специально не делаю но Post при переходе с записи на запись происходит, а исправленное значение остается)
могу повторить
> просто потому что ты чегото не учел


Hooch   (2003-08-07 14:37:00) [3]

:-) что б добится этого результат достаточно в ADODataSet1 всем филдам сказать ReadOnly := false, редактироватся то поле редактируется, но при ADODataSet1.Post значение восстанавливается


sniknik   (2003-08-07 14:31:00) [4]

да так не работает. но просто потому что ты чегото не учел

потому как, вот так работает
ADODataSet1.Close;
ADODataSet1.CommandText := "SELECT 10 AS ID";
ADODataSet1.LockType := ltBatchOptimistic;
ADODataSet1.Open;

// ADODataSet2.FieldDefs.Add("ID",ftInteger);
// ADODataSet2.CreateDataSet;
// убираем и задаем в десигн тайме, просто dbl-кликнув по компоненту и задав там new field - ID - integer - data

ADODataSet2.Clone(ADODataSet1);


Hooch   (2003-08-07 13:49:00) [5]

ADODataSet1.CommandText := "SELECT 10 AS ID";
ADODataSet1.LockType := ltBatchOptimistic;
ADODataSet1.Open;

ADODataSet2.FieldDefs.Add("ID",ftInteger);
ADODataSet2.CreateDataSet;

( ADODataSet1,ltBatchOptimistic)

ADODataSet1.CommandText := "SELECT 10 AS ID";
ADODataSet1.LockType := ltBatchOptimistic;
ADODataSet1.Open;

ADODataSet2.FieldDefs.Add("ID",ftInteger);
ADODataSet2.CreateDataSet;

ADODataSet2.Clone(ADODataSet1,ltBatchOptimistic);

Так не работает или я не верно понял ?


sniknik   (2003-08-07 13:12:00) [6]

Hooch © (07.08.03 12:57)
> если через ClientDataSet делать, то и без CreateDatSet можно обойтись ...
ну не обязательно повторять как у меня (я же для примера, и сказал что ADODataSet то же самое позволяет)

Hooch © (07.08.03 12:25)
> просто Clone не помогает
в результирующем датасете предварительно определи поля, так к примеру если в 1-м ID автоинкремент (нередактируемый) то во втором (из него clone вызывать) ID просто интеджер ставиш, позволяет редактировать.


Hooch   (2003-08-07 12:57:00) [7]

>> sniknik ©
если через ClientDataSet делать, то и без CreateDatSet можно обойтись, а если TadoDatSet"у делать CreateDatSet, то данные нужно будет копировать из одного в другой а сие медленно.


sniknik   (2003-08-07 12:47:00) [8]

Hooch © (07.08.03 11:37)
>> sniknik ©
> а можно пример как оторваный датасет сделать ?
я делал в ClientDataSet (причины не помню, в ADODataSet тоже можно), пример смотри в хелпе по TClientDataSet.CreateDataSet.


Hooch   (2003-08-07 12:25:00) [9]

просто Clone не помогает


Hooch   (2003-08-07 11:37:00) [10]

>> sniknik ©
а можно пример как оторваный датасет сделать ?


Hooch   (2003-08-07 11:31:00) [11]

>> ZrenBy ©
Метод не нравится потому что во первых я не имею доступа к хранимым процедурам а написать в CommandText "insert into #.. exec ..." пертит текущей идеологии разработки что в любая команда толжна содержать только "exec Procname ..." это тоже не от меня зависит.

Конкретный пример :-) возвращается набор данных в документ
<RectID,Плановое количество,Фактическое количество>
я документе редактируется поле <Фактическое количество>, при сохранении вызывается процедура, в которую передается RecID и фактическое количество, которая в свою очеред и обновляет в БД что нужно и где нужно, так вот запос загрузки данных написан так что поле <Фактическое количество> получается не редактируемым




sniknik   (2003-08-07 11:28:00) [12]

да бросьте вы, чего проще создать оторвенный датасет (clone), и редактируй чего хочеш.

Mike1 Kouzmine1 (07.08.03 11:16)
> Дать конкретный пример
могу даже конкретную программу(тест) дать... правда по своим данным/условиям.
там передача в COM-сервер данных идет, данные берутся из базы но перед передачей юзеру позволительно поменять чего хочет. удобнее всего как мне показалось именно так сделать (редакция в гриде).


ZrenBy   (2003-08-07 11:19:00) [13]

>>делал в ставку во временную таблицу потом выборку из ней

Классический метод. Чем тебе не нравится ?

или смотри в сторону ADO.NET

еще тут
http://www.sql.ru/forum/actualthread.aspx?bid=1&tid=1794


Mike1 Kouzmine1   (2003-08-07 11:16:00) [14]

Дать конкретный пример


Hooch   (2003-08-07 11:16:00) [15]



Hooch   (2003-08-07 11:15:00) [16]

т.е. если в SELECT учавствуют какие-то вычисляемые поля, то на клиенте не получается их редактировать, а хочется :-) это достаточно или дать конкретный пример ?


Mike1 Kouzmine1   (2003-08-07 11:13:00) [17]

Я тебе скажу как, если ты мне объяснишь - зачем это?


Fiend   (2003-08-07 11:13:00) [18]

И что по твоему должно сохраниться в БД, и самое главное КУДА?


Hooch   (2003-08-07 11:11:00) [19]

ну положим в приведённом выше запросе я в гриде хочу вместо 10 написать 20


Mike1 Kouzmine1   (2003-08-07 11:07:00) [20]

А что ты хочешь редактировать?


Наверх

Титульная страница Поиск, карта сайта Написать письмо