Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.03.18;
Скачать: [xml.tar.bz2];

Вниз

Как получить данные из DataSet не меняя его активную запись.   Найти похожие ветки 

 
Бездомный   (2011-12-05 12:35) [0]

Желательно с поиском по ключевому полю.

Пока сделал так, но, чувствую, можно сделать как-то быстрее, элегантнее, что ли:

  IDField := List.DataController.KeyField;
  IDValue := Node.KeyValue;

   DL := TDataLink.Create;
   try
     DL.DataSource := List.DataController.DataSource;
     DL.ReadOnly := True;

     Row := DL.ActiveRecord;
     try
       for I := 0 to Pred(DL.RecordCount) do
       begin
         DL.ActiveRecord := I;
         if DL.DataSet.FieldByName(IDField).Value = IDValue then
         begin
           Result := DL.DataSet.FieldByName(FieldName).Value;
           Break;
         end;
       end;
     finally
       DL.ActiveRecord := Row;
     end;
   finally
     DL.Free;
   end;


 
Медвежонок Пятачок ©   (2011-12-05 12:53) [1]

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


 
Димка На   (2011-12-05 12:54) [2]


> Медвежонок Пятачок ©   (05.12.11 12:53) [1]

Ну а как это TDBGrid делает?


 
Jeer ©   (2011-12-05 12:56) [3]

Ему открыть второй датасет религия не позволяет.


 
Медвежонок Пятачок ©   (2011-12-05 12:56) [4]

Ну а как это TDBGrid делает?

А он это делает?


 
Jeer ©   (2011-12-05 12:57) [5]


> Ну а как это TDBGrid делает?


Он вообще ничего не делает, кроме отображения из датасета.


 
Димка На   (2011-12-05 12:57) [6]


> А он это делает?

А разве нет? Активная строка одна, а он при прорисовке показывает все.


 
Димка На   (2011-12-05 12:58) [7]


> Ему открыть второй датасет религия не позволяет.

Предлагаете открывать такой-же датасет и работать с ним?


 
Медвежонок Пятачок ©   (2011-12-05 13:01) [8]

А разве нет? Активная строка одна, а он при прорисовке показывает все.

Конечно нет.


 
OW ©   (2011-12-05 13:03) [9]

в ADO есть Clone, если это ADO


 
Anatoly Podgoretsky ©   (2011-12-05 13:03) [10]


> А разве нет? Активная строка одна, а он при прорисовке показывает
> все.

Не может быть!


 
Димка На   (2011-12-05 13:04) [11]


> Конечно нет.

А как тогда?


> OW ©   (05.12.11 13:03) [9]
> в ADO есть Clone, если это ADO

ADO, ADO, при этом все данные в памяти будут скопированы?


 
Медвежонок Пятачок ©   (2011-12-05 13:06) [12]

А как тогда?

Любая видимая в гриде строка как минимум один раз была текущей в датасете после его открытия.

Или тебе удобнее думать, что грид обладает магией и телепатией?


 
Плохиш ©   (2011-12-05 13:06) [13]


> Димка На   (05.12.11 13:04) [11]
>
> > Конечно нет.
>
> А как тогда?
>

Создай событие OnDataChange, поставь в нëм точку останова и удивись.


 
Ega23 ©   (2011-12-05 13:08) [14]


var
 bm: TBookmark;

with DataSet do
begin
 if IsEmpty then Exit;
 DisableControls;
 try
   bm := GetBookmark;
   try
     First;
     while not Eof do
     begin
       // Вот тута проверяем, чо за запись и подходит она нам или нет.
       Next;
     end;
     GotoBookmark(bm);
   finally
     FreeBookmark(bm);
   end;
 finally
   EnableControls;
 end;
end;


 
OW ©   (2011-12-05 13:08) [15]


> ADO, ADO, при этом все данные в памяти будут скопированы?

да


 
Димка На   (2011-12-05 13:12) [16]


> Или тебе удобнее думать, что грид обладает магией и телепатией?

Хотелось бы.


> Создай событие OnDataChange, поставь в нëм точку останова
> и удивись.

Интересно получается.
Например, взять не грид, а TcxDBTreeList, который в данном случае - то же самое. Ставлю на OnDataChange его DataSource точку останова, запускаю. Останов 2 раза, а строк, которые отображает контрол несколько сотен. Какой отсюда вывод?


 
Димка На   (2011-12-05 13:13) [17]


> Ega23 ©   (05.12.11 13:08) [14]

Спасибо. Я так понимаю это "православный"  вариант?


 
Медвежонок Пятачок ©   (2011-12-05 13:13) [18]

Какой отсюда вывод?

вывод простой: ты наивный и неискушенный человек.


 
OW ©   (2011-12-05 13:16) [19]

давно бы написал
ADODS2.Clone(ADODS1); да посмотрел.
не знаю как реализовано, но внешне как ты описал

дергается вот это
Recordset20 = interface(Recordset15)
function Clone(LockType: LockTypeEnum): _Recordset; safecall;


 
Димка На   (2011-12-05 13:20) [20]


> OW ©   (05.12.11 13:16) [19]
> давно бы написал
> ADODS2.Clone(ADODS1); да посмотрел.
> не знаю как реализовано, но внешне как ты описал
>

Я уже попробовал - работает, но совесть мучает факт копирования данных. Хотя, может они и не копируются, а просто ссылка на них добавляется. Почитаю еще.


 
Ega23 ©   (2011-12-05 13:21) [21]


> Спасибо. Я так понимаю это "православный"  вариант?


Я антихристианин, посему мне обидны ваши слова.


 
Димка На   (2011-12-05 13:25) [22]


> Я уже попробовал - работает, но совесть мучает факт копирования
> данных. Хотя, может они и не копируются, а просто ссылка
> на них добавляется. Почитаю еще.

Нашел по первым трем ссылкам с гугла:
You do not actually make another physical copy which would require memory, but rather, you create a second (or third, etc.) pointer to the same Recordset.
То что нужно.


> Ega23 ©   (05.12.11 13:21) [21]

Ну это слово я с иронией употребил, потому и в кавычках. Извини в любом случае и спасибо за помощь!


 
OW ©   (2011-12-05 13:28) [23]


> Хотя, может они и не копируются, а просто ссылка на них
> добавляется.

По моему, ссылка. Но!
Можно пустить 2 курсора, независимо. Один из - закрыть, открыть и т.п.
Я так делаю, когда доп.поток пускаю на выбранные данные(отчет формировать, печатать). А юзер новые может выбирать в это время.


 
Плохиш ©   (2011-12-05 14:24) [24]


> Димка На   (05.12.11 13:12) [16]

Теперь тоже самое для OnBeforeScroll


 
Ega23 ©   (2011-12-05 14:46) [25]


> Например, взять не грид, а TcxDBTreeList, который в данном
> случае - то же самое. Ставлю на OnDataChange его DataSource
> точку останова, запускаю. Останов 2 раза, а строк, которые
> отображает контрол несколько сотен. Какой отсюда вывод?


Отсюда вывод такой, что TDataSource.OnDataChange дёргается при:
1. Изменении содержимого набора данных.
2. TDataSet.EnableControls



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

Форум: "Начинающим";
Текущий архив: 2012.03.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.003 c
15-1322326868
boriskb
2011-11-26 21:01
2012.03.18
Вакансии


15-1322384341
RDen
2011-11-27 12:59
2012.03.18
конец света отменяется


2-1323105888
LDV
2011-12-05 21:24
2012.03.18
подход к разработке функционала для работы с бд


2-1323190986
Zhuck01
2011-12-06 21:03
2012.03.18
как найти символ в строке


15-1313642062
runer
2011-08-18 08:34
2012.03.18
Как расшарить принтер в WIN7?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский