Текущий архив: 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