![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
редактируемый датасет в 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]
А что ты хочешь редактировать?