Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
 
MeDveD-3A9l
0 / 0 / 1
Регистрация: 13.01.2013
Сообщений: 34
1

Цикл внутри цикла!

19.05.2014, 17:49. Просмотров 316. Ответов 1
Метки нет (Все метки)

Здравствуйте. Имеется БД из 2 таблиц. Подключена к программе через АДО. Нужно вывести отчет в ексель по группам: т.е. сначала вывести название группы, после все данные связанные с этой группой. Написал все это, но почему то первый цикл не очень хорошо обрабатывается, с первой записи перескакивает сразу на последнюю. Код прилагаю:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
void __fastcall TGlav::Button1Click(TObject *Sender)
{
Glav->ADOTzapisi->Sort="Группа"  " ASC";
 
AnsiString sFile;
sFile = GetCurrentDir()+"\\Печать.xlt";
 
 Variant App;
if(!fStart)
 {
 try
 {
App = Variant::CreateObject("Excel.Application");
fStart=true;
 }
 catch(...)
 {
 MessageBox(0, "Ошибка при открытии сервера",
 "Внимание", MB_OK);
 return;
 }
 }
 
Variant XLBook = App.OlePropertyGet("WorkBooks");
 
Variant Sh;
Procedure Open("Open");
XLBook.Exec(Open<<sFile);
Sh = XLBook.OlePropertyGet("Count");
Sh = App.OlePropertyGet("WorkSheets",1);
 
App.OlePropertySet("Visible",Variant(true));
 
String Str;
String Str2;
String Str3;
int i;
int index;
index=4;
Glav->ADOTgruppy->First();
for(i=1;i<=Glav->ADOTgruppy->RecordCount;i++)
 {String Grup;
  String Grupp;
 
  Grupp = Glav->ADOTgruppy->Fields->Fields[1]->AsString;
  Grup = Glav->ADOTgruppy->Fields->Fields[0]->AsString;
  Sh.OlePropertyGet("Cells",index,2).OlePropertySet("Value",Grupp.c_str());
 
  int x;
  AnsiString ran;
  index=index+1;
  Glav->ADOTzapisi->First();
  for(x=1;x<=Glav->ADOTzapisi->RecordCount;x++)
   {
    if (Glav->ADOTzapisi->Fields->Fields[1]->AsString=="True" && Glav->ADOTzapisi->Fields->Fields[3]->AsString==Grup)
    {
     Str = Glav->ADOTzapisi->Fields->Fields[1]->AsString;
     Str2 = Glav->ADOTzapisi->Fields->Fields[2]->AsString;
     Str3 = Glav->ADOTzapisi->Fields->Fields[4]->AsString;
 
     Sh.OlePropertyGet("Cells",index,2).OlePropertySet("Value",Str.c_str());
     Sh.OlePropertyGet("Cells",index,3).OlePropertySet("Value",Str2.c_str());
     Sh.OlePropertyGet("Cells",index,4).OlePropertySet("Value",Str3.c_str());
     Sh.OlePropertyGet("Cells",index,5).OlePropertySet("Value",Grup.c_str());
 
     ran="B4:D"+IntToStr(index);
     Sh.OlePropertyGet("Range",ran.c_str()).OlePropertyGet("Borders",9).
         OlePropertySet("LineStyle",1);
     Sh.OlePropertyGet("Range",ran.c_str()).OlePropertyGet("Borders",9).
         OlePropertySet("Weight",2);
     Sh.OlePropertyGet("Range",ran.c_str()).OlePropertyGet("Borders",9).
         OlePropertySet("ColorIndex",1);
 
     index=index+1;
     }
    Glav->ADOTzapisi->Next();
   }
  index=index+1;
  Glav->ADOTgruppy->Next();
 }
}
Прошу помощи!! Что может быть неправильно написано? Заранее спасибО!

Добавлено через 6 минут
Результат тоже выкладываю!
0
Миниатюры
Цикл внутри цикла!  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2014, 17:49
Ответы с готовыми решениями:

Бесконечный цикл внутри формы
Народ, пожалуйста, подскажите что я делаю неправильно. Нужно чтобы непрерывно...

Цикл For. Вывод цикла внутри цикла
Всем привет, есть проблемка. Код рабочий но при вводе среднего бала допустим...

Цикл внутри цикла
Есть вопрос, можно ли задать цикл внутри цикла? Вот в этой программе чтоб j...

Цикл внутри цикла
Возможно ли сделать ветвлением? Здесь же не одно истинное значение, как и ложное

Цикл внутри цикла
Здравствуйте, делаю скрипт для массового добавления урлов и кеев в базу тдс....

1
MeDveD-3A9l
0 / 0 / 1
Регистрация: 13.01.2013
Сообщений: 34
20.05.2014, 11:03  [ТС] 2
Разобрался сам!! При проходе второго цикла курсор в Датасете "Группа" перемащался и ествественно становился на последнюю строчку, поэтому следующая и последующие записи были равны последне строчки. Добавил перед переходом на следующую строку первого цикла возврат на исходную строку в датасете.

C++
1
2
3
  TLocateOptions Options;
Options << loPartialKey << loCaseInsensitive;
Glav->ADOTgruppy->Locate("КодГруппы",Grup, Options);
Добавлено через 1 час 5 минут
и еще вопросик, мучаюсь с ним давно. Код работает отлично, но только один раз, при следующем нажатии на кнопку выходит ошибка, после перезапуска программы опять все работает и тоже только один раз. Ругается на строку:
C++
1
Variant XLBook = App.OlePropertyGet("WorkBooks");
Ошибка такая:
0
Миниатюры
Цикл внутри цикла!  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2014, 11:03

Цикл внутри цикла (While)
Всем привет. Никак не получается организовать цикл внутри цикла на SQL...

Можно ли располагать цикл внутри цикла?
Здравствуйте. Можно ли располагать цикл внутри цикла? for(....) { ...

Ошибка: Нельзя изменять значение переменной цикла внутри этого цикла
при запуске в строке If i=k Then i:=i+1; выдает ошибку &quot;Нельзя изменять...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru