Разработка программного продукта, оптимизирующего создание отчетов по базе данных
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
550000000 AND id != 91953900000id != 91956500000 AND id != 92150000000id != 92555700000 AND id != 92956100000id != 90010000000 AND id != 90020000000id != 90030000000SIBLINGS BY ord, name
Данные выбираются из одной таблицы, в которой содержится информация об отделах и предприятиях. Таблица иерархическая (ссылается сама на себя) и данные можно представить в виде дерева. Но в таблице также содержится информация и о других предприятиях (например головной офис). Отображать необходимо только информацию о сотрудниках Кольского филиала, отсюда такое большое количество условий.
Запрос для составления отчета:distinct replace(f || || i || || o,.,) fio, replace(job.name, .,) job, job.rank as rank, mail, replace(tel,,,, ) tel, person.id_struct, person.id, b.name as name, b.rn as rn, replace(b.path, /%/, ) path from personjoin
(SELECT id_person, wm_concat(tel) AS telperstelBY id_person) a on a.ID_PERSON = Person.idjoin persjob on PERSON.ID = PERSJOB.ID_PERSONjoin job on job.id = PERSJOB.ID_JOBjoin
(SELECT name, level, parent_id, id, rownum as rn, SYS_CONNECT_BY_PATH(name, /) as PathstructureWITH parent_id = 10000000000BY PRIOR id = parent_id AND id != 90150000000id != 92350000000 AND id != 90040000000id != 90050000000 AND id != 90120000000id != 92350000000 AND id != 90140000000id != 94875102396 AND id != 90751300000id != 90961580000 AND id != 90971590000id != 91750000000 AND id != 91350000000id != 91550000000 AND id != 91953900000id != 91956500000 AND id != 92150000000id != 92555700000 AND id != 92956100000id != 90010000000 AND id != 90020000000id != 90030000000SIBLINGS BY ord, name) b on PERSON.ID_STRUCT = b.idjoin
(SELECT id_person, wm_concat(mail) AS mailpersmailBY id_person) c on c.ID_PERSON = person.idby rn, person.id_struct, rank, fio
В данном запросе используется информация из всех таблиц, слияние нескольких атрибутов в один, замена подстроки в строке результата, вложенные запросы, рекурсивный запрос.
Интерфейс
Рис.1 Окно авторизации
Рис.2 (Данные сотрудников закрашены по просьбе руководителя практики)
Рис.3 (Данные сотрудников закрашены по просьбе руководителя практики)
Листинг.__fastcall TInfo::ExcelRepClick(TObject *Sender)
Visible=false;->First();//createExcelfilei,count,pole;cur_value;oExcel,oWb,book,oSh,sheet,cell;=CreateOleObject("Excel.Application");=oExcel.OlePropertyGet("Workbooks");.OlePropertySet("SheetsInNewWorkbook",1);.OleProcedure("add");=oWb.OlePropertyGet("item",1);=oExcel.OlePropertyGet("Worksheets");=oSh.OlePropertyGet("item",1);.OlePropertySet("Name","");=1;max_length=12;(countCount) //write current department
Lines->Strings[count-1].c_str());.OlePropertyGet("Borders").OlePropertySet("LineStyle",1);++;">{=sheet.OlePropertyGet("Cells").OlePropertyGet("Item",count,1);.OlePropertySet("Value",Path->Lines->Strings[count-1].c_str());.OlePropertyGet("Borders").OlePropertySet("LineStyle",1);++;
}= 1;max_count = ADOQuery3->RecordCount+Path->Lines->Count;buf_dept;(countCount) //write data about persons
{Lines->Count+1,count);.OlePropertySet("Value",Titles->Lines->Strings[count-1].c_str());.OlePropertyGet("Borders").OlePropertySet("LineStyle",1);.OlePropertySet("ColumnWidth", 12);_dept ="";(i=Path->Lines->Count+1;iCount+1;i<=max_count;i++)
{(buf_dept != ADOQuery3->FieldByName("PATH")->AsString)
{(count == 1)
{FieldByName("PATH")->AsString;.OlePropertySet("Value", buf_dept.c_str());.OlePropertyGet("Borders").OlePropertySet("LineStyle",1);;">//create header_count ++;=sheet.OlePropertyGet("Cells").OlePropertyGet("Item",i+1,count);_dept = ADOQuery3->FieldByName("PATH")->AsString;.OlePropertySet("Value", buf_dept.c_str());.OlePropertyGet("Borders").OlePropertySet("LineStyle",1);;
} else {++;_dept = ADOQuery3->FieldByName("PATH")->AsString;
}
}FieldByName(Fields->Lines->Strings[count-1])->AsString;.OlePropertySet("Value",cur_value.c_str());(max_length AsString;.OlePropertySet("Value",cur_value.c_str());(max_length < cur_value.Length()+7)
{_length = cur_value.Length()+7;//change width of cells
}.OlePropertyGet("Borders").OlePropertySet("LineStyle",1);.OlePropertySet("ColumnWidth", max_length);.OlePropertySet("HorizontalAlignment",2);_value="";->Next();
}++;_length = 12;->First();
}>Visible = true;.OlePropertySet("Visible",true);
}