public void InstanceFuns() { using (var sys = new SysTabl(CopyFile(""), false)) { Assert.IsNotNull(sys); Assert.AreEqual("OptionsValue", sys.Value("FileOptions")); Assert.AreEqual("ParamValue", sys.Value("Param")); Assert.AreEqual("OptionsTag", sys.Tag("FileOptions")); Assert.AreEqual("ParamTag", sys.Tag("Param")); sys.PutValue("Param", "s1", "t1"); Assert.AreEqual("s1", sys.Value("Param")); Assert.AreEqual("t1", sys.Tag("Param")); sys.PutValue("Param", 22, "t2"); Assert.AreEqual("22", sys.Value("Param")); Assert.AreEqual("t2", sys.Tag("Param")); sys.PutValue("Param", 33.3, "t3"); Assert.AreEqual("33,3", sys.Value("Param")); Assert.AreEqual("t3", sys.Tag("Param")); sys.PutValue("Param", new DateTime(2000, 1, 1)); Assert.AreEqual("01.01.2000 0:00:00", sys.Value("Param")); Assert.AreEqual("t3", sys.Tag("Param")); sys.PutValue("Param", true, ""); Assert.AreEqual("True", sys.Value("Param")); Assert.AreEqual("", sys.Tag("Param")); sys.PutTag("Param", "Tag", "Value"); Assert.AreEqual("Value", sys.Value("Param")); Assert.AreEqual("Tag", sys.Tag("Param")); } var db = new DaoDb(CopyFile("")); using (var sys = new SysTabl(db)) { Assert.IsNotNull(sys); Assert.AreEqual("OptionsValue", sys.Value("FileOptions")); Assert.AreEqual("ParamValue", sys.Value("Param")); Assert.AreEqual("OptionsTag", sys.Tag("FileOptions")); Assert.AreEqual("ParamTag", sys.Tag("Param")); Assert.AreEqual("Тестовый файл", sys.SubValue("FileOptions", "FileDescription")); Assert.AreEqual("DaoTest", sys.SubValue("FileOptions", "FileType")); Assert.AreEqual("2.0.0", sys.SubValue("FileOptions", "FileVersion")); Assert.AreEqual("11.07.2016", sys.SubValue("FileOptions", "FileVersionDate")); Assert.AreEqual("SubValue", sys.SubValue("Param", "SubParam")); Assert.AreEqual(null, sys.SubTag("FileOptions", "FileDescription")); Assert.AreEqual("SubTag", sys.SubTag("Param", "SubParam")); sys.PutSubValue("Param", "SubParam", "s1", "t1"); Assert.AreEqual("s1", sys.SubValue("Param", "SubParam")); Assert.AreEqual("t1", sys.SubTag("Param", "SubParam")); sys.PutSubValue("Param", "SubParam", 22, "t2"); Assert.AreEqual("22", sys.SubValue("Param", "SubParam")); Assert.AreEqual("t2", sys.SubTag("Param", "SubParam")); sys.PutSubValue("Param", "SubParam", 33.3, "t3"); Assert.AreEqual("33,3", sys.SubValue("Param", "SubParam")); Assert.AreEqual("t3", sys.SubTag("Param", "SubParam")); sys.PutSubValue("Param", "SubParam", new DateTime(2000, 1, 1)); Assert.AreEqual("01.01.2000 0:00:00", sys.SubValue("Param", "SubParam")); Assert.AreEqual("t3", sys.SubTag("Param", "SubParam")); sys.PutSubValue("Param", "SubParam", true, ""); Assert.AreEqual("True", sys.SubValue("Param", "SubParam")); Assert.AreEqual("", sys.SubTag("Param", "SubParam")); sys.PutSubTag("Param", "SubParam", "Tag", "Value"); Assert.AreEqual("Value", sys.SubValue("Param", "SubParam")); Assert.AreEqual("Tag", sys.SubTag("Param", "SubParam")); } db.Dispose(); }
//Перенос ссылок из отчета в файл данных 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); } }
//Сохранение в файл клона 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()); } } } } }
//Запись значений ручного ввода, 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); } } }