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

Вниз

TDataSet.Как оптимально скопировать всего одну запись в новый.   Найти похожие ветки 

 
Abcdef123   (2013-04-10 10:32) [0]

Здравствуйте, Мастера!
Заранее прошу прощения за вопрос. Чувствую, что примитивный, но вот в голову ничего не приходит, как можно сделать оптимально и красиво.
В общем, в приложении есть некий датасет, показываем данные в гриде, и по правому клику мне надо текущую запись скопировать в декларированный, но не созданный пока второй датасет (Датасет2 = Nil); и потом далее другой процесс идет, в который мы передаем вот этот датасет2 (то есть интересна только текущая строка первого датасета.
Вопрос: можно ли как то это сделать, оперируя только методами и свойствами компонента TDataSet? И если можно, то как это сделать?
Примечание: Grid -Как средство отображения данных датасет1 желательно не использовать для определения текущей записи, так как предполагается в будущем использовать этот код и с другими компонентами.
Заранее благодарна.


 
Ega23 ©   (2013-04-10 10:41) [1]

0. DataSet2.DisableControls;
1. пробежаться по филдам первого, создать такие же во втором.
2. DatSet2.Insert
3. пробежаться по значениям полей первого, вставить во второй.
4. DatSet2.Post
5. DataSet2.EnableControls;


 
Abcdef123   (2013-04-10 12:16) [2]

To [1] Возможно, что вы не обратили внимание на то, что DataSet2 = Nil на этом этапе. Так что уже на пункте 0 выдаст ошибку о несуществовании объекта (акцес авиалейшен). Хорошо, я добавила перед пуктом 0 создание датасет     DataSet2:= TDataSet.Create(Application); В этом случае удается выполнить пункты 0 и 1, но на пункте 2 снова ошибка cannot operate operate on a closed dataset. Хорошо, я добавила перед пунктом 2 DataSet2.Open. Но, теперь на пункте 2 выдает ошибку Abstract Error.
Как быть?

И еще... вы написали применить DisableControls к датасет2, может вы имели в виду датасет1?


 
clickmaker ©   (2013-04-10 12:22) [3]

> выдает ошибку Abstract Error

правильно. Потому что TDataSet - абстрактный класс. Нужно создавать его наследника


 
Abcdef123   (2013-04-10 12:40) [4]

[3] Я написала в самом первом сообщении, что объявила  DatSet2, но как объект это пока нил.То есть объявила так:
DatSet2: TDataSet;
Это значит, совет [1] неподходящий?
Я честно говоря, еще больше в непонятках оттого, что вы написали, я ж не работаю к самим классом  TDataSet, я пытаюсь работать с представителем этого класса  DatSet2. ПОдскажите, плиз, что вы имеете в виду, когда говорите "Нужно создавать его наследника" или поправьте, что в описанном мною мне надо исправить.


 
O'ShinW ©   (2013-04-10 12:41) [5]

юзать TClientDataSet
Создать, если не создан
Задефайнить ему поля исходя из DS исходного
и текущую запись туда закопировать
совместимость по TDataSet имеется.


 
O'ShinW ©   (2013-04-10 12:47) [6]

как-то так

 CDS := TClientDataSet.Create(nil);
 try
   Screen.Cursor := crHourGlass;
   CDS.FieldDefs.BeginUpdate;
   CDS.FieldDefs := DS.FieldDefs; вот из этого dataset  (DS. )берем поля
   CDS.FieldDefs.Add("BASE", ftFloat); а это еще поля если надо
   CDS.FieldDefs.Add("UP_ABON", ftFloat);
   CDS.FieldDefs.Add("UP_CNT", ftFloat);
   CDS.FieldDefs.Add("MONEY", ftFloat); //ftString, 50);
   CDS.FieldDefs.Add("NOTE", ftString, 50);
   CDS.FieldDefs.EndUpdate;
   CDS.CreateDataSet;
   CDS.DisableControls;
   DS.DisableControls;
   DS.First;
   while not(DS.Eof) do
   begin
     if not(DS.FieldByName("DT_WORK").IsNull) then
     begin
       CDS.Insert;
       for i := 0 to DS.FieldCount - 1 do  а тут поля копируем
         CDS.Fields[i].Value := DS.Fields[i].Value;


 
Ega23 ©   (2013-04-10 12:57) [7]


> ПОдскажите, плиз, что вы имеете в виду, когда говорите "Нужно
> создавать его наследника" или поправьте, что в описанном
> мною мне надо исправить.


TDataSet - абстрактный класс. Его потомки - уже реальные, TQuery, TClientDataSet, TADODataSet и т.д. Вот одного такого потомка и надо создать.


 
Плохиш ©   (2013-04-10 14:13) [8]

Но лучше, всё-таки, нанять программиста.


 
Jeer ©   (2013-04-10 14:57) [9]

Лучше котлеты научиться жарить вкусные, тогда программист и  сам придет.


 
Anatoly Podgoretsky ©   (2013-04-10 21:07) [10]

Решение от обратного


 
Вова   (2013-04-10 23:30) [11]

Удалено модератором


 
Anatoly Podgoretsky ©   (2013-04-11 01:57) [12]

Удалено модератором


 
Вовик   (2013-04-11 08:50) [13]

Удалено модератором


 
Ega23 ©   (2013-04-11 09:16) [14]

Удалено модератором


 
Плохиш ©   (2013-04-11 10:43) [15]

Удалено модератором



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

Форум: "Начинающим";
Текущий архив: 2014.02.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.003 c
2-1365240597
Exceler
2013-04-06 13:29
2014.02.09
Импорт данных из Эксель


15-1377368884
Необычный Порошок
2013-08-24 22:28
2014.02.09
Микропроцессор в игрушечных роботах от WowWee


15-1377514696
istok
2013-08-26 14:58
2014.02.09
ищем системного программиста...


15-1376546851
Пит
2013-08-15 10:07
2014.02.09
Посоветуйте книжку по 1C v8


15-1377405567
Кирюха
2013-08-25 08:39
2014.02.09
Тяжело запилить свою БД?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский