Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать данные записей в TDataSet не перемещаясь по ним?


Adoon ©   (2003-12-04 13:15:00) 

Необходимо собрать сведения о некоторых полях записей в TDataSet не перемещаясь по нему, т.е. не смещая указатель с текущей записи
(BookMark не предлагать)


MalkoLinge   (2003-12-05 10:46:00) [1]

Implements a virtual method to retrieve field values from a record that matches specified search values.

function Lookup(const KeyFields: string; const KeyValues: Variant; const ResultFields: string): Variant; virtual;

Description

This function returns a Variant with the value False, indicating that a matching record was not found.

Descendant classes override this method so that it locates the record where the fields identified by the comma-delimited string KeyFields have the values specified by the Variant or Variant array KeyValues. In classes that implement Lookup, it returns a Variant or Variant array that contains the value or values of the fields specified by the comma-delimited string ResultFields on the specified record.


RUYurik   (2003-12-05 10:44:00) [2]

А почему бы просто не сделать калькулируемое поле? На OnCalcField писать все что нужно сделать


Shirson   (2003-12-05 10:35:00) [3]

Целевого? :) А нам не пофигу? Тот, с которого он клонируется, метод Clone не трогает.
Целевой потом открывается, и это естественно - как работать с закрытым DataSet? Только данные он уже имеет.
Так что времени тут тратится чуть.

Можешь сам проверить:
Прогнать запрос, который занимает минуты две, а потом результат склонировать в другой DataSet и посмотреть, сколько это займёт времени :)


NIK222   (2003-12-05 10:26:00) [4]

Shirson - насчет CLONE, посмотри исходник этого метода.
Там сначала целевой Dataset.close а потом опять Open
Так что по скорости думаю проигрыша не будет,


Shirson   (2003-12-05 07:53:00) [5]

>Adoon

ADO.

Из рабочего DataSet делаешь Clone в промежуточный DataSet(>nik222 открывать два датасета с базы это почти двойная потеря времени. А это, частенько, весьма критично ) и работаешь с ним.


ЮЮ   (2003-12-05 06:59:00) [6]

>мне необходимо кое что просчитать, для чего надо просмотреть даные по нескольким записям

Если эти записи видны в гриде, то можно воспользоваться его DataLink-ом (Гриду тоже мало активной записи, ему тоже нужен доступ ко всем видимым записям и это реализовано с помощью TDataLink)


Кщд   (2003-12-05 06:50:00) [7]

не ясно, чем не устраивает схема
1. Bookmark
2. DisableControls
3. Вычисления
4. Bookmark
5. EnableControls


Adoon   (2003-12-04 19:16:00) [8]

to Sergey_Masloff
извращения я не придумывал, я просто столкнулся со следующей проблемой
есть у меня Грид и рядом DBRichEdit в которой вывожу описание записи, при нажатии на какую либо запись мне необходимо кое что просчитать, для чего надо просмотреть даные по нескольким записям, пока я просматриваю эти записи, описание в DBRichEdit меняется, т.к. меняется указатель на текущую запись
Есть несколько решений - 2 DataSet (мне почему то не очень нравится), отключать DBRichEdit от БД временно (тоже плохо)
и т.д. В конечном счете я просто хотел узнать, как без перемешения по записям, узнать их данные


nik222   (2003-12-04 15:39:00) [9]

Открывай два одинаковых DataSet - один рабочий оин скрытый
Вот и все решение проблемы


Sergey_Masloff   (2003-12-04 15:09:00) [10]

Adoon (04.12.03 13:15)
Вобщем, ты придумал зачем-то извращение и ищешь еще как можно более извращенные пути его реализации. Мигрируй на дотнет. Это там рекордсет теперь как матрица - куда хошь туда и лезь. Я все думал - ну кому это может понадобиться? И зачем это делать единственным способом работы ;-)


Digitman   (2003-12-04 14:17:00) [11]


> BookMark не предлагать


непонятно - почему


Adoon   (2003-12-04 14:03:00) [12]

> Сделать запрос в другом DataSet и перемещаться там, хотя чем Locate не нравится, например...

Implements a virtual method for searching a dataset for a specified record and making it the active record.

А активная запись должна оставаться там, где была


Romkin   (2003-12-04 13:33:00) [13]

Можно использовать Lookup


Sandman25   (2003-12-04 13:29:00) [14]

>Разве при вызове метода Open в компоненте TQuery не считываются все строки, заданные в запросе?

Не обязательно. Иначе бы не было метода FetchAll


Рамиль   (2003-12-04 13:24:00) [15]

Сделать запрос в другом DataSet и перемещаться там, хотя чем Locate не нравится, например...


Adoon   (2003-12-04 13:23:00) [16]

Разве при вызове метода Open в компоненте TQuery не считываются все строки, заданные в запросе? т.е. из БД мы считали уже 30 записей, стоим на 15 записи и надо узнать значение поля 20-ой записи


Sandman25   (2003-12-04 13:16:00) [17]

Можно ли узнать значение пятнадцатой записи, не читая ее из БД?


Наверх

Титульная страница Поиск, карта сайта Написать письмо