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

Вниз

редактируемый датасет в ADO   Найти похожие ветки 

 
Hooch ©   (2003-08-07 11:01) [0]

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


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

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


 
Hooch ©   (2003-08-07 11:11) [2]

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


 
Fiend ©   (2003-08-07 11:13) [3]

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


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

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


 
Hooch ©   (2003-08-07 11:15) [5]

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


 
Hooch ©   (2003-08-07 11:16) [6]




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

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


 
ZrenBy ©   (2003-08-07 11:19) [8]

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

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

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

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


 
sniknik ©   (2003-08-07 11:28) [9]

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

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


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

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

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





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

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


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

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


 
sniknik ©   (2003-08-07 12:47) [13]

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



 
Hooch ©   (2003-08-07 12:57) [14]

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


 
sniknik ©   (2003-08-07 13:12) [15]

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

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


 
Hooch ©   (2003-08-07 13:49) [16]

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 14:31) [17]

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

потому как, вот так работает
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 14:37) [18]

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


 
sniknik ©   (2003-08-07 14:49) [19]

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


 
Hooch ©   (2003-08-07 15:05) [20]

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



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

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

Наверх




Память: 0.51 MB
Время: 0.025 c
1-1381
Dimon
2003-08-16 19:27
2003.09.01
Синтаксис С++:(seen_eap |= PW_MESSAGE); Как это выгл. в Delphi??


1-1467
Rel_
2003-08-11 08:22
2003.09.01
использ-ие delphi в builder е


3-1294
PrettyFly
2003-08-08 17:57
2003.09.01
Компоненты доступа к Sybase


8-1515
NailMan
2003-05-05 15:17
2003.09.01
Сделать управление для CD_Player`a


1-1471
DVP1
2003-08-18 14:41
2003.09.01
Как удалить из текстового файла строку?