Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.24;
Скачать: [xml.tar.bz2];




Вниз

Ячейки в DBGrid 


Mike_   (2001-12-19 16:55) [0]

Подкажите, как поименно обратиться к ячейкам в DBGrid? Не нашел ни свойств Col,Row, RowCount, а Fields[].AsString действует только на выделенный мышью строку...



DmitryA   (2001-12-19 17:01) [1]

Row - это текущая запись (курсор)
Col - TCustomDBGrid.Columns.Items[x]



Mike_   (2001-12-19 17:18) [2]

Спасибо. Но по горизонтали более-менее ясно DBGrid1.FieldCount - 1, а максимальное кол-во строк в таблице? И как достать элемент - ну типа s := Cell[i,j]; э?



AlexSV   (2001-12-19 17:50) [3]

В DBGrid эти свойства не публикуемые.
Если есть необходимость, то их можно достать, только для каких целей, если не секрет. Потому что в зависимости от задачи, и реализация будет разной.



Mike_   (2001-12-19 18:00) [4]

Конечно не секрет, а военная тайна ;-))) Из удаленной базы данных SQL-запросом извлекается некая инфа, которая по цепи ADOConnection-ADOQuery-DataSet попадают в DBGrid для того чтобы их помотреть - если надо - и сохранить в файл на локальном диске для другого приложения. Вот, примерно так...



SergVlad   (2001-12-19 18:14) [5]

Вообще-то из DataSet сохранение делать гораздо сподручнее



AlexSV   (2001-12-19 18:43) [6]

Вот примерно так:
объявим здесь -
implementation
type
THackGrid = class(TDBGrid)
public
property Col;
property Row;
property DataLink; // Хотя у меня работает и без этого
end;

и далее по тексту:

procedure TForm1.BitBtn1Click(Sender: TObject);
var
hg: THackGrid;
ar, rc, r, c: integer;
begin
hg := THackGrid(DBGrid1);
r := hg.Row;
c := hg.Col;
ar := hg.DataLink.ActiveRecord;
rc := hg.DataLink.RecordCount;
end;

Небольшие пояснения:
hg.Row - текущая строка видимой области (если Grid в середине то Row = 1 это не первая строка набора данных)
hg.Col - текущая солонка видимой области.
(не помню, но кажется фиксированые могут не входить).

Рекомендую для обхода DataSeta при не визуальном просмотре набора данных (не дергается Selection в DBGrid), но для синхронизации необходимо ActiveRecord восстановить.

hg.DataLink.RecordCount;
hg.DataLink.ActiveRecord;

А не проще-ли просто пробежаться по набору без Grid-а?

Если будут вопросы, то ответы завтра.
Пока.



SergVlad   (2001-12-20 02:20) [7]

<А не проще-ли просто пробежаться по набору без Grid-а?>

О чем и речь.



Mike_   (2001-12-20 11:43) [8]

Большое спасибо всем, кто ответил (а ведь мог бы и послать...на WWW ;-) )
Обошелся конструкцией типа
for j:=1 to DBGrid1.DataSource.DataSet.RecordCount do
begin
DBGrid1.DataSource.DataSet.RecNo:=j;
for i := 0 to DBGrid1.DataSource.DataSet.FieldCount - 1 do
begin
Info := DBGrid1.DataSource.DataSet.Fields[i].AsString;
Топик, как я полагаю, закрыт...
ЗЫ А без грида - ну никак не можна... технические условия, млин...




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.24;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.02 c
14-75659          anod                  2001-11-15 21:54  2002.01.24  
Линии


7-75704           Lizard                2001-10-07 15:55  2002.01.24  
Как остановить отправку сообщения ?


1-75557           bit                   2002-01-06 10:38  2002.01.24  
Error


3-75478           Supostat              2001-12-19 16:42  2002.01.24  
Клиентские места и BDE


1-75614           Vitalik               2002-01-06 21:08  2002.01.24  
создание динамических массиво в Pascale