예제 #1
0
        //Создание рабочего файла, возвращает ошибку или ""
        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));
        }
예제 #2
0
 //Продготовка файла 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);
     }
 }
예제 #3
0
 //Очистка таблиц 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\");
 }
예제 #4
0
        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 { }
            }
        }
예제 #5
0
 //Закрывает все ресурсы
 public static void Close()
 {
     if (!IsActivated)
     {
         return;
     }
     CommonBook.UpdateHistory(false);
     CommonBook.CloseHistory();
     try { DaoDb.Compress(General.ReporterFile, 100000000); }
     catch {}
 }
예제 #6
0
        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);
        }
예제 #7
0
        //Перенос ссылок из отчета в файл данных
        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); }
        }