Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.05.2008, 01:51
James0109 James0109 вне форума
Прохожий
 
Регистрация: 12.05.2008
Сообщения: 13
Репутация: 10
По умолчанию Посчитать количество записей dbgrid

Пожалуйста подскажите как посчитать кол-во строк dbgrid'а и вывести результат в excel.
Ответить с цитированием
  #2  
Старый 19.05.2008, 11:27
Аватар для Appolon
Appolon Appolon вне форума
Новичок
 
Регистрация: 10.01.2008
Адрес: гЕйск
Сообщения: 76
Репутация: 16
По умолчанию

Количество строк считается не в DBGrid'е а в Table
Код:
var i: integer;
XLApp,Sheet,Colum:Variant;
begin
  i:=ADOTable1.RecordCount;
  XLApp:= CreateOleObject('Excel.Application');
  XLApp.Visible:=true;
  XLApp.Workbooks.Add(-4167) ;
  XLApp.Workbooks[1].Worksheets[1].Name:='Количество строк';
  Sheet:=XLApp.Workbooks[1].Worksheets['Количество строк'];
  Sheet.Cells[1,1]:='Количество строк в таблице -'+IntToStr(i);
end;
В uses пропиши comobj.
Ответить с цитированием
  #3  
Старый 19.05.2008, 23:26
James0109 James0109 вне форума
Прохожий
 
Регистрация: 12.05.2008
Сообщения: 13
Репутация: 10
Хорошо

Спасибо тебе добрый человек! Все работает.
Ответить с цитированием
  #4  
Старый 22.05.2008, 10:37
DelphiMax DelphiMax вне форума
Прохожий
 
Регистрация: 19.05.2008
Сообщения: 9
Репутация: 10
По умолчанию

Цитата:
Сообщение от Appolon
Количество строк считается не в DBGrid'е а в Table
Код:
var i: integer;
XLApp,Sheet,Colum:Variant;
begin
  i:=ADOTable1.RecordCount;
  XLApp:= CreateOleObject('Excel.Application');
  XLApp.Visible:=true;
  XLApp.Workbooks.Add(-4167) ;
  XLApp.Workbooks[1].Worksheets[1].Name:='Количество строк';
  Sheet:=XLApp.Workbooks[1].Worksheets['Количество строк'];
  Sheet.Cells[1,1]:='Количество строк в таблице -'+IntToStr(i);
end;
В uses пропиши comobj.
а как тоже самое сделать, но только не Эксель а в TLable на фоме?
Ответить с цитированием
  #5  
Старый 22.05.2008, 10:49
Аватар для Appolon
Appolon Appolon вне форума
Новичок
 
Регистрация: 10.01.2008
Адрес: гЕйск
Сообщения: 76
Репутация: 16
По умолчанию

Код:
var i: integer;
begin
  i:=ADOTable1.RecordCount;
  label1.Caption:='Количество строк в таблице -'+IntToStr(i);
end;
__________________
From VasYa with LoVe...
Ответить с цитированием
  #6  
Старый 01.06.2008, 13:46
Аватар для killpretty
killpretty killpretty вне форума
Прохожий
 
Регистрация: 04.11.2007
Сообщения: 33
Репутация: 10
Вопрос

Цитата:
Сообщение от James0109
Пожалуйста подскажите как посчитать кол-во строк dbgrid'а и вывести результат в excel.


А как подсчитать не количество строк dbgrid'а,а количество одинаковых записей в нем(вернее даже группы записей,а именно чтобы одинаковые записи сгруппировались и подсчитать количество их в каждой группе) и тоже вывести в excel?!Подскажите,пожалуйстааа!
Ответить с цитированием
  #7  
Старый 01.06.2008, 15:50
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Цитата:
Сообщение от killpretty
А как подсчитать не количество строк dbgrid'а,а количество одинаковых записей в нем(вернее даже группы записей,а именно чтобы одинаковые записи сгруппировались и подсчитать количество их в каждой группе) и тоже вывести в excel?!Подскажите,пожалуйстааа!
Через запрос. Например имеем две таблицы main (главная) и tip (подчиненная таблица-справочник)
Код:
SELECT t.tip, COUNT(m.tip_id) AS cnt FROM main m 
INNER JOIN tip t on (m.tip_id = t.tip_id)
GROUP BY t.tip
В результате такого запроса получаем таблицу состоящую из двух полей - tip (тип) и cnt(количество).
Ответить с цитированием
  #8  
Старый 01.06.2008, 22:06
Аватар для killpretty
killpretty killpretty вне форума
Прохожий
 
Регистрация: 04.11.2007
Сообщения: 33
Репутация: 10
Смущение

Цитата:
Сообщение от MegaPiha
Через запрос. Например имеем две таблицы main (главная) и tip (подчиненная таблица-справочник)
Код:
SELECT t.tip, COUNT(m.tip_id) AS cnt FROM main m 
INNER JOIN tip t on (m.tip_id = t.tip_id)
GROUP BY t.tip
В результате такого запроса получаем таблицу состоящую из двух полей - tip (тип) и cnt(количество).


хммм...не соображу..Сорри..мой уровень знания Делфи весьма низок..Можно пороще?прямо на пальцах,если есть терпение

Есть одна таблица Table1.В ней содержатся фамилии,даты,диагнозы.Необходимо сделать запрос так,чтобы диагнозы одинаковые группировались,производился подсчет количества диагнозов в каждой группе и результат выводился в виде таблицы в Эксель...
Ответить с цитированием
  #9  
Старый 01.06.2008, 22:45
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
    XL, Cell1, Cell2, ArrayData: Variant;
    RowCount: integer;
    BeginCol, BeginRow,i,ColCount:byte;
begin
    BeginCol := 1;  // Начальные координаты ячейки
    BeginRow := 3;
    With ADOQuery2 do begin//Делаем наш запрос
        Close;
        SQL.Clear;
        SQL.Add('SELECT diagnos, COUNT(diagnos) as cnt FROM main');
        SQL.Add('GROUP BY diagnos');
        Open;
    end;
    RowCount := ADOQuery2.RecordCount; //Количество строк
    ColCount := 2; //Количество столбцов
    XL := CreateOleObject('Excel.Application');  //создаем Excel
    XL.Application.EnableEvents := false;  // Отключаем реакцию Excel на события (для ускорения)
    XL.WorkBooks.Add;   //  Добавляем книгу
    XL.Rows.Rows[2].Font.Bold:=true; //жирный шрифт
    XL.Rows.Rows[2].Font.Size:=10; //размер шрифта
    XL.Rows.Rows[2].WrapText := True; //перенос текста по словам
    XL.Rows.Rows[2].HorizontalAlignment := 3;//Выравнивание по центру по горизонтали
    XL.Rows.Rows[2].VerticalAlignment := 2;//Выравнивание по центру по вертикали
    XL.Cells[2,1]:= 'Диагноз';//делаем шапку таблицы
    XL.Cells[2,2]:='Количество';
    XL.Columns.Columns[1].ColumnWidth:=50;//устанавливаем ширину столбцов
    XL.Columns.Columns[2].ColumnWidth:=10;

    ArrayData := VarArrayCreate([1, RowCount, 1, ColCount], varVariant); // созданем вариантный массив для заполнения данных из запроса
    ADOQuery2.First;
    for i := 1 to RowCount do
    begin
        ArrayData[i,1] := ADOQuery2['diagnos'];
        ArrayData[i,2] := ADOQuery2['cnt'];
        ADOQuery2.Next;
    end;

    Cell1 := XL.Cells[BeginRow-1, BeginCol];       // левая верхняя ячейка области в которую будем выводить данные
    Cell2 := XL.Cells[BeginRow+RowCount-1, BeginCol + ColCount-1];//Правая нижняя ячейка области
    XL.Range[XL.Cells[BeginRow, BeginCol], Cell2].Value := ArrayData; //вывод данных
    XL.Range[Cell1, Cell2].Borders.LineStyle := 1;
    XL.Visible := true;//делаем Excel видимым
end;
Ответить с цитированием
  #10  
Старый 01.06.2008, 23:14
Аватар для killpretty
killpretty killpretty вне форума
Прохожий
 
Регистрация: 04.11.2007
Сообщения: 33
Репутация: 10
Смех

Все работаааает!!!!Супер!Волшебник,волшебник!!!Совсем обнаглею,но все же спрошу...А как сделать так,чтобы потом,после получения данного отчета,таблица становилась прежней...Т.е.,закрывая эксель и переходя к программе,на форм стояла прежняя таблица,а не полученная в результате запроса?
Ответить с цитированием
  #11  
Старый 02.06.2008, 00:34
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Путем выполнения этого кода с дополнительным компонентом ADOQuery.
при этом основной, с которым связан DBGrid, не трогаешь.
Годится?
Ответить с цитированием
  #12  
Старый 02.06.2008, 01:21
Аватар для killpretty
killpretty killpretty вне форума
Прохожий
 
Регистрация: 04.11.2007
Сообщения: 33
Репутация: 10
Смех

Цитата:
Сообщение от lmikle
Путем выполнения этого кода с дополнительным компонентом ADOQuery.
при этом основной, с которым связан DBGrid, не трогаешь.
Годится?

Ага,спасибо,работает!я не блондинка,правда
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:27.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter