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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.008 c
3-1295420914
Дмитрий С
2011-01-19 10:08
2014.02.09
ВКонтакте: кто удалился?


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


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


2-1365524535
robt
2013-04-09 20:22
2014.02.09
exception


15-1377088228
Wonder
2013-08-21 16:30
2014.02.09
А куда дели мою анкету?