Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Получение содержимого грида

375
29 марта 2007 года
dominator
199 / / 16.10.2003
Здравствуйте! Нужно получить результат запроса из грида. Подскажите пожалуйста как это сделать.
Пробую так:

for i := 0 to DBGrid_Reports.DataSource.DataSet.RecordCount - 1 do begin
for j := 0 to DBGrid_Reports.Columns.Count - 1 do begin
arrsRecordsetValues[j] := DBGrid_Reports.Columns.Items[j].Field.Text;
end;

DBGrid_Reports.DataSource.DataSet.Next;
end;

но в результате получаю, что первой строкой получается произвольная строка грида, далее все идет по порядку, а затем, после того, как получаю последнюю строку, она же отображается несколько раз до окончания работы цикла (до получения нужного количества строк).
Что я делаю не так?
247
29 марта 2007 года
wanja
1.2K / / 03.02.2003
А не проще прямо из запроса выковыривать?
375
29 марта 2007 года
dominator
199 / / 16.10.2003
Что ты имеешь ввиду?
Ситуация такая - выполняю запрос (использую DBGrid, TQuery, работаю через ado):
ADOQuery_Main.SQL.Clear();
ADOQuery_Main.SQL.Add(ocApp.sACTIVE_GRID_REQUEST);
ADOQuery_Main.Active := true;
Соответственно пользователю предоставляется возможность увидеть данные в гриде. Далее, если увиденное пользователя устраивает (по ряду критериев), он должен еще и анализировать информацию.
Здесь мне нужно еще и обработать данные, представив их в другой удобной пользователю форме. Накладно выполнять еще один запрос к БД - слишком большие затраты по времени. Я хочу просто вытащить уже полученные данные из грида.
375
29 марта 2007 года
dominator
199 / / 16.10.2003
Цитата: wanja
А не проще прямо из запроса выковыривать?



Пробую так:
nRecordsCount := DataModule_Main.DataSource_Main.DataSet.RecordCount;
nFieldsCount := DataModule_Main.DataSource_Main.DataSet.FieldCount;

for i := 0 to nRecordsCount - 1 do begin
for j := 0 to nFieldsCount - 1 do begin
arrsRecordsetValues[j] := DataModule_Main.DataSource_Main.DataSet.Fields[j].Value;
end;
frmMain.DBGrid_Reports.DataSource.DataSet.MoveBy(1);
end;
Но это, если я правильно понимаю то же самое...

247
30 марта 2007 года
wanja
1.2K / / 03.02.2003
Зачем второй раз, ты его что, потом убиваешь? Он же никуда не девается.
375
30 марта 2007 года
dominator
199 / / 16.10.2003
Цитата: wanja
Зачем второй раз, ты его что, потом убиваешь? Он же никуда не девается.



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

9.5K
30 марта 2007 года
Borgir
97 / / 20.12.2006
Цитата: dominator
:) и в самом деле. разобрался. только вот теперь получается что:
когда я вычитываю строки, грид, который подключен к этому DataSet, последовательно прогоняется по всем записям. можно как то этого избежать?



Нет. Грид напрямую железно связан с источником данных. Поэтому при перемещении по записям в источнике данных меняются и текущая стора в гриде. Единственное что могу порекомендовать - запоминать начальную позицию в гриде (или источнике данных), и после всех твоих "махинаций" ( :) ) возвращаться на эту строку.

286
30 марта 2007 года
misha_turist
572 / / 28.11.2005
 
Код:
var index: integer;
begin
Table1.DisableControls;
index:=Table1.RecNo;
// твои действия
Table1.RecNo:=index;
Table1.EnableControls;


У меня используется таблица, но с тем же успехом можно использовать любой источник данных.
375
02 апреля 2007 года
dominator
199 / / 16.10.2003
Цитата: misha_turist
 
Код:
var index: integer;
begin
Table1.DisableControls;
index:=Table1.RecNo;
// твои действия
Table1.RecNo:=index;
Table1.EnableControls;


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



Спасибо большое! Теперь все работает так, как того и хотелось.

286
02 апреля 2007 года
misha_turist
572 / / 28.11.2005
Цитата: dominator
Спасибо большое! Теперь все работает так, как того и хотелось.



Пожалуста!
Но правильнее будет

 
Код:
var index: integer;
begin
Table1.DisableControls;
index:=Table1.RecNo;
try
  // твои действия
finally
  Table1.RecNo:=index;
  Table1.EnableControls;
end;

Т.к. если в превидущем варианте кода в твоих операциях произойдёт ошибка, то визуальные эллементы остануться не активными, а так они в любом случае в октивное состояние возвращаются. )
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог