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

Вниз

Рабочие наборы данных.   Найти похожие ветки 

 
DROWSY   (2010-08-12 18:06) [0]

Есть набор данных. Для рассчётов нужна рабочая копия этого набора.
(динамический массив записей)
Какой алгоритм быстрого заполнения такого рабочего массива данными набора?


 
KilkennyCat ©   (2010-08-12 18:21) [1]

заполнение при расчете.


 
Ega23 ©   (2010-08-12 18:22) [2]

Перебор в цикле.ю


 
DROWSY   (2010-08-12 18:28) [3]


> Ega23 ©   (12.08.10 18:22) [2]
> Перебор в цикле.ю

А можно как-либо целиком запись набора скопировать в запись массива?


 
KilkennyCat ©   (2010-08-12 18:36) [4]

конечно. :=


 
KilkennyCat ©   (2010-08-12 18:38) [5]

ктсати, в теме промелькнуло "динамический". это не есть быстро.


 
Ega23 ©   (2010-08-12 18:45) [6]


> А можно как-либо целиком запись набора скопировать в запись
> массива?


Нет.


 
KilkennyCat ©   (2010-08-12 18:47) [7]


> Ega23 ©   (12.08.10 18:45) [6]

ты запрещаешь? :)


 
DROWSY   (2010-08-12 18:48) [8]


> KilkennyCat ©   (12.08.10 18:36) [4]
> конечно. :=

? := ?


 
KilkennyCat ©   (2010-08-12 19:01) [9]

это оператор присваивания. присваивавывает всякую фигню другой фигне. иногда. при определенных условиях. если условия неопределенные, то их принудительно определяют.


 
DROWSY   (2010-08-12 19:10) [10]

Какую фигню присвоить другой фигне для того чтобы скопировать запись
набора в запись массива?


 
KilkennyCat ©   (2010-08-12 19:27) [11]

откуда я знаю? я даже не знаю, что такое запись массива. элемент массива знаю, а вот запись - нет. я даже не уверен, что правильно понимаю, что есть запись набора.
но поскольку в т.з. говорилось о какой-то копии, то как правило, сие идентично, а раз идентично, значит присваивавываться должно просто с блеском.

в противном случае уточняйте вопрос. учитывая, что делается ставка на скорость - универсального решения нет, только специализированное.
например:
есть массив А. Нужно сделать копию для расчетов В. Расчет такой - если следующий элемент массива больше предыдущего, то к предыдущему присваивается единица.
В таком случае нет необходимости делать предварительную копию, заполнение массива B производится в процессе расчета.
Второй вариант:
то же самое, но потом каждый элемент высчитывается на основе всех других.
И здесь то же, заполнение можно производить при предварительном расчете, а потом окончательный расчет.
третий вариант:
каждый элемент рассчитывается на основе всех, и в момент расчета может изменится любой (что-то заумно, но вообщем так). Тут придется копировать, потом считать.
Четвертый вариант: нужен быстрый слепок, потому что расчет долгий, и за время вычисления исходный массив может изменится.
Тут два варианта: быстро копируем, а потом считаем, либо в процессе заполняем сразу два (ресурсоемко, зато быстро).

И это только навскидку. Что там у Вас - только Вам известно.


 
Сергей М. ©   (2010-08-12 22:19) [12]


> Какой алгоритм быстрого заполнения такого рабочего массива
> данными набора?


Какие записи - такой и алгоритм.


 
DROWSY   (2010-08-12 22:25) [13]

CREATE TABLE STORAGE (
   PR_ID       INTEGER NOT NULL,
   B_S_B       SMALLINT,
   TYPE_S      SMALLINT,
   INVESTMENT  FLOAT,
   EXPANCES    FLOAT,
   TIME_S      SMALLINT,
   FILLING     FLOAT,
   LOADING     SMALLINT
);

Набор состоит из всех полей таблицы STORAGE

//-------------

type
 TStorage = record
    PR_ID     : integer;
    B_S_B     : integer;
    TYPE_S    :  SMALLINT;
    INVESTMENT:  Double;
    EXPANCES  :  Double;
    TIME_S    :  SMALLINT;
    FILLING   :  Double;
    LOADING   :  SMALLINT;
 end;

var Storage : TStorage;

Как проще скопировать запись набора в var Storage (можно ли без цикла по полям набора?)?


 
Amoeba_   (2010-08-12 22:30) [14]


> можно ли без цикла по полям

Не просто можно, а только так. Какой, нафиг, здесь может быть цикл, если Storage не есть массив?


 
Сергей М. ©   (2010-08-12 22:35) [15]


> можно ли без цикла по полям набора?


В данном конкретном случае можно.
type
 TStorages = array of TStorage;

var
SrcStorages, DstStorages: TStorages;
..
 SetLength(DstStorages, Length(SrcStorages));
 Move(SrcStorage[0], DstStorage[0], Length(SrcStorage)*SizeOf(TStorage));


 
DROWSY   (2010-08-12 23:13) [16]


> Сергей М. ©   (12.08.10 22:35) [15]

Это ведь копирование массива записей?!
А как "массив записей набора" скопировать?


 
Сергей М. ©   (2010-08-12 23:16) [17]


> DROWSY   (12.08.10 23:13) [16]


> Это ведь копирование массива записей?!


Угу.
Цитирую тебя:


> (динамический массив записей)


А вот это


> массив записей набора


абсурд.


 
Amoeba_   (2010-08-12 23:19) [18]


> А как "массив записей набора" скопировать?

Ну не существует такого массива. Как мыслите копирование того, чего нет?


 
DROWSY   (2010-08-12 23:49) [19]

Как ОДНУ запись набора скопировать в var Storage : TStorage;
Без присваивания

Storage.PR_ID := FieldByname("PR_ID").asInteger;
.....
Storage.LOADING  := FieldByname("PR_ID").asInteger;


 
Amoeba_   (2010-08-13 00:22) [20]


> Как ОДНУ запись набора скопировать в var Storage : TStorage;
>
> Без присваивания
>

Считай, что никак.


 
Ega23 ©   (2010-08-13 05:39) [21]


> Как ОДНУ запись набора скопировать в var Storage : TStorage;


Тебе уже ответили - никак. в НД реально лежит не совсем массив рекордов, там всё гораздо сложнее.
Кстати, исходники у тебя есть, я бы на твоём месте посмотрел... :)


 
12 ©   (2010-08-13 08:30) [22]

не то?

   qMain: TADOQuery;
   q: TADOQuery;

 q.Clone(qMain);
 q.Open;


 
Ega23 ©   (2010-08-13 09:44) [23]


>  q.Open;


Ты действительно думаешь, что это будет быстрее?


 
Jeer ©   (2010-08-13 09:51) [24]


> Есть набор данных. Для рассчётов нужна рабочая копия этого
> набора.


В TDataset доступен внутренний кэш через:

property Buffers[Index: Integer]: PChar;
property BufferCount: Integer;


 
12 ©   (2010-08-13 10:12) [25]


> Ты действительно думаешь, что это будет быстрее?

вроде MCantu так советовал
но без Open. Open я не подумавши ляпнул, вернее точно не помнил что там понаписано было - но если автора устроило бы - разобрался бы и сам потом, что не нужно



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

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

Наверх




Память: 0.53 MB
Время: 0.01 c
15-1280332456
Baks
2010-07-28 19:54
2010.11.07
Как правильно разбить строку?


15-1280391894
Polkin
2010-07-29 12:24
2010.11.07
Из шланга в цивилиацию.


2-1281389736
Rembo2010
2010-08-10 01:35
2010.11.07
Как считать звук с микрофона?


15-1280222834
12
2010-07-27 13:27
2010.11.07
О "природных" и "противоприродных" видах оружия


2-1281693337
Михаил
2010-08-13 13:55
2010.11.07
[Error] Unit2.pas(43): Type of expression must be BOOLEAN