![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать данные записей в 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]
Можно ли узнать значение пятнадцатой записи, не читая ее из БД?