Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];

Вниз

редактируемый датасет в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.01 c
3-1322
OlkaGTS
2003-08-07 13:49
2003.09.01
Как сделать Refresh для одной записи ClientDataSet


6-1522
XHelp
2003-06-26 20:03
2003.09.01
ICQ через HTTP Proxy


1-1397
SergP
2003-08-15 21:12
2003.09.01
Как можно запретить вызов even ta пока не отработал другой event


6-1538
Hff
2003-06-25 14:51
2003.09.01
Как разобрать входящую почту ?


11-1357
VikImmortal
2002-12-22 17:13
2003.09.01
MHFontDialog и размер шрифта





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский