//Создание рабочего файла, возвращает ошибку или "" 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)); }
//Продготовка файла Result protected void PrepareResultFile() { ResultFile = General.ControllerDir + @"Result\Result" + Id + ".accdb"; if (!DaoDb.FromTemplate(General.ControllerDir + "ResultTemplate.accdb", ResultFile, ApplicationType == ApplicationType.Controller ? ReplaceByTemplate.IfNewVersion : ReplaceByTemplate.Always)) { DaoDb.Compress(ResultFile, 400000000, General.TmpDir, 3000); } }
//Очистка таблиц 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 Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { bool stop = true; foreach (var t in App.Threads) { stop &= t.State != State.Calc && t.State != State.FinishCalc && t.State != State.Waiting && t.State != State.FinishWaiting && t.State != State.GetTime; } if (!stop) { Different.MessageInfo("Для закрытия контроллера расчетов нужно чтобы все потоки были остановлены"); e.Cancel = true; } else { try { if (AppInfoWindow != null) { AppInfoWindow.Close(); } } catch {} foreach (var tt in App.Threads) { try { var t = (ThreadController)tt; if (t.HandInputWindow != null && t.HandInputWindow.IsVisible) { var vw = t.HandInputWindow.ValuesVindow; if (vw != null && vw.Visibility == Visibility.Visible) { ((GridInputParam)vw.DataContext).SaveHandValues(); vw.Close(); } t.HandInputWindow.ValuesVindow = null; if (t.HandInputWindow.IsVisible) { t.HandInputWindow.Close(); } } if (t.SetupWindow != null && t.SetupWindow.IsVisible) { t.SetupWindow.Close(); } if (t.ThreadWindow != null && t.ThreadWindow.IsVisible) { t.ThreadWindow.Close(); } t.CloseThread(); } catch {} } try { DaoDb.Compress(General.ControllerFile, 100000000, General.TmpDir); } catch { } } }
//Закрывает все ресурсы public static void Close() { if (!IsActivated) { return; } CommonBook.UpdateHistory(false); CommonBook.CloseHistory(); try { DaoDb.Compress(General.ReporterFile, 100000000); } catch {} }
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); }
//Перенос ссылок из отчета в файл данных 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); } }