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

Вниз

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

 
Adoon   (2003-12-04 13:15) [0]

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


 
Sandman25 ©   (2003-12-04 13:16) [1]

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


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

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


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

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


 
Sandman25 ©   (2003-12-04 13:29) [4]

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

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


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

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


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

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

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

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


 
Digitman ©   (2003-12-04 14:17) [7]


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


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


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

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


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

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


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

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


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

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


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

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

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


 
Shirson ©   (2003-12-05 07:53) [13]

>Adoon

ADO.

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


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

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


 
Shirson ©   (2003-12-05 10:35) [15]

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

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


 
RUYurik ©   (2003-12-05 10:44) [16]

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


 
MalkoLinge ©   (2003-12-05 10:46) [17]

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.



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

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

Наверх




Память: 0.5 MB
Время: 0.023 c
14-99786
VictorT
2003-12-04 18:13
2003.12.30
Для тех, кто бывает на дремучем форуме....


1-99563
Andrew287
2003-12-17 23:54
2003.12.30
TTreeView теряет активность


1-99587
Clift
2003-12-17 15:23
2003.12.30
Кнопка /Пуск/


14-99753
i80486
2003-12-06 19:35
2003.12.30
-=


14-99787
Ru
2003-12-05 14:53
2003.12.30
Празднуем активней товарищи.