![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
выборка из dbgrid [D7, XP]
shake © (2006-08-28 11:11:00)Доброго времени суток !
Подскажите пожалуйста как обратиться к ячейке в dbgrid или записать содержимое в переменную ?
(есть что-то аналогичное как в stringgrid ...cells[2,3] ?)
Буду очень признателен за пример
Ega23 (2006-08-30 16:47:00) [1]
> MsGuns © (30.08.06 15:51) [12]
Только я бы добавил ещё
var
bm: TBookMark;
with dbgrid1.DataSource.DataSet do
begin
try
DisableControls;
bm := GetBookMark;
First;
while not Eof do
begin
for a:= 0 to Fields.Count-1 do
... := Fields[a].asstring;
Next;
end;
GoToBookMark(bm);
FreeBookMark(bm);
finally
EnableControls;
end;
end;
Чтобы уж точно EnableControls прошёл.
MsGuns (2006-08-30 15:51:00) [2]>shake (30.08.06 06:04) [11]
а теперь перепиши вот так:
var
bm: TBookMark;
with dbgrid1.DataSource.DataSet do
begin
DisableControls;
bm := GetBookMark;
First;
while not Eof do
begin
for a:= 0 to Fields.Count -1do
... := Fields[a].asstring;
Next;
end;
GoToBookMark(bm);
FreeBookMark(bm);
EnableControls;
end;
и твой код будет не противно читать, он не будет тормозить и дергать грид и, кроме того, вернет после сканирования курсор в исходное положение
shake (2006-08-30 06:04:00) [3]И ещё раз башое башое спасибо !!!
У меня все полулучилось, я сделал примерно так
dbgrid1.DataSource.DataSet.First;
while not dbgrid1.DataSource.DataSet.Eof do
begin
for a:= 1 to dbgrid1.DataSource.DataSet.FieldCount do
.....................................................................
showmessage(dbgrid1.DataSource.DataSet.Fields.FieldByNumber(a).asstring);
.....................................................................
dbgrid1.DataSource.DataSet.Next;
end;
Ega23 (2006-08-29 12:49:00) [4]см. справку по методам TDataSet:
First, Next, Prior, Last.
shake (2006-08-29 12:43:00) [5]Спасибо !!!
я сделал так:
showmessage(dbgrid1.DataSource.DataSet.Fields.FieldByNumber(1).asstring);
- работает
но, только как быть, если у меня таблица типа
|---------------------|
| x1 | x2 | x3 |
|---------------------|
| 1 | 2 | 3 |
|---------------------|
| 4 | 5 | 6 |
|__________________|
через FieldByNumber я могу перемещаться по числам "1" "2" "3" ,
а как быть если я хочу обратиться к числам которые в "нижнем ряду" (4,5,6)?
как сменить "текущую строку" из которой идёт выбор ?
Virgo_Style (2006-08-29 08:09:00) [6]shake (29.08.06 5:19) [6]
После DataSet поставь точку, чуть подожди и полистай... "Там столько всего вкусного!" (с) %-) Кажется, Fields тебе нужен.
Sergey13 (2006-08-29 08:00:00) [7]> [6] shake (29.08.06 05:19)
В хелпе смотрел?
Индкс колонки грида вовсе необязательно совпадает с индексом поля датасета.
shake (2006-08-29 05:19:00) [8]dbgrid не содержит в себе данные, он отображает их из источника через datasource.
Но всёже, как обратиться к данным по числовым индексам? Может быть у кого-то есть примеры
MBo (2006-08-28 12:06:00) [9]>shake
Ответь на вопрос - содержит ли DBGrid в себе данные?
shake (2006-08-28 12:01:00) [10]спасибо, Ega23 !!! Пример работает.
А можно вместо fieldname как-нибудь указать индекс в dbgrid ? То есть чтобы не было необходимости обрашаться по символьному полю, а была возможность организовать цикл
Fay (2006-08-28 11:29:00) [11]Мне кажется, нет ничего зазорного в том, что начинающий читает какую-нибудь книжку по Delphi. Судя по всему, афтар читать умеет. Но стесняется?
Ega23 (2006-08-28 11:23:00) [12]ВИПкшвюВфефЫщгксуюВфефЫуеюАшудвИнТфьу
блин...
DBGrid.dataSource.DataSet.FieldByName(FieldName).As....
Sergey13 (2006-08-28 11:13:00) [13]> [0] shake (28.08.06 11:11)
Работай не с ячейками, а с записям и полями датасета, отображаемого в гриде.