Редакция 111 | Редакция 113 | К новейшей редакции | Только различия | Учитывать пробелы | Содержимое файла | Авторство | Последнее изменение | Открыть журнал | RSS
Редакция 111 | Редакция 112 | ||
---|---|---|---|
1 | #include "mainwindow.h"
|
1 | #include "mainwindow.h"
|
2 | #include "ui_mainwindow.h"
|
2 | #include "ui_mainwindow.h"
|
3 | 3 | ||
4 | 4 | ||
5 | 5 | ||
6 | void MainWindow::getDatabaseData(){ |
6 | void MainWindow::getDatabaseData(){ |
7 | int list_count; |
7 | int list_count; |
8 | 8 | ||
9 | if (rootItems.isEmpty()) return; |
9 | if (rootItems.isEmpty()) return; |
10 | 10 | ||
11 | list_count = rootItems.count(); |
11 | list_count = rootItems.count(); |
12 | 12 | ||
13 | for (int i=0; i < list_count; i++){ |
13 | for (int i=0; i < list_count; i++){ |
14 | 14 | ||
15 | buildTree(rootItems.at(i)); |
15 | buildTree(rootItems.at(i)); |
16 | 16 | ||
17 | }
|
17 | }
|
18 | 18 | ||
19 | }
|
19 | }
|
20 | 20 | ||
21 | void MainWindow::buildTree(QTreeWidgetItem * model_item){ |
21 | void MainWindow::buildTree(QTreeWidgetItem * model_item){ |
- | 22 | ||
- | 23 | ||
- | 24 | ||
- | 25 | ||
22 | QString model_name;
|
26 | QString model_name;
|
23 | QString rootClassID;
|
27 | QString rootClassID;
|
24 | QString rootClassInctance;
|
28 | QString rootClassInctance;
|
25 | 29 | ||
26 | QTreeWidgetItem * item; |
30 | QTreeWidgetItem * item; |
27 | model_name = model_item->text(0); |
31 | model_name = model_item->text(0); |
28 | if (model_item->checkState(0) == false) return; |
32 | if (model_item->checkState(0) == false) return; |
29 | item = new QTreeWidgetItem (ui->treeWidget_2); |
33 | item = new QTreeWidgetItem (ui->treeWidget_2); |
30 | item->setText(0, model_name); |
34 | item->setText(0, model_name); |
31 | rootClassID = model_item->child(0)->text(1); |
35 | rootClassID = model_item->child(0)->text(1); |
32 | rootClassInctance = getClassInctance(rootClassID); |
36 | rootClassInctance = getClassInctance(rootClassID); |
33 | if (model_item->child(0)->checkState(0)) // åñëè â ìîäåëè êîðíåâîé êëàññ âûáðàí äëÿ îòîáðàæåíèÿ (ñòîèò ãàëî÷êà), òî |
37 | if (model_item->child(0)->checkState(0)) // åñëè â ìîäåëè êîðíåâîé êëàññ âûáðàí äëÿ îòîáðàæåíèÿ (ñòîèò ãàëî÷êà), òî |
34 | {
|
38 | {
|
35 | QTreeWidgetItem * item_tmp; |
39 | QTreeWidgetItem * item_tmp; |
36 | item_tmp = new QTreeWidgetItem(item); // â äåðåâå, îòîáðàæàþùåì îáúåêòû êëàññîâ, ñîçäàåì íîâûé óçåë |
40 | item_tmp = new QTreeWidgetItem(item); // â äåðåâå, îòîáðàæàþùåì îáúåêòû êëàññîâ, ñîçäàåì íîâûé óçåë |
37 | item_tmp->setText(0, model_item->child(0)->text(0)); // ñ íàçâàíèåì êëàññà |
41 | item_tmp->setText(0, model_item->child(0)->text(0)); // ñ íàçâàíèåì êëàññà |
38 | 42 | ||
39 | showClassObjects(item_tmp, model_item->child(0)); // è âûâîäèì âñå îáúåêòû äàííîãî êëàññà |
43 | //showClassObjects(item_tmp, model_item->child(0)); // è âûâîäèì âñå îáúåêòû äàííîãî êëàññà
|
- | 44 | ||
- | 45 | showObjects(item_tmp, model_item->child(0), tr("")); |
|
40 | }
|
46 | }
|
- | 47 | ||
- | 48 | ||
- | 49 | /*****************************************************/
|
|
- | 50 | ||
- | 51 | ||
41 | }
|
52 | }
|
42 | 53 | ||
43 | 54 | ||
44 | // ïîëó÷àåì èìÿ òàáëèöû - õðàíèëèùà îáúåêòîâ êëàññà
|
55 | // ïîëó÷àåì èìÿ òàáëèöû - õðàíèëèùà îáúåêòîâ êëàññà
|
45 | QString MainWindow::getClassInctance(QString class_id){ |
56 | QString MainWindow::getClassInctance(QString class_id){ |
46 | QSqlQuery q;
|
57 | QSqlQuery q;
|
47 | QString sql_str;
|
58 | QString sql_str;
|
48 | QString result;
|
59 | QString result;
|
49 | QString classInctance;
|
60 | QString classInctance;
|
50 | int field_inctance; |
61 | int field_inctance; |
51 | bool ok; |
62 | bool ok; |
52 | sql_str = tr("select * " |
63 | sql_str = tr("select * " |
53 | " from ListOfClasses where ListOfClasses.ID = '" //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì |
64 | " from ListOfClasses where ListOfClasses.ID = '" //îïðåäåëèì êëàññû, äëÿ êîòîðûõ êîðíåâîé ÿâëÿåòñÿ êîíòåéíåðîì |
54 | ); |
65 | ); |
55 | sql_str.append(class_id); |
66 | sql_str.append(class_id); |
56 | sql_str.append(tr("'")); |
67 | sql_str.append(tr("'")); |
57 | q.prepare(sql_str); |
68 | q.prepare(sql_str); |
58 | 69 | ||
59 | ok = q.exec(); |
70 | ok = q.exec(); |
60 | if (!ok) { |
71 | if (!ok) { |
61 | QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå. |
72 | QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå. |
62 | this, // Ðîäèòåëüñêèé âèäæåò. |
73 | this, // Ðîäèòåëüñêèé âèäæåò. |
63 | QObject::tr("Database Error"), // Çàãîëîâîê. |
74 | QObject::tr("Database Error"), // Çàãîëîâîê. |
64 | q.lastError().text()); // Òåêñò ñîîáùåíèÿ. |
75 | q.lastError().text()); // Òåêñò ñîîáùåíèÿ. |
65 | return result; |
76 | return result; |
66 | }
|
77 | }
|
67 | field_inctance = q.record().indexOf(tr("TableWhithInstance")); |
78 | field_inctance = q.record().indexOf(tr("TableWhithInstance")); |
68 | while(q.next()){ |
79 | while(q.next()){ |
69 | 80 | ||
70 | classInctance = q.value(field_inctance).toString(); |
81 | classInctance = q.value(field_inctance).toString(); |
71 | result.append(classInctance); |
82 | result.append(classInctance); |
72 | }
|
83 | }
|
73 | 84 | ||
74 | return result; |
85 | return result; |
75 | 86 | ||
76 | }
|
87 | }
|
77 | 88 | ||
78 | void MainWindow::showClassObjects(QTreeWidgetItem * parent_item, QTreeWidgetItem * model_item){ |
89 | void MainWindow::showClassObjects(QTreeWidgetItem * parent_item, QTreeWidgetItem * model_item){ |
79 | QString classID; // èäåíòèôèêàòîð êëàññà |
90 | QString classID; // èäåíòèôèêàòîð êëàññà |
80 | QString inctance; // èìÿ òàáëèöû, õðàíèëèùà |
91 | QString inctance; // èìÿ òàáëèöû, õðàíèëèùà |
81 | QSqlQuery q;
|
92 | QSqlQuery q;
|
82 | QString sql_str;
|
93 | QString sql_str;
|
83 | QString str_tmp;
|
94 | QString str_tmp;
|
84 | bool ok; |
95 | bool ok; |
85 | int field_ID; |
96 | int field_ID; |
86 | int i; |
97 | int i; |
87 | classID = model_item->text(1); |
98 | classID = model_item->text(1); |
88 | inctance = getClassInctance(classID); |
99 | inctance = getClassInctance(classID); |
89 | 100 | ||
90 | sql_str = tr("select * " |
101 | sql_str = tr("select * " |
91 | " from " //íàõîäèì âñå îáúåêòû êëàññà â òàáëèöå - õðàíèëèùå îáúåêòîâ êëàññà |
102 | " from " //íàõîäèì âñå îáúåêòû êëàññà â òàáëèöå - õðàíèëèùå îáúåêòîâ êëàññà |
92 | ); |
103 | ); |
93 | sql_str.append(inctance); |
104 | sql_str.append(inctance); |
94 | q.prepare(sql_str); |
105 | q.prepare(sql_str); |
95 | 106 | ||
96 | ok = q.exec(); |
107 | ok = q.exec(); |
97 | if (!ok) { |
108 | if (!ok) { |
98 | QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå. |
109 | QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå. |
99 | this, // Ðîäèòåëüñêèé âèäæåò. |
110 | this, // Ðîäèòåëüñêèé âèäæåò. |
100 | QObject::tr("Database Error"), // Çàãîëîâîê. |
111 | QObject::tr("Database Error"), // Çàãîëîâîê. |
101 | q.lastError().text()); // Òåêñò ñîîáùåíèÿ. |
112 | q.lastError().text()); // Òåêñò ñîîáùåíèÿ. |
102 | return; |
113 | return; |
103 | }
|
114 | }
|
104 | 115 | ||
105 | field_ID = q.record().indexOf(tr("ID")); |
116 | field_ID = q.record().indexOf(tr("ID")); |
106 | 117 | ||
107 | 118 | ||
108 | while(q.next()){ |
119 | while(q.next()){ |
109 | if (q.record().count() > 1) |
120 | if (q.record().count() > 1) |
110 | {
|
121 | {
|
111 | QString value_tmp;
|
122 | QString value_tmp;
|
112 | QString ID_tmp;
|
123 | QString ID_tmp;
|
113 | QTreeWidgetItem * itm; |
124 | QTreeWidgetItem * itm; |
114 | ID_tmp = q.value(field_ID).toString(); // îïðåäåëÿåì èäåíòèôèêàòîð îáúåêòà |
125 | ID_tmp = q.value(field_ID).toString(); // îïðåäåëÿåì èäåíòèôèêàòîð îáúåêòà |
115 | value_tmp = q.value(1).toString(); // îïðåäåëÿåì èìÿ îáúåêòà (äîëæíî õðàíèòüñÿ â ïåðâîì ïîëå) |
126 | value_tmp = q.value(1).toString(); // îïðåäåëÿåì èìÿ îáúåêòà (äîëæíî õðàíèòüñÿ â ïåðâîì ïîëå) |
116 | itm = new QTreeWidgetItem(parent_item); // äîáàâëÿåì â äåðåâî óçåë, ñîîòâåòñòâóþùèé îáúåêòó |
127 | itm = new QTreeWidgetItem(parent_item); // äîáàâëÿåì â äåðåâî óçåë, ñîîòâåòñòâóþùèé îáúåêòó |
117 | itm->setText(0, value_tmp); |
128 | itm->setText(0, value_tmp); |
118 | for (int i; i < model_item->childCount(); i++) // ïðîâåðÿåì, åñòü ëè ó êëàññà äî÷åðíèå êëàññû |
129 | for (int i; i < model_item->childCount(); i++) // ïðîâåðÿåì, åñòü ëè ó êëàññà äî÷åðíèå êëàññû |
119 | {
|
130 | {
|
120 | QTreeWidgetItem * model_item_tmp; // åñëè åñòü |
131 | QTreeWidgetItem * model_item_tmp; // åñëè åñòü |
121 | model_item_tmp = model_item->child(i); // îòîáðàæàåì îáúåêòû äî÷åðíèõ êëàññîâ |
132 | model_item_tmp = model_item->child(i); // îòîáðàæàåì îáúåêòû äî÷åðíèõ êëàññîâ |
122 | MainWindow::showObjectChildrens(ID_tmp, itm, model_item_tmp); |
133 | MainWindow::showObjectChildrens(ID_tmp, itm, model_item_tmp); |
123 | 134 | ||
124 | }
|
135 | }
|
125 | }
|
136 | }
|
126 | 137 | ||
127 | }
|
138 | }
|
128 | 139 | ||
129 | 140 | ||
130 | i++; |
141 | i++; |
131 | }
|
142 | }
|
132 | 143 | ||
133 | 144 | ||
134 | 145 | ||
135 | void MainWindow::showObjectChildrens(QString object_ID, QTreeWidgetItem * object_item, QTreeWidgetItem * model_item){ // îòîáðàçèì îáúåêòû êëàññîâà |
146 | void MainWindow::showObjectChildrens(QString object_ID, QTreeWidgetItem * object_item, QTreeWidgetItem * model_item){ // îòîáðàçèì îáúåêòû êëàññîâà |
136 | 147 | ||
137 | QString classID; // èäåíòèôèêàòîð êëàññà |
148 | QString classID; // èäåíòèôèêàòîð êëàññà |
138 | 149 | ||
139 | QString inctance; // èìÿ òàáëèöû, õðàíèëèùà |
150 | QString inctance; // èìÿ òàáëèöû, õðàíèëèùà |
140 | QSqlQuery q;
|
151 | QSqlQuery q;
|
141 | QString sql_str;
|
152 | QString sql_str;
|
142 | QString str_tmp;
|
153 | QString str_tmp;
|
143 | bool ok; |
154 | bool ok; |
144 | classID = model_item->text(1); |
155 | classID = model_item->text(1); |
145 | inctance = getClassInctance(classID); |
156 | inctance = getClassInctance(classID); |
146 | 157 | ||
147 | sql_str = tr("select * " |
158 | sql_str = tr("select * " |
148 | " from '" //íàõîäèì âñå îáúåêòû êëàññà â òàáëèöå - õðàíèëèùå îáúåêòîâ êëàññà |
159 | " from '" //íàõîäèì âñå îáúåêòû êëàññà â òàáëèöå - õðàíèëèùå îáúåêòîâ êëàññà |
149 | ); |
160 | ); |
150 | sql_str.append(inctance); |
161 | sql_str.append(inctance); |
151 | sql_str.append(tr("' where ")); |
162 | sql_str.append(tr("' where ")); |
152 | 163 | ||
153 | 164 | ||
154 | q.prepare(sql_str); |
165 | q.prepare(sql_str); |
155 | 166 | ||
156 | ok = q.exec(); |
167 | ok = q.exec(); |
157 | if (!ok) { |
168 | if (!ok) { |
158 | QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå. |
169 | QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå. |
159 | this, // Ðîäèòåëüñêèé âèäæåò. |
170 | this, // Ðîäèòåëüñêèé âèäæåò. |
160 | QObject::tr("Database Error"), // Çàãîëîâîê. |
171 | QObject::tr("Database Error"), // Çàãîëîâîê. |
161 | q.lastError().text()); // Òåêñò ñîîáùåíèÿ. |
172 | q.lastError().text()); // Òåêñò ñîîáùåíèÿ. |
162 | return; |
173 | return; |
163 | }
|
174 | }
|
164 | }
|
175 | }
|
165 | 176 | ||
166 | 177 | ||
167 | void MainWindow::showObjects(QTreeWidgetItem * parent_object_item, QTreeWidgetItem * model_item){ |
178 | void MainWindow::showObjects(QTreeWidgetItem * parent_object_item, QTreeWidgetItem * model_item, QString filtr){ |
- | 179 | QString classID; // èäåíòèôèêàòîð êëàññà |
|
- | 180 | QString inctance; // èìÿ òàáëèöû, õðàíèëèùà |
|
- | 181 | QString className; // èìÿ êëàññà |
|
- | 182 | int field_ID; |
|
- | 183 | bool filtr_empty; |
|
- | 184 | bool ok; |
|
- | 185 | QSqlQuery q;
|
|
- | 186 | QString sql_str;
|
|
- | 187 | QString str_tmp;
|
|
- | 188 | filtr_empty = filtr.isEmpty(); |
|
- | 189 | classID = model_item->text(1); |
|
- | 190 | className = model_item->text(0); |
|
- | 191 | inctance = getClassInctance(classID); |
|
- | 192 | ||
- | 193 | sql_str = tr("select * " |
|
- | 194 | " from " //íàõîäèì âñå îáúåêòû êëàññà â òàáëèöå - õðàíèëèùå îáúåêòîâ êëàññà |
|
- | 195 | ); |
|
- | 196 | sql_str.append(inctance); |
|
- | 197 | if (!filtr.isEmpty()) { // åñëè ôèëüòð íå ïóñòîé |
|
- | 198 | sql_str.append(tr(" ")); |
|
- | 199 | sql_str.append(filtr); // äîáàâëÿåì â çàïðîñ ôèëüòð |
|
- | 200 | }
|
|
- | 201 | ||
- | 202 | q.prepare(sql_str); |
|
- | 203 | ||
- | 204 | ok = q.exec(); |
|
- | 205 | if (!ok) { |
|
- | 206 | QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå. |
|
- | 207 | this, // Ðîäèòåëüñêèé âèäæåò. |
|
- | 208 | QObject::tr("Database Error"), // Çàãîëîâîê. |
|
- | 209 | q.lastError().text()); // Òåêñò ñîîáùåíèÿ. |
|
- | 210 | return; |
|
- | 211 | }
|
|
- | 212 | ||
- | 213 | field_ID = q.record().indexOf(tr("ID")); |
|
- | 214 | ||
- | 215 | while(q.next()){ |
|
- | 216 | if (q.record().count() > 1) |
|
- | 217 | {
|
|
- | 218 | QString value_tmp;
|
|
- | 219 | QString ID_tmp;
|
|
- | 220 | QTreeWidgetItem * itm; |
|
- | 221 | ID_tmp = q.value(field_ID).toString(); // îïðåäåëÿåì èäåíòèôèêàòîð îáúåêòà |
|
- | 222 | value_tmp = q.value(1).toString(); // îïðåäåëÿåì èìÿ îáúåêòà (äîëæíî õðàíèòüñÿ â ïåðâîì ïîëå) |
|
- | 223 | itm = new QTreeWidgetItem(parent_object_item); // äîáàâëÿåì â äåðåâî óçåë, ñîîòâåòñòâóþùèé îáúåêòó |
|
- | 224 | itm->setText(0, value_tmp); |
|
- | 225 | ||
- | 226 | for (int i=0; i < model_item->childCount(); i++) // ïðîâåðÿåì, åñòü ëè ó êëàññà äî÷åðíèå êëàññû |
|
- | 227 | {
|
|
- | 228 | QTreeWidgetItem * model_item_tmp; // åñëè åñòü |
|
- | 229 | QString pointer_name;
|
|
- | 230 | QString filtr_tmp;
|
|
- | 231 | bool pointer_isEmpty; |
|
- | 232 | model_item_tmp = model_item->child(i); // îòîáðàæàåì îáúåêòû äî÷åðíèõ êëàññîâ |
|
- | 233 | pointer_name = getPointerFieldName(classID, model_item->child(i)->text(1)); |
|
- | 234 | pointer_isEmpty = pointer_name.isEmpty(); |
|
- | 235 | filtr_tmp = tr("where "); |
|
- | 236 | filtr_tmp.append(tr("`")); |
|
- | 237 | filtr_tmp.append(pointer_name); |
|
- | 238 | filtr_tmp.append(tr("` = '")); |
|
- | 239 | filtr_tmp.append(ID_tmp); |
|
- | 240 | filtr_tmp.append(tr("'")); |
|
- | 241 | showObjects(itm, model_item_tmp, filtr_tmp); |
|
- | 242 | //MainWindow::showObjectChildrens(ID_tmp, itm, model_item_tmp);
|
|
- | 243 | ||
- | 244 | }
|
|
- | 245 | ||
- | 246 | ||
- | 247 | }
|
|
- | 248 | ||
- | 249 | }
|
|
- | 250 | ||
- | 251 | ||
- | 252 | ||
- | 253 | ||
- | 254 | for (int i; i < model_item->childCount(); i++) // ïðîâåðÿåì, åñòü ëè ó êëàññà äî÷åðíèå êëàññû |
|
- | 255 | {
|
|
- | 256 | ||
- | 257 | ||
- | 258 | }
|
|
- | 259 | ||
- | 260 | }
|
|
- | 261 | ||
- | 262 | QString MainWindow::getPointerFieldName(QString parent_class_id, QString chield_class_id){ |
|
168 | 263 | ||
- | 264 | QSqlQuery q;
|
|
- | 265 | QString sql_str;
|
|
- | 266 | QString str_tmp;
|
|
- | 267 | QString field;
|
|
- | 268 | QString result;
|
|
- | 269 | int field_name; |
|
- | 270 | bool ok; |
|
- | 271 | sql_str = tr("select * " |
|
- | 272 | " from `DescriptionOfClasses` where `DescriptionOfClasses`.`FieldType` = 'pointer' and `DescriptionOfClasses`.`DefaultValue` = " //íàõîäèì âñå îáúåêòû êëàññà â òàáëèöå - õðàíèëèùå îáúåêòîâ êëàññà |
|
- | 273 | ); |
|
- | 274 | ||
- | 275 | sql_str.append(tr("'")); |
|
- | 276 | sql_str.append(parent_class_id); |
|
- | 277 | sql_str.append(tr("' ")); |
|
- | 278 | sql_str.append(tr(" and `DescriptionOfClasses`.`ClassIdentifer` = '")); |
|
- | 279 | sql_str.append(chield_class_id); |
|
- | 280 | sql_str.append(tr("'")); |
|
- | 281 | q.prepare(sql_str); |
|
- | 282 | ||
- | 283 | ok = q.exec(); |
|
- | 284 | if (!ok) { |
|
- | 285 | QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå. |
|
- | 286 | this, // Ðîäèòåëüñêèé âèäæåò. |
|
- | 287 | QObject::tr("Database Error"), // Çàãîëîâîê. |
|
- | 288 | q.lastError().text()); // Òåêñò ñîîáùåíèÿ. |
|
- | 289 | return result; |
|
- | 290 | }
|
|
- | 291 | field_name = q.record().indexOf(tr("FieldName")); |
|
- | 292 | while(q.next()){ |
|
- | 293 | result = q.value(field_name).toString(); |
|
- | 294 | }
|
|
- | 295 | return result; |
|
169 | }
|
296 | }
|
170 | 297 | ||
171 | 298 |