Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > считаем строки в dbgrid


Автор: alf138 19.9.2011, 18:42
Есть dbgrid в нём есть заполненые поля, нужно посчитать заполненные поля думал посчитать так 
Код

for i:= 0 to DBGrid1.DataSource.DataSet.FieldCount - 1 do
h:=h+1;

не хотит ...  smile 

Автор: Данкинг 19.9.2011, 18:46
Мне только такой вот извращённый способ в голову приходит:
Код

for i:= 0 to DBGrid1.DataSource.DataSet.FieldCount - 1 do
 if length(trim(DataSet.fieldvalues[DataSet.fields[i].fieldname]))<>0 then
  inc (h);

Автор: alf138 19.9.2011, 18:49
Код

for i:= 0 to DBGrid1.DataSource.DataSet.FieldCount - 1 do
if Length(Trim(DBGrid1.DataSource.DataSet.FieldValues[DBGrid1.DataSource.DataSet.Fields[i].FieldName]))<>0 then
// if length(trim(DataSet.fieldvalues[DataSet.fields[i].fieldname]))<>0 then
  inc (h);
  Label3.Caption:=IntToStr(h);

стройчиво пишет циферку "1" хотя грид забит под завязку smile 

Автор: Данкинг 19.9.2011, 19:00
Попробуй Begin поставить, хотя это глупо, конечно:
Код

for i:= 0 to DBGrid1.DataSource.DataSet.FieldCount - 1 do
 begin 
  if  length(Trim(DBGrid1.DataSource.DataSet.FieldValues[DBGrid1.DataSource.DataSet.Fields[i].FieldName]))<>0    then
  inc (h);
 end;
 Label3.Caption:=IntToStr(h);

Автор: alf138 19.9.2011, 19:12
Кинул на кнопку он работает как обычный счетчик, щелкнул прибавилась единичка. А вот строчки не считает (

Автор: Данкинг 19.9.2011, 21:33
Цитата(alf138 @  19.9.2011,  20:12 Найти цитируемый пост)
А вот строчки не считает ( 

Какие строчки? Тебе что посчитать-то требуется?

Автор: alf138 20.9.2011, 03:16
Количество заполненных строчек в DBGRID.

Автор: bems 20.9.2011, 05:41
Поля это столбцы.
Записи это строки.
Если тебе строки, то FieldCount не при чем

Автор: AndreyIQ 20.9.2011, 07:53
Цитата(alf138 @ 19.9.2011,  18:42)
Есть dbgrid в нём есть заполненые поля, нужно посчитать заполненные поля думал посчитать так 
Код

for i:= 0 to DBGrid1.DataSource.DataSet.FieldCount - 1 do
h:=h+1;

не хотит ...  smile

Если просто кол-во надо посчитать, то проще всего через Query
Код

Query1.FetchAll;
Query.RecordCount;

Если надо по всем записям пройтись, то
Код

  while Query.Eof do
  begin
    .....
    Query.Next;
   end;

А еще лучше все запросом сделать smile 

Автор: Данкинг 20.9.2011, 09:33
Цитата(alf138 @ 20.9.2011,  04:16)
Количество заполненных строчек в DBGRID.

 smile 
Код

DBGrid1.DataSource.DataSet.First;
for ii:= 1 to DBGrid1.DataSource.DataSet.RecordCount do
 begin 
  for i:= 0 to DBGrid1.DataSource.DataSet.FieldCount - 1 do
    if length(trim(DataSet.fieldvalues[DataSet.fields[i].fieldname]))<>0 then
         inc (h);
 DBGrid1.DataSource.DataSet.Next; 
 end;

Автор: AndreyIQ 20.9.2011, 09:45
Чуть не забыл, перед циклом DisableControls, после EnableControls;

Автор: Staruha 20.9.2011, 10:10
Ну да надо считать во время вывода данных в Grid. Если же ты тащишь все данные то используй ClientDataSet

Автор: alf138 21.9.2011, 03:54
Всем спасибо, получилось в разы проще
Код

Label3.Caption:=IntToStr(DBGrid1.DataSource.DataSet.RecordCount);

 smile 

Автор: Данкинг 21.9.2011, 12:54
alf138, это называется "число строк в таблице (т.е. датасете)". smile 

Автор: superVad 21.9.2011, 19:25
Цитата(alf138 @  21.9.2011,  02:54 Найти цитируемый пост)
Всем спасибо, получилось в разы проще

Это количество строк, а не количество заполненных полей.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)