private bool SaveSateOld(Dictionary <string, string> state) { if (_daoDb != null) { _daoDb.Execute("DELETE * FROM " + TableName); const string stringSql = "SELECT " + FieldPropName + ", " + FieldPropValue + " FROM " + TableName + ";"; using (var rs = new RecDao(_daoDb, stringSql)) { foreach (var key in state.Keys) { if (key != null) { rs.AddNew(); rs.Put(FieldPropName, key); rs.Put(FieldPropValue, state[key]); } } } return(true); } return(false); }
//Сгенерировать public void Generate(string makedFile, //Файл сгенерированных таблиц string makedTabl, //Главная сгенерированная таблица string makedSubTabl = null) //Подчиненная сгенерированная таблица { try { AddEvent("Открытие рекордсетов для записи сгенерированных значений"); using (var db = new DaoDb(makedFile)) { if (makedSubTabl != null) { db.Execute("DELETE * FROM " + makedSubTabl); } db.Execute("DELETE * FROM " + makedTabl); using (var rec = new DaoRec(db, makedTabl)) using (var subRec = makedSubTabl == null ? null : new DaoRec(db, makedSubTabl)) foreach (var row in _rowsGen.Values) { if (row.Keeper.Errors.Count == 0) { if (!row.RuleString.IsEmpty()) { AddEvent("Генерация данных по шаблону", row.RuleString); } row.Generate(DataTabls, rec, subRec); } } } } catch (Exception ex) { AddError("Ошибка при генерации", ex, makedFile); } }
//Создание рабочего файла, возвращает ошибку или "" public string MakeWorkFile() { if (State != State.Compiled) { string s = CompileProject(); if (s != "") { return(s); } } StartAtom(Atom.MakeWorkFile); if (State == State.Closed) { AddError("Копилятор уже был закрыт"); } else { try { var f = new FileInfo(_projectFile); string cd = _compiledDir; if (cd.IsEmpty()) { cd = f.DirectoryName; } cd = (cd ?? "").EndsWith("\\") ? cd : cd + "\\"; _workFile = cd + f.Name.Substring(0, f.Name.Length - f.Extension.Length) + "_Work" + f.Extension; Procent = 10; AddEvent("Копирование в новый файл", _workFile); f.CopyTo(_workFile, true); Procent = 30; AddEvent("Очистка расчетных параметров"); using (var db = new DaoDb(_workFile)) { db.Execute("DELETE CalcParams.* FROM CalcParams WHERE CalcOn=False"); db.Execute("DELETE CalcSubParams.* FROM CalcSubParams WHERE CalcOn=False"); Procent = 40; db.Execute("UPDATE CalcParams SET UserExpr1=Null, UserExpr2=Null"); db.Execute("UPDATE CalcSubParams SET UserExpr1=Null, UserExpr2=Null"); Procent = 50; AddEvent("Удаление таблиц"); db.Database.TableDefs.Delete("Signals"); db.Database.TableDefs.Delete("Objects"); db.Database.TableDefs.Delete("TracesTemplates"); } Procent = 60; AddEvent("Сжатие базы", _workFile); DaoDb.Compress(_workFile, 20000000, _tmpDir, 2000); } catch (Exception ex) { AddError("Ошибка при сжатии скомпилированного проекта", ex); } } return(FinishAtom(State.Compiled, State.Signals, "Проект: " + _code + "; Ошибок: " + ErrorsCount + ";" + Different.NewLine + "Параметров: " + CalcParamsId.Count + "; Архивных параметров:" + ArchiveParams.Count + "; Сигналов: " + SignalsInUseCount)); }
//Запись списка колонок и формирование колонок таблиц Params и VedLin private void MakeColumnsAndFilters() { AddEvent("Формирование колонок ведомости"); using (var rec = new RecDao(_vedDb, "VedColumns")) foreach (var column in _columns) { column.ToRecordset(rec); } _vedDb.Execute("INSERT INTO VedColumnsFormatConditions SELECT VedColumnsFormatConditions.* FROM [" + _project.File + "].VedColumnsFormatConditions " + "INNER JOIN [" + _project.File + "].VedColumns ON VedColumnsFormatConditions.ParentId = VedColumns.ColumnId " + "WHERE VedColumns.Task='" + _task + "' ORDER BY ColumnNum"); _vedDb.Execute("INSERT INTO VedFilters ( Otm, FilterId, FilterNum, FilterType, FilterName, FilterValue, FilterDescription, FilterDefault ) " + "SELECT VedFilters.Otm, VedFilters.FilterId, VedFilters.FilterNum, VedFilters.FilterType, VedFilters.FilterName, VedFilters.FilterValue, VedFilters.FilterDescription, VedFilters.FilterDefault " + "FROM [" + _project.File + "].VedFilters" + (_allTasks ? "" : " WHERE VedFilters.Task='" + _task + "';")); _vedDb.Execute("INSERT INTO VedFiltersObjects SELECT VedFiltersObjects.* " + "FROM [" + _project.File + "].VedFilters INNER JOIN [" + _project.File + "].VedFiltersObjects ON VedFilters.FilterId = VedFiltersObjects.ParentId" + (_allTasks ? "" : " WHERE VedFilters.Task='" + _task + "';")); foreach (var col in _columnsVed.Values) { _vedDb.SetColumn("VedLin", col.Code, col.DataType); } foreach (var col in _columnsParams.Values) { _vedDb.SetColumn("Params", col.Code, col.DataType); //if (col.LinVedView != VedView.None) // _vedDb.SetColumn("VedLin", col.Code, col.DataType); } }
//Очистка таблиц CalcParams и т.д. private void ClearProject() { AddEvent("Очистка таблиц параметров проекта"); using (var pdb = new DaoDb(_projectFile)) { pdb.Execute("DELETE * FROM CalcSubParams"); pdb.Execute("DELETE * FROM CalcParams"); } DaoDb.Compress(_templateFile, 300000000, _infoTaskDir + @"Tmp\"); }
private void butOK_Click(object sender, EventArgs e) { if (GroupCode.Text.IsEmpty()) { Different.MessageError("Не заполнено имя группы"); return; } ChangeReportsRow(); using (var db = new DaoDb(General.ReporterFile)) { //Сохранение в ReporterData using (var rec = new RecDao(db, "SELECT * FROM GroupReports WHERE GroupId=" + _groupId)) { rec.Put("GroupCode", GroupCode.Text); rec.Put("GroupName", GroupName.Text); ((FormGroupReports)GeneralRep.CommonBook.Forms[ReporterCommand.GroupReports]).EditItem(rec, _groupId); } db.Execute("DELETE * FROM ReportsForGroup WHERE GroupId=" + _groupId); using (var rec = new RecDao(db, "ReportsForGroup")) foreach (DataGridViewRow row in Reports.Rows) { if (!row.IsNewRow) { rec.AddNew(); rec.Put("GroupId", _groupId); rec.PutFromDataGrid("Report", row); rec.PutFromDataGrid("ReportName", row); rec.PutFromDataGrid("ReportFile", row); rec.PutFromDataGrid("ReportTag", row); } } } Close(); }
private void ButDelete_Click(object sender, EventArgs e) { if (GroupReports.SelectedItems.Count > 0) { var item = GroupReports.SelectedItems[0]; if (Different.MessageQuestion("Удалить группу отчетов " + item.SubItems[0].Text + "?", "Удаление")) { GroupReports.Items.Remove(item); var id = (int)item.Tag; using (var db = new DaoDb(General.ReporterFile)) { db.Execute("DELETE * FROM ReportsForGroup WHERE GroupId=" + id); db.Execute("DELETE * FROM GroupReports WHERE GroupId=" + id); } } } }
//Сохранение данных после настройки public void SaveSetup() { try { AddEvent("Сохранение настроек"); using (var db = new DaoDb(General.ControllerFile)) { using (var rec = new RecDao(db, "SELECT * FROM Threads WHERE ThreadId=" + Id)) { rec.Put("Comment", Comment); rec.Put("IsPeriodic", IsPeriodic); rec.Put("PeriodLength", PeriodLength); rec.Put("SourcesLate", SourcesLate); rec.Put("RushWaitingTime", RushWaitingTime); rec.Put("TimeAfterError", TimeAfterError); rec.Put("TimeChange", DateTime.Now.ToString()); rec.Put("IsImit", IsImit); rec.Put("ImitMode", ImitModeStr); } db.Execute("DELETE * FROM Projects WHERE ThreadId=" + Id); using (var rec = new RecDao(db, "Projects")) foreach (var pr in Projects.Values) { pr.ToRecordset(rec, true); } db.Execute("DELETE * FROM Providers WHERE ThreadId=" + Id); using (var rec = new RecDao(db, "Providers")) foreach (var p in ProvidersDic.Values) { p.ToRecordset(rec, true); } } } catch (Exception ex) { AddError("Ошибка при сохранении настроек", ex); Different.MessageError("Ошибка при сохранении настроек"); } Finish();//Setup StartAtom(Atom.ReadSetup, ReadSetup); State = State.Stopped; }
//Формирование списка параметров для записи в архив и запись их в CalcParamsArchive private void SaveArchive() { try { using (var db = new DaoDb(_projectFile)) { foreach (var cp in CalcParamsId.Values) { if (cp.Inputs.Count == 0 && cp.CalcOn && cp.ErrMess == "") { new ParamArchive(cp); } } var old = new SetS(); var add = new SetS(); using (var rec = new RecDao(db, "CalcParamsArchive", RecordsetTypeEnum.dbOpenTable)) while (rec.Read()) { var code = rec.GetString("FullCode"); if (ArchiveParams.ContainsKey(code)) { old.Add(code); } else { rec.Put("Del", true); } } db.Execute("DELETE * FROM CalcParamsArchive WHERE Del=True"); foreach (var ap in ArchiveParams.Keys) { if (!old.Contains(ap)) { add.Add(ap); } } using (var rec = new RecDao(db, "CalcParamsArchive", RecordsetTypeEnum.dbOpenTable)) { while (rec.Read()) { ArchiveParams[rec.GetString("FullCode")].ToRecordset(rec, false); } foreach (var p in add.Keys) { ArchiveParams[p].ToRecordset(rec, true); } } } } catch (Exception ex) { AddError("Ошибка сохранения архивных параметров", ex); } }
//Открывает рекордсет Projects, удаляет оттуда проект и закрывает public void DeleteFromDb() { try { DaoDb.Execute(General.ControllerFile, "DELETE * FROM Projects WHERE (ThreadId=" + Id + ") And (Project='" + Code + "')"); } catch (Exception ex) { ThreadCalc.AddError("Ошибка при удалении проекта из ControllerData", ex, Code); } }
//Удаление потока public void DeleteThread() { using (StartAtom(Atom.DeleteThread)) { try { DaoDb.Execute(General.ControllerFile, "DELETE * FROM Threads WHERE ThreadId=" + Id); } catch (Exception ex) { AddError("Ошибка при удалении потока", ex); } } CloseThread(); }
public void DaoDbStatic() { var db = CopyDb("Static"); string file = File("Static"); string fileWrong = File("Static2"); string fileCopy = File("Copy"); string fileTmp = TestLib.TestRunDir + @"Libraries\TmpDaoStatic.accdb"; db.Dispose(); Assert.IsNull(db.Database); Assert.IsNull(db.Connection); Assert.IsTrue(DaoDb.Check(file, "DaoTest")); Assert.IsTrue(DaoDb.Check(file, "DaoTest", new[] { "Tabl", "SubTabl", "EmptyTabl", "SysTabl", "SysSubTabl" })); Assert.IsTrue(DaoDb.Check(file, new[] { "Tabl", "SubTabl", "EmptyTabl" })); Assert.IsFalse(DaoDb.Check(fileWrong, "Fignia")); Assert.IsFalse(DaoDb.Check(null, "Fignia")); Assert.IsFalse(DaoDb.Check(fileWrong, "Fignia")); Assert.IsFalse(DaoDb.Check(fileWrong, new[] { "Tabl" })); Assert.IsFalse(DaoDb.Check(file, new[] { "Tabl", "SubTabl", "EmptyTabl1" })); DaoDb.Compress(file, 10000000); DaoDb.Compress(file, 10000); Assert.IsTrue(new FileInfo(fileTmp).Exists); Assert.IsTrue(DaoDb.FromTemplate(file, fileCopy, ReplaceByTemplate.Always)); Assert.IsFalse(DaoDb.FromTemplate(file, fileCopy, ReplaceByTemplate.IfNotExists)); Assert.IsFalse(DaoDb.FromTemplate(file, fileCopy, ReplaceByTemplate.IfNewVersion)); new FileInfo(fileCopy).Delete(); Assert.IsTrue(DaoDb.FromTemplate(file, fileCopy, ReplaceByTemplate.IfNotExists)); new FileInfo(fileCopy).Delete(); Assert.IsTrue(DaoDb.FromTemplate(file, fileCopy, ReplaceByTemplate.IfNewVersion)); Assert.IsTrue(new FileInfo(fileCopy).Exists); DaoDb.Execute(file, "DELETE * FROM Tabl"); DaoDb.ExecuteAdo(file, "DELETE * FROM SysTabl"); using (var rec = new AdoReader(file, "SELECT * FROM Tabl")) Assert.IsFalse(rec.HasRows); using (var rec = new AdoReader(file, "SELECT * FROM SubTabl")) Assert.IsFalse(rec.HasRows); using (var rec = new DaoRec(file, "SysTabl")) Assert.IsFalse(rec.HasRows); using (var rec = new DaoRec(file, "SysSubTabl")) Assert.IsFalse(rec.HasRows); }
public static ActionResult ConfigFillProjectManagerU(Session session) { session.Log("Begin ConfigFillProjectManagerU"); try { var instlocPath = new FileInfo(session.GetTargetPath("INSTALLLOCATION") + "General\\Config.accdb"); if (instlocPath.Exists) { DaoDb.Execute(session.GetTargetPath("INSTALLLOCATION") + "General\\Config.accdb", "DELETE * FROM SysTabl WHERE ParamName='ProjectManager'"); } } catch (Exception exception) { exception.MessageError(); } session.Log("End ConfigFillProjectManagerU"); return(ActionResult.Success); }
private static void CopySubProp(int tid, DaoDb tdb, int id, DaoDb db) { using (var rec = new RecDao(tdb, "SELECT * FROM SysSubTabl WHERE ParamId=" + tid)) { db.Execute("DELETE * FROM SysSubTabl WHERE ParamId=" + id); using (var res = new RecDao(db, "SELECT * FROM SysSubTabl WHERE ParamId=" + id)) while (rec.Read()) { res.AddNew(); res.Put("ParamId", id); res.Put("SubParamNum", rec.GetInt("SubParamNum")); res.Put("SubParamType", rec.GetString("SubParamType")); res.Put("SubParamName", rec.GetString("SubParamName")); res.Put("SubParamValue", rec.GetString("SubParamValue")); res.Put("SubParamDescription", rec.GetString("SubParamDescription")); res.Put("SubParamTag", rec.GetString("SubParamTag")); res.Put("SubParamRowSource", rec.GetString("SubParamRowSource")); } } }
public static ActionResult ConfigFillWU(Session session) { session.Log("Begin ConfigFillWonderwareU"); try { var instlocPath = new FileInfo(session.GetTargetPath("INSTALLLOCATION") + "General\\Config.accdb"); if (instlocPath.Exists) { DaoDb.Execute(session.GetTargetPath("INSTALLLOCATION") + "General\\Config.accdb", "DELETE * FROM SysTabl WHERE ParamName='WonderwareHistorianComm' OR ParamName='WonderwareHistorianSource' OR ParamName='WonderwareOPCReceiver'"); } } catch (Exception exception) { exception.MessageError(); } session.Log("End ConfigFillWonderwareU"); return(ActionResult.Success); }
//Чтение данных из клона private void GetCloneValues() { if (!IsConnected && !Connect()) { return; } try { using (var db = new DaoDb(DatabaseFile)) { db.Execute("DELETE * FROM SignalsForRead"); Logger.Procent = 10; using (var rs = new RecDao(db, "SignalsForRead")) foreach (int id in _objectsId.Keys) { rs.AddNew(); rs.Put("Id", id); } } Logger.Procent = 20; int n = ParamsWithCut(); DateTime beg = n == 0 ? _begin : _begin.AddHours(-1); Logger.AddEvent("Получение значений", _objectsId.Count + " сигналов, " + n + " без среза, время: " + beg + " - " + _end); var stSql = "SELECT SignalsForRead.Id AS ID, TIMESTAMP, TIME_NSEC, F_VALUE, RAW_VALUE, STS " + "FROM PT_HF_HIST INNER JOIN SignalsForRead ON PT_HF_HIST.ID = SignalsForRead.Id " + "WHERE (TIMESTAMP >= " + beg.ToAccessString() + ") AND (TIMESTAMP < " + _end.ToAccessString() + ") " + "ORDER BY TIMESTAMP, TIME_NSEC"; using (var rec = new ReaderAdo(DatabaseFile, stSql)) { Logger.Procent = 40; Logger.AddEvent("Распределение значений по сигналам"); var m = ReadValuesList(rec, _objectsId.Values); Logger.AddEvent("Значения прочитаны", m + " значений, " + _objectsId.Count + " сигналов"); } } catch (Exception ex) { AddError("Ошибка при чтении клона архива", ex); IsConnected = false; } }
//Обновление списка параметров в файле данных отчета из архивов и проектов private bool ParamsProjectsToFile() { try { bool b = false; var list = MakeProjectsList(); foreach (var p in list) { b |= p.UpdateParams(); } if (b) { DaoDb.Execute(DataFile, "DELETE Cells.* FROM CalcParams INNER JOIN Cells ON CalcParams.ParamId = Cells.ParamId WHERE CalcParams.SysField='Del';"); DaoDb.Execute(DataFile, "DELETE * FROM CalcParams WHERE SysField='Del'"); } return(b); } catch (Exception ex) { AddError("Ошибка при обновлении списка параметров", ex); } return(false); }
//Запись используемых сигналов в SignalsInUse private void SaveInUse() { try { using (var db = new DaoDb(_projectFile)) { var old = new SetS(); using (var rec = new RecDao(db, "SignalsInUse")) { while (rec.Read()) { var code = rec.GetString("FullCode"); if ((Signals.ContainsKey(code) && Signals[code].InUse) || HandSignals.ContainsKey(code)) { old.Add(code); rec.Put("Del", false); } else { rec.Put("Del", true); } } } db.Execute("DELETE * FROM SignalsInUse WHERE Del=True"); var add = new SetS(); var use = from s in SignalsList where s.InUse select s; SignalsInUseCount = use.Count(); foreach (var s in use) { if (!old.Contains(s.FullCode)) { add.Add(s.FullCode); } if (s.InUseSource) { UsedProviders.Add(s.SourceName); } if (s.InUseReceiver) { UsedProviders.Add(s.ReceiverName); } } if (HandSignals.Count > 0 && HandInputSource != null) { UsedProviders.Add(HandInputSource); } foreach (var hand in HandSignals.Values) { if (!old.Contains(hand.FullCode)) { add.Add(hand.FullCode); } } using (var rec = new RecDao(db, "SignalsInUse")) { while (rec.Read()) { var s = rec.GetString("FullCode"); Signal sig = Signals.ContainsKey(s) ? Signals[s] : HandSignals[s]; sig.ToRecordset(rec, false); } foreach (var s in add.Keys) { Signal sig = Signals.ContainsKey(s) ? Signals[s] : HandSignals[s]; sig.ToRecordset(rec, true); } } using (var rec = new RecDao(db, "GraficsList")) while (rec.Read()) { rec.Put("UsedUnits", UsingParamsString(Grafics[rec.GetString("Code")].UsingParams)); } } } catch (Exception ex) { AddError("Ошибка сохранения сигналов или графиков", ex); } }
//Запись в таблицу PrevParams private void SavePrevs() { try { using (var db = new DaoDb(_projectFile)) { var old = new SetS(); var add = new SetS(); using (var rec = new RecDao(db, "PrevParams")) while (rec.Read()) { var code = rec.GetString("FullCode"); if (Prevs.ContainsKey(code) && Prevs[code].Id != 0) { old.Add(code); rec.Put("Del", false); } else { rec.Put("Del", true); } } db.Execute("DELETE * FROM PrevParams WHERE Del=True"); foreach (var prev in Prevs.Keys) { if (!old.Contains(prev)) { add.Add(prev); } } if (Prevs.Count > 0) { using (var rec = new RecDao(db, "PrevParams")) { while (rec.Read()) { Prevs[rec.GetString("FullCode")].ToRecordset(rec, false); } foreach (var p in add.Keys) { Prevs[p].ToRecordset(rec, true); } } } foreach (var p in Prevs.Values) { IsPrevAbs |= p.PrevAbs; IsLastBase |= p.LastBase; IsLastHour |= p.LastHour; IsLastDay |= p.LastDay; IsManyBase |= p.ManyBase; IsManyHour |= p.ManyHour; IsManyDay |= p.ManyDay; IsManyMoments |= p.ManyMoments; } } } catch (Exception ex) { AddError("Ошибка сохранения параметров фунций Пред", ex); } }
public static ActionResult ConfigFillITU(Session session) { session.Log("Begin ConfigFillITU"); try { using (var db = new DaoDb(session.GetTargetPath("General") + "Config.accdb")) { bool cFlag = false; string warnM = "Обнаружены установленные компоненты InfoTask:"; using (var cfg = new RecDao(db, "SELECT * FROM SysTabl")) { //Проверка, есть ли установленные иные компоненты ИТ cfg.FindFirst("ParamName='Analyzer'"); if (!cfg.NoMatch()) { cFlag = true; warnM += "\n - Analyzer"; } cfg.FindFirst("ParamName='AnalyzerInfoTask'"); if (!cfg.NoMatch()) { cFlag = true; warnM += "\n - AnalyzerInfoTask"; } cfg.FindFirst("ParamName='Constructor'"); if (!cfg.NoMatch()) { cFlag = true; warnM += "\n - Constructor"; } cfg.FindFirst("ParamName='Reporter'"); if (!cfg.NoMatch()) { cFlag = true; warnM += "\n - Reporter"; } cfg.FindFirst("ParamName='KosmotronikaRetroSource'"); if (!cfg.NoMatch()) { cFlag = true; warnM += "\n - KosmotronikaProviders"; } cfg.FindFirst("ParamName='OvationSource'"); if (!cfg.NoMatch()) { cFlag = true; warnM += "\n - OvationProviders"; } cfg.FindFirst("ParamName='WonderwareHistorianSource'"); if (!cfg.NoMatch()) { cFlag = true; warnM += "\n - WonderwareProviders"; } cfg.FindFirst("ParamName='SimaticSource'"); if (!cfg.NoMatch()) { cFlag = true; warnM += "\n - SiemensProviders"; } cfg.FindFirst("ParamName='MirSource'"); if (!cfg.NoMatch()) { cFlag = true; warnM += "\n - MirProviders"; } cfg.FindFirst("ParamName='PrologSource'"); if (!cfg.NoMatch()) { cFlag = true; warnM += "\n - LogikaProviders"; } cfg.FindFirst("ParamName='RasOvation'"); if (!cfg.NoMatch()) { cFlag = true; warnM += "\n - RAS"; } cfg.FindFirst("ParamName='RasKosmotronika'"); if (!cfg.NoMatch()) { cFlag = true; warnM += "\n - RasKosmotronika"; } cfg.FindFirst("ParamName='RasInfoTask'"); if (!cfg.NoMatch()) { cFlag = true; warnM += "\n - RasInfoTask"; } } if (cFlag) { warnM += "\n Необходимо удалить/переустановить и их"; MessageBox.Show(warnM); //return ActionResult.UserExit; } if (session.Features["KernelMainFeature"].RequestState == InstallState.Absent) { db.Execute("DELETE * FROM SysTabl WHERE ParamName='InfoTask' OR ParamName='AccessArchive' OR ParamName='SQLServerArchive' " + "OR ParamName='ArchiveProjectComm' OR ParamName='ArchiveAccessComm' OR ParamName='ArchiveSQLServerComm' OR ParamName='ArchiveAccessSource' " + "OR ParamName='ArchiveSQLServerSource' OR ParamName='Imitator' OR ParamName='CloneComm' OR ParamName='CloneSource' " + "OR ParamName='HandInputSource' OR ParamName='HandInputSqlSource' OR ParamName='MonitorHistory'"); } if (session.Features["ControllerMonitorFeature"].RequestState == InstallState.Absent) { db.Execute("DELETE * FROM SysTabl WHERE ParamName='Controller'"); } if (session.Features["CalcArchiveViewerFeature"].RequestState == InstallState.Absent) { db.Execute("DELETE * FROM SysTabl WHERE ParamName='CalcArchiveViewer'"); } } } catch (Exception exception) { //return ActionResult.UserExit; exception.MessageError(); } session.Log("End ConfigFillITU"); return(ActionResult.Success); }
private void Update_1_0_4() { //ObjectReceivers Удалена _db.Execute("DROP TABLE ObjectReceivers"); }
//Сохранение в файл клона public void ValuesToClone() { using (var db = new DaoDb(_cloneFile)) { int id; using (var rec = new RecDao(db, "SELECT * FROM Objects WHERE CodeObject='" + Code + "'")) { if (!rec.HasRows()) { rec.AddNew(); } rec.Put("CodeObject", Code); rec.Put("NameObject", Name); rec.Put("Comment", Comment); id = rec.GetInt("ObjectId"); } using (var rec = new RecDao(db, "SELECT * FROM Signals WHERE ObjectId=" + id)) { if (!rec.HasRows()) { rec.AddNew(); } rec.Put("ObjectId", id); rec.Put("CodeSignal", "Руч"); rec.Put("NameSignal", "Ручной ввод"); rec.Put("FullCode", Code + ".Руч"); rec.Put("Default", true); rec.Put("DataType", DataType); rec.Put("Units", Units); rec.Put("Active", true); id = rec.GetInt("SignalId"); rec.Update(); } var dt = DataType.ToDataType(); DateTime mind = Different.MaxDate, maxd = Different.MinDate; RecDao recv; if (dt.LessOrEquals(BaseLibrary.DataType.Real)) { db.Execute("DELETE * FROM MomentsValues WHERE SignalId=" + id); recv = new RecDao(db, "SELECT * FROM MomentsValues WHERE SignalId=" + id); } else { db.Execute("DELETE * FROM MomentsStrValues WHERE SignalId=" + id); recv = new RecDao(db, "SELECT * FROM MomentsStrValues WHERE SignalId=" + id); } using (recv) foreach (var v in HandInputValues) { v.ToRecordset(recv, id, dt); if (v.TimeCorrect && v.Time.ToDateTime() < mind) { mind = v.Time.ToDateTime(); } if (v.TimeCorrect && v.Time.ToDateTime() > maxd) { maxd = v.Time.ToDateTime(); } } if (mind != Different.MaxDate) { using (var sys = new SysTabl(db, false)) { var d = sys.Value("BeginInterval").ToDateTime(); if (d == Different.MinDate || d > mind) { sys.PutValue("BeginInterval", mind.ToString()); } d = sys.Value("EndInterval").ToDateTime(); if (d < maxd) { sys.PutValue("EndInterval", maxd.ToString()); } } } } }
private void butOK_Click(object sender, EventArgs e) { using (_book.StartAtom("Сохранение настроек")) { _book.AddEvent("Сохранение настроек отчета"); if (CodeReport.Text.IsEmpty()) { Different.MessageError("Код отчета должен быть заполнен"); return; } int res; bool er = (!MonthLength.Text.IsEmpty() && (!int.TryParse(MonthLength.Text, out res) || res < 0)); er |= (!DayLength.Text.IsEmpty() && (!int.TryParse(DayLength.Text, out res) || res < 0)); er |= (!HourLength.Text.IsEmpty() && (!int.TryParse(HourLength.Text, out res) || res < 0)); er |= (!MinuteLength.Text.IsEmpty() && (!int.TryParse(MinuteLength.Text, out res) || res < 0)); er |= (!DayStart.Text.IsEmpty() && (!int.TryParse(DayStart.Text, out res) || res < 0)); er |= (!HourStart.Text.IsEmpty() && (!int.TryParse(HourStart.Text, out res) || res < 0)); er |= (!MinuteLength.Text.IsEmpty() && (!int.TryParse(MinuteLength.Text, out res) || res < 0)); if (er) { Different.MessageError("Указана недопустимая длительность или начало интеравала"); return; } var sys = _book.SysPage; bool isInternal = false; try { sys.PutValue("Report", CodeReport.Text); sys.PutValue("ReportName", NameReport.Text); sys.PutValue("ReportDescription", DescriptionReport.Text); sys.PutControl(MonthLength); sys.PutControl(DayLength); sys.PutControl(HourLength); sys.PutControl(MinuteLength); sys.PutControl(DayStart); sys.PutControl(HourStart); sys.PutControl(MinuteStart); sys.PutValue("DifferentLength", radioDifferent.Checked ? "True" : (radioLess.Checked ? "Less" : "Equals")); if (radioNow.Checked) { sys.PutValue("DefaultPeriod", "Now"); } if (radioPrevious.Checked) { sys.PutValue("DefaultPeriod", "Previous"); } sys.PutValue("DifferentBegin", DifferentBegin.Checked); sys.PutValue("DefaultCalcName", CalcName.Text); sys.PutValue("AllowProjectsRepetitions", AllowProjectsRepetitions.Checked); var list = new List <ReportProjectSetup>(); foreach (DataGridViewRow r in Projects.Rows) { if (!r.IsNewRow) { try { var cmode = r.Get("ProjectCalcMode").ToCalcModeType(); isInternal |= cmode == CalcModeType.Internal; list.Add(new ReportProjectSetup(r.Get("Project"), AllowProjectsRepetitions.Checked ? r.Get("ProjectCode2") : null, cmode)); } catch { } } } sys.PutProjects(list); } catch (Exception ex) { GeneralRep.ShowError("Текущий файл не является файлом отчета InfoTask или был поврежден", ex); } try { tabMain.Select(); } catch {} _codes.Clear(); _infs.Clear(); foreach (DataGridViewRow row in Providers.Rows) { string name = row.Get("ProviderName"); _codes.Add(name, row.Get("ProviderCode")); _infs.Add(name, row.Get("ProviderInf")); } int tid; if (!int.TryParse(ThreadId.Text, out tid)) { tid = 0; } if (isInternal) { try { _book.AddEvent("Сохранение настроек в ControllerData"); using (var db = new DaoDb(General.ControllerFile)) { using (var rec = new RecDao(db, "SELECT * FROM Threads WHERE ThreadId=" + tid)) { if (!rec.HasRows()) { rec.AddNew(); } rec.Put("ApplicationType", "Excel"); rec.Put("IsImit", IsImit.Checked); rec.Put("ImitMode", ImitMode.Text); tid = rec.GetInt("ThreadId"); } db.Execute("DELETE * FROM Providers WHERE ThreadId=" + tid); db.Execute("DELETE * FROM Projects WHERE ThreadId=" + tid); using (var rec = new RecDao(db, "Projects")) using (var recc = new RecDao(db, "Providers")) { foreach (DataGridViewRow row in Projects.Rows) { if (!row.IsNewRow && row.Get("ProjectCalcMode").ToCalcModeType() == CalcModeType.Internal) { rec.AddNew(); rec.Put("ThreadId", tid); rec.PutFromDataGrid("Project", row); rec.PutFromDataGrid("ProjectFile", row); } } foreach (DataGridViewRow row in Providers.Rows) { if (row.Get("TypeProvider") != "Архив" || row.Get("ProviderName") == "CalcArchive" || (row.Get("ProviderName") == "Report_Archive" && UseOneArchive.Checked)) { recc.AddNew(); recc.Put("ThreadId", tid); recc.PutFromDataGrid("ProviderType", row, "TypeProvider"); recc.PutFromDataGrid("ProviderCode", row); if (row.Get("ProviderName") != "Report_Archive") { recc.PutFromDataGrid("ProviderName", row); } else { recc.Put("ProviderName", "CalcArchive"); } recc.PutFromDataGrid("ProviderInf", row); recc.Update(); } } } } } catch (Exception ex) { GeneralRep.ShowError("Неправильный файл ControllerData.accdb", ex); return; } } _book.AddEvent("Сохранение настроек в ReporterData"); try //Настройки отчета в ReporterData { using (var db = new DaoDb(General.ReporterFile)) { using (var rec = new RecDao(db, "SELECT * FROM Reports WHERE Report = '" + CodeReport.Text + "'")) { if (!rec.HasRows()) { rec.AddNew(); } rec.Put("Report", CodeReport.Text); rec.Put("ReportName", NameReport.Text); rec.Put("ReportDescription", DescriptionReport.Text); rec.Put("ReportFile", GeneralRep.Application.ActiveWorkbook.FullName); rec.Put("ThreadId", isInternal ? tid : 0); rec.Put("UseOneArchive", UseOneArchive.Checked); rec.Put("CodeArchive", _codes["Report_Archive"]); rec.Put("InfArchive", _infs["Report_Archive"]); string s = "FormTo=" + (FormToTemplate.Checked ? "Template" : (FormToDir.Checked ? "Dir" : "File")) + ";"; s += "ResultDir=" + ResultDir.Text + ";"; s += "ResultFileName=" + ResultFileName.Text + ";"; s += "ResultFile=" + ResultFile.Text + ";"; s += "AddDateToName=" + (AddDateToName.Checked ? "True" : "False") + ";"; var df = DateNameFormat.Text; if (AddDateToName.Checked && (df.Contains(":") || df.Contains(@"\") || df.Contains(@"/") || df.Contains("[") || df.Contains("]") || df.Contains("*"))) { Different.MessageError(@"Указан недопустимый формат даты для имени файла или листа. Имя не должно содержать символов / \ : * [ ]"); return; } s += "DateNameFormat=" + df + ";"; s += "AddBeginToName=" + (AddBeginToName.Checked ? "True" : "False") + ";"; df = BeginNameFormat.Text; if (AddBeginToName.Checked && (df.Contains(":") || df.Contains(@"\") || df.Contains(@"/") || df.Contains("[") || df.Contains("]") || df.Contains("*"))) { Different.MessageError(@"Указан недопустимый формат даты для имени файла или листа. Имя не должно содержать символов / \ : * [ ]"); return; } s += "BeginNameFormat=" + df + ";"; s += "AddEndToName=" + (AddEndToName.Checked ? "True" : "False") + ";"; df = EndNameFormat.Text; if (AddEndToName.Checked && (df.Contains(":") || df.Contains(@"\") || df.Contains(@"/") || df.Contains("[") || df.Contains("]") || df.Contains("*"))) { Different.MessageError(@"Указан недопустимый формат даты для имени файла или листа. Имя не должно содержать символов / \ : * [ ]"); return; } s += "EndNameFormat=" + df + ";"; s += "AddCalcNameToName=" + (AddCalcNameToName.Checked ? "True" : "False") + ";"; s += "AddSheetToName=" + (AddSheetToName.Checked ? "True" : "False") + ";"; s += "SetFocusToFormed=" + (SetFocusToFormed.Checked ? "True" : "False") + ";"; rec.Put("FormInf", s); rec.Put("ServerReport", ServerReport.Text); if (!ServerReport.Text.IsEmpty()) { var file = new FileInfo(ServerReport.Text); if (!file.Exists || file.Extension != ".xlsx") { Different.MessageError("Указанный файл контрольного экземпляра не существует или не является файлом Excel, " + ServerReport.Text); } else if (ServerReport.Text == _book.Workbook.FullName) { Different.MessageError("Файл контрольного бланка расчета не должен совпадать с файлом бланка отчета, " + ServerReport.Text); } } int rid = rec.GetInt("ReportId"); rec.Update(); db.Execute("DELETE * FROM Projects WHERE ReportId=" + rid); using (var recp = new RecDao(db, "Projects")) foreach (DataGridViewRow r in Projects.Rows) { if (!r.IsNewRow) { recp.AddNew(); recp.Put("ReportId", rid); recp.PutFromDataGrid("Project", r); if (AllowProjectsRepetitions.Checked) { recp.PutFromDataGrid("ProjectCode2", r); } recp.PutFromDataGrid("ProjectName", r); recp.PutFromDataGrid("ProjectFile", r); if (UseOneArchive.Checked) { recp.Put("CodeArchive", _codes["Report_Archive"]); recp.Put("InfArchive", _infs["Report_Archive"]); } else if (r.Get("ProjectCalcMode").ToCalcModeType() == CalcModeType.Internal) { recp.Put("CodeArchive", _codes["CalcArchive"]); recp.Put("InfArchive", _infs["CalcArchive"]); } else { var proj = r.Get("Project"); if (AllowProjectsRepetitions.Checked && !r.Get("ProjectCode2").IsEmpty()) { proj = r.Get("ProjectCode2"); } proj += "_Archive"; recp.Put("CodeArchive", _codes[proj]); recp.Put("InfArchive", _infs[proj]); } } } } } } catch (Exception ex) { GeneralRep.ShowError("Неправильный файл ReporterData.accdb", ex); } _book.ClearReportDataFromMemory(); CheckProviders(); Close(); } }
//Перенос ссылок из отчета в файл данных private void LinksReportToFile() { try { AddEvent("Обновление таблицы Cells"); ClearReportDataFromMemory(); bool onlyAbsolute = true; using (var db = new DaoDb(DataFile)) { db.Execute("DELETE * FROM Cells"); db.Execute("DELETE * FROM Shapes"); db.Execute("DELETE * FROM CalcParams WHERE Project='Сохранение'"); Projects["Сохранение"].Params.Clear(); using (var rp = new RecDao(db, "CalcParams")) using (var rc = new RecDao(db, "Cells")) using (var rs = new RecDao(db, "Shapes")) { foreach (var sheet in GeneralRep.Application.ActiveWorkbook.GetSheets()) { foreach (Comment c in sheet.Comments) { onlyAbsolute &= CheckAbsolute(c.Text()); SaveLink(c, null, rp, rc, rs, sheet); } foreach (Shape sh in sheet.Shapes) { if (sh.Type == MsoShapeType.msoTextBox || sh.Type == MsoShapeType.msoGroup) { onlyAbsolute &= CheckAbsolute(sh.Title); SaveLink(null, sh, rp, rc, rs, sheet); if (sh.Type == MsoShapeType.msoGroup) { foreach (Shape gsh in sh.GroupItems) { if (gsh.Type == MsoShapeType.msoTextBox) { onlyAbsolute &= CheckAbsolute(gsh.Title); SaveLink(null, gsh, rp, rc, rs, sheet); } } } } } } } UpdateParams(db); using (var sys = new SysTabl(db)) { sys.PutValue("LastChangeLinks", LastChangeLinks.ToString()); sys.PutValue("OnlyAbsolute", onlyAbsolute ? "True" : "False"); } } //Сжатие базы try { DaoDb.Compress(DataFile, 30000000, General.TmpDir, 2000); } catch { } } catch (Exception ex) { AddError("Ошибка при загрузке отчета в файл данных", ex); } }
//Запись значений ручного ввода, beg - начало периода расчета public void WriteHandInput(DateTime beg, DateTime en) { if (IsHandInput) { try { Book.AddEvent("Сохрание значений ручного ввода из ячеек", CodeFinal); var pars = new DicS <ReportHandParam>(); foreach (var param in Params.Values) { if (param.HandInputCell != null) { pars.Add(param.FullCode, new ReportHandParam(param, GeneralRep.ActiveBook.ValueFromCell(param.HandInputCell))); } } using (var db = new DaoDb(_handInputFile)) { using ( var rec = new RecDao(db, "SELECT Objects.CodeObject, MomentsValues.Time FROM (Objects INNER JOIN Signals ON Objects.ObjectId = Signals.ObjectId) INNER JOIN MomentsValues ON Signals.SignalId = MomentsValues.SignalId " + "WHERE (Time >= " + beg.ToAccessString() + ") AND (Time < " + en.ToAccessString() + ")")) while (rec.Read()) { if (pars.ContainsKey(rec.GetString("CodeObject"))) { rec.Put("Time", Different.MaxDate); } } using ( var rec = new RecDao(db, "SELECT Objects.CodeObject, MomentsStrValues.Time FROM (Objects INNER JOIN Signals ON Objects.ObjectId = Signals.ObjectId) INNER JOIN MomentsStrValues ON Signals.SignalId = MomentsStrValues.SignalId " + "WHERE (Time >= " + beg.ToAccessString() + ") AND (Time < " + en.ToAccessString() + ")")) while (rec.Read()) { if (pars.ContainsKey(rec.GetString("CodeObject"))) { rec.Put("Time", Different.MaxDate); } } db.Execute("DELETE * FROM MomentsValues WHERE Time=" + Different.MaxDate.ToAccessString()); db.Execute("DELETE * FROM MomentsStrValues WHERE Time=" + Different.MaxDate.ToAccessString()); using ( var rec = new RecDao(db, "SELECT Objects.CodeObject, Objects.ObjectId, Signals.CodeSignal, Signals.SignalId FROM Objects INNER JOIN Signals ON Objects.ObjectId = Signals.SignalId") ) while (rec.Read()) { var code = rec.GetString("CodeObject"); if (pars.ContainsKey(code)) { pars[code].ObjectId = rec.GetInt("ObjectId"); pars[code].SignalId = rec.GetInt("SignalId"); } } using (var reco = new RecDao(db, "Objects")) using (var recs = new RecDao(db, "Signals")) foreach (var param in pars.Values) { if (param.ObjectId == 0) { var ap = param.ReportParam.ArchiveParam; var par = ap.FirstParam; reco.AddNew(); reco.Put("CodeObject", par.Code); reco.Put("NameObject", par.Name); param.ObjectId = reco.GetInt("ObjectId"); reco.Update(); recs.AddNew(); recs.Put("ObjectId", param.ObjectId); recs.Put("CodeSignal", "Руч"); recs.Put("NameSignal", "Ручной ввод"); recs.Put("FullCode", par.Code + ".Руч"); recs.Put("Default", true); recs.Put("DataType", ap.DataType.ToRussian()); recs.Put("Units", ap.Units); recs.Put("Min", ap.Min); recs.Put("Max", ap.Max); recs.Put("Active", true); param.SignalId = recs.GetInt("SignalId"); recs.Update(); } } using (var rec = new RecDao(db, "MomentsValues")) using (var recs = new RecDao(db, "MomentsStrValues")) foreach (var param in pars.Values) { if (!param.StringValue.IsEmpty()) { var dt = param.ReportParam.ArchiveParam.DataType; var r = dt.LessOrEquals(DataType.Real) ? rec : recs; r.AddNew(); r.Put("SignalId", param.SignalId); r.Put("Time", beg); if (dt.LessOrEquals(DataType.Real)) { var d = param.StringValue.ToDouble(); if (!double.IsNaN(d)) { r.Put("Value", d); } else { r.Put("Value", 0); r.Put("Nd", 1); } } else if (dt == DataType.String) { r.Put("StrValue", param.StringValue); } else if (dt == DataType.Time) { var t = param.StringValue.ToDateTime(); r.Put("TimeValue", t); if (t == Different.MinDate) { r.Put("Nd", 1); } } } } using (var sys = new SysTabl(db, false)) { var d = sys.Value("BeginInterval").ToDateTime(); if (d == Different.MinDate || d > beg) { sys.PutValue("BeginInterval", beg.ToString()); } d = sys.Value("EndInterval").ToDateTime(); if (d < beg) { sys.PutValue("EndInterval", beg.ToString()); } } } } catch (Exception ex) { Book.AddError("Ошибка при записи ручного ввода", ex); } } }
//Обновление списка проектов в файле данных отчета private IEnumerable <ReportProjectForData> MakeProjectsList() { AddEvent("Обновление списка проектов"); var plist = new DicS <ReportProjectForData>(); try { using (var rec = new RecDao(General.ReporterFile, "SELECT Reports.Report, Projects.* FROM Reports INNER JOIN Projects ON Reports.ReportId = Projects.ReportId WHERE Report='" + Code + "'")) while (rec.Read()) { var p = new ReportProjectForData(this, rec); plist.Add(p.CodeFinal, p); } foreach (var pr in SysPage.GetProjects().Values) { if (plist.ContainsKey(pr.CodeFinal)) { plist[pr.CodeFinal].CalcMode = pr.CalcMode; } } foreach (var pr in plist.Values) { pr.GetChangeTime(); } using (var db = new DaoDb(DataFile)) { var dic = new SetS(); using (var rec = new RecDao(db, "SELECT * FROM Projects")) { while (rec.Read()) { var code = rec.GetString("Project"); if (code != "Сохранение" && code != "Системные") { if (!plist.ContainsKey(code)) { rec.Put("SysField", "Del"); } else { dic.Add(code); rec.Put("SysField", ""); plist[code].DataChangeTime = rec.GetTime("LastChange"); plist[code].ToRecordset(rec, false); } } } foreach (var p in plist.Values) { if (!dic.Contains(p.Code)) { p.ToRecordset(rec, true); } } } db.Execute("DELETE Cells.* FROM Projects INNER JOIN (CalcParams INNER JOIN Cells ON CalcParams.ParamId = Cells.ParamId) ON Projects.Project = CalcParams.Project WHERE Projects.SysField='Del';"); db.Execute("DELETE CalcParams.* FROM Projects INNER JOIN CalcParams ON Projects.Project = CalcParams.Project WHERE Projects.SysField='Del';"); db.Execute("DELETE * FROM Projects WHERE Projects.SysField='Del'"); } } catch (Exception ex) { AddError("Ошибка при работе с ReporterData, архивом или файлом данных отчета", ex); } return(plist.Values); }