Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2012, 19:31   #1
grom333
Форумчанин
 
Аватар для grom333
 
Регистрация: 21.10.2008
Сообщений: 337
По умолчанию БД, подписывать группы при экспорте

Есть БД access (ADO). Хранятся поля Наименование|Цена|Группа

Нужно вывести в Эксель список по такому правилу.
1. Вывод производится в 4 колонки
Наименование|Цена Наименование|Цена
Наименование|Цена Наименование|Цена
Наименование|Цена Наименование|Цена
.....

2. Перед каждой группой нужно делать название данной группы.
Поясняю. Группы это: мониторы, мыши, процессоры.

Вот как подписать можно так по группам.
МОниторы:
Наименование|Цена Наименование|Цена
Наименование|Цена Наименование|Цена
...
Клавиатуры:
Наименование|Цена Наименование|Цена
Наименование|Цена Наименование|Цена
...
-----------------------------
Стандартный вывод сделал в Excel:
Наименование|Цена
Наименование|Цена
Наименование|Цена
...

Мне нужно понять саму логику выполнения задания, каким путем это сделать.

============================
1 пункт решил, просто в один запрос пустил 4 столбика:
Код:
A.First;
 for i:=0 to A.RecordCount-1 do
  begin
   Sheet.Cells[index,1]:=IntToStr(i+1);
   Sheet.Cells[index,2]:= A.FieldByName('naim').AsString;
   Sheet.Cells[index,3]:= A.FieldByName('cena').AsString;

   Sheet.Cells[index,5]:= A.FieldByName('naim').AsString;
   Sheet.Cells[index,6]:= A.FieldByName('cena').AsString;
   Inc(index);
   A.Next;
Осталось как то решить с подписыванием, на подобие Title Группы ...
Лучше быть последним из львов, чем первым среди шакалов.
Мой чат
community on struggle with zoomics

Последний раз редактировалось grom333; 08.02.2012 в 19:52. Причина: 1 пункт решил.
grom333 вне форума Ответить с цитированием
Старый 08.02.2012, 20:13   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В запросе наименование группы включите в запись, ORDER BY по нему и дальше по наименованию продукта. При записи в таблицу отслеживайте наименование группы и при его изменении пишите в таблицу в качестве подзагловка
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.02.2012, 20:32   #3
grom333
Форумчанин
 
Аватар для grom333
 
Регистрация: 21.10.2008
Сообщений: 337
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
В запросе наименование группы включите в запись, ORDER BY по нему и дальше по наименованию продукта. При записи в таблицу отслеживайте наименование группы и при его изменении пишите в таблицу в качестве подзагловка
В экспорте будет вывод всей таблицы.
Я вижу решение такое (правильно или нет?). В переменную считываем группу и записываем в эксель Группу и дальше пункты пошли из этой группы, как только условие меняется т.е. название группы другое, то мы записываем ее в переменную и в таблицу. И т.д. Хотя можно и без переменной. В простом запросе например в текстовый файл записал бы это легко. Но путаница происходит со столбцами и строками.. Тем более идет по 2 столбца .
Лучше быть последним из львов, чем первым среди шакалов.
Мой чат
community on struggle with zoomics
grom333 вне форума Ответить с цитированием
Старый 08.02.2012, 21:20   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А путаница то в чем? Если подзаголовок, то пишется только в первый столбец строки. Все, в эту строку ничего больше не пишем и Index увеличили. Каждую строку детализации в несколько столбцов в отдельную строку
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.02.2012, 22:52   #5
grom333
Форумчанин
 
Аватар для grom333
 
Регистрация: 21.10.2008
Сообщений: 337
По умолчанию

А вот на счет 1 пункта я поторопился... С тем кодом
Код:
A.First;
 for i:=0 to A.RecordCount-1 do
  begin
   Sheet.Cells[index,1]:=IntToStr(i+1);
   Sheet.Cells[index,2]:= A.FieldByName('naim').AsString;
   Sheet.Cells[index,3]:= A.FieldByName('cena').AsString;

   Sheet.Cells[index,5]:= A.FieldByName('naim').AsString;
   Sheet.Cells[index,6]:= A.FieldByName('cena').AsString;
   Inc(index);
   A.Next;
он просто повторяет одинаковые записи в первый и во второй столбик...
Если ставлю так:
Код:
A.First;
 for i:=0 to A.RecordCount-1 do
  begin
   Sheet.Cells[index,2]:= A.FieldByName('naim').AsString;
   Sheet.Cells[index,3]:= A.FieldByName('cena').AsString;
    a.Next;
   Sheet.Cells[index,5]:= A.FieldByName('naim').AsString;
   Sheet.Cells[index,6]:= A.FieldByName('cena').AsString;
   Inc(index);
   A.Next;
То идет все правильно, НО! Последняя запись повторяется много-много раз... т.к. я понимаю у нее в запасе a.recordcount-1 осталось, а записей нет больше.
Лучше быть последним из львов, чем первым среди шакалов.
Мой чат
community on struggle with zoomics
grom333 вне форума Ответить с цитированием
Старый 08.02.2012, 22:56   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
A.First;
while not A.Eof do begin
  Sheet.Cells[index,2]:= A.FieldByName('naim').AsString;
  Sheet.Cells[index,3]:= A.FieldByName('cena').AsString;
  a.Next;
  if a.Eof then Break;
  Sheet.Cells[index,5]:= A.FieldByName('naim').AsString;
  Sheet.Cells[index,6]:= A.FieldByName('cena').AsString;
  Inc(index);
  A.Next;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.02.2012, 23:12   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
for i:=0 to A.RecordCount-1 do
  begin
   nrow:=i div 2;
   ncol:=(i mod 2)*3;
   Sheet.Cells[nrow, ncol+1]:=IntToStr(i+1);
   Sheet.Cells[nrow,,ncol+2]:= A.FieldByName('naim').AsString;
   Sheet.Cells[nrow, ncol+3]:= A.FieldByName('cena').AsString;

  A.Next;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Взаимодействие с ячейками при экспорте в Excel ZHDN Общие вопросы Delphi 0 28.07.2011 18:46
При экспорте базы в Excel выводит везде первое значение Aleksandr Общие вопросы Delphi 1 25.04.2011 12:07
не выводяться загловки при экспорте Daur Общие вопросы Delphi 0 16.05.2010 16:15
При экспорте в EXCEL должны поподать свежие данные GhostBZ БД в Delphi 4 02.09.2009 15:35
как организовать отклик на событие при импорте-экспорте данных Artmi Microsoft Office Excel 8 03.06.2008 23:31