Exemple #1
0
        //Загрузка сигналов
        private void LoadSignals()
        {
            AddEvent("Загрузка объектов");
            using (var db = new DaoDb(Dir + "UsedSignals.accdb"))
            {
                var objectsId = new DicI <CalcObject>();
                using (var rec = new DaoRec(db, "UsedObjects"))
                    while (rec.Read())
                    {
                        var ob = new CalcObject(rec);
                        Objects.Add(ob.Code, ob);
                        objectsId.Add(rec.GetInt("ObjectId"), ob);
                    }

                AddEvent("Загрузка свойств объектов");
                using (var rec = new DaoRec(db, "UsedObjectsProps"))
                    while (rec.Read())
                    {
                        var mean = MFactory.NewMean(rec.GetString("DataType").ToDataType(), rec.GetString("Mean"));
                        objectsId[rec.GetInt("ObjectId")].Props.Add(rec.GetString("CodeProp"), mean);
                    }

                AddEvent("Загрузка сигналов");
                using (var rec = new DaoRec(db, "UsedSignals"))
                    while (rec.Read())
                    {
                    }
            }
        }
Exemple #2
0
 public TablValues(int maxLevel)
 {
     _rows = new DicI <TablRow> [maxLevel];
     for (int i = 0; i < maxLevel; i++)
     {
         _rows[i] = new DicI <TablRow>();
     }
 }
Exemple #3
0
 public Tabl(int maxLevel)
 {
     _rows = new DicI <TablRow> [maxLevel - 1];
     for (int i = 0; i < maxLevel - 1; i++)
     {
         _rows[i] = new DicI <TablRow>();
     }
 }
Exemple #4
0
        public FunsChecker(FunsCheckType listType)
        {
            try
            {
                bool isGenerate = listType == FunsCheckType.Gen;
                using (var db = new DaoDb(ItStatic.InfoTaskDir() + @"General\General.accdb"))
                {
                    var funsId = new DicI <FunCompile>();
                    var where = " WHERE (Functions.IsCompile = True)" + (isGenerate ? "AND (Functions.IsGen = True) " : " ");
                    using (var rec = new AdoReader(db, "SELECT * FROM Functions" + where))
                        while (rec.Read())
                        {
                            var f = new FunCompile(rec);
                            funsId.Add(f.Id, f);
                            _funs.Add(f.Name, f);
                            if (!f.Synonym.IsEmpty())
                            {
                                _funs.Add(f.Synonym, f);
                            }
                        }

                    using (var rec = new AdoReader(db, "SELECT FunctionsOverloads.* FROM Functions INNER JOIN FunctionsOverloads ON Functions.Id = FunctionsOverloads.FunctionId "
                                                   + where + "ORDER BY FunctionsOverloads.FunctionId, FunctionsOverloads.RunNumber"))
                    {
                        rec.Read();
                        while (!rec.EOF)
                        {
                            var id  = rec.GetInt("FunctionId");
                            var fun = funsId[id];
                            while (rec.GetInt("FunctionId") == id)
                            {
                                fun.Overloads.Add(new FunOverload(fun, rec));
                                if (!rec.Read())
                                {
                                    break;
                                }
                            }
                        }
                    }

                    using (var rec = new AdoReader(db, "SELECT * FROM ParamProps"))
                        while (rec.Read())
                        {
                            var dt = rec.GetString("DataType").ToDataType();
                            ParamProps.Add(rec.GetString("EnglishCode"), dt);
                            ParamProps.Add(rec.GetString("RussianCode"), dt);
                        }
                }
            }
            catch (Exception ex)
            {
                ex.MessageError("Системная ошибка компилятора. Ошибка загрузки функций");
            }
        }
Exemple #5
0
 //Конструктор, на входе рекорсет rec, objects - список объектов, checkErrors: true - проверка сигналов, false - сигналы для компиляции
 public Signal(IRecordRead rec, DicI <ObjectSignal> objects, bool checkErrors)
 {
     ErrMess       = "";
     Code          = rec.GetString("CodeSignal");
     Name          = rec.GetString("NameSignal");
     Units         = rec.GetString("Units");
     DataType      = rec.GetString("DataType").ToDataType();
     InUseSource   = false;
     InUseReceiver = false;
     ObjectId      = rec.GetInt("ObjectId");
     ConstValue    = rec.GetString("ConstValue");
     SourceName    = rec.GetString("SourceName");
     ReceiverName  = rec.GetString("ReceiverName");
     Inf           = rec.GetString("Inf");
     Default       = rec.GetBool("Default");
     if (checkErrors)
     {
         if (Code.IsEmpty())
         {
             ErrMess += "Не заполнен код (CodeSignal); ";
         }
         if (DataType == DataType.Error)
         {
             ErrMess += "Недопустимый тип данных (DataType); ";
         }
         if (ConstValue.IsEmpty() && SourceName.IsEmpty() && ReceiverName.IsEmpty())
         {
             ErrMess += "Должно быть заполнено имя источника (SourceName), имя приемника (ReceiverName) или значение константы (ConstValue); ";
         }
     }
     if (objects.ContainsKey(ObjectId))
     {
         ObjectSignal = objects[ObjectId];
         ObjectSignal.Signals.Add(Code, this);
         FullCode = ObjectSignal.Code + "." + Code;
         if (checkErrors)
         {
             //((RecDao)rec).Put("FullCode", FullCode);
             if (Default)
             {
                 objects[ObjectId].DefalutsCount++;
             }
             if (ErrMess != "")
             {
                 objects[ObjectId].ErrorInSignals = true;
             }
         }
     }
 }
Exemple #6
0
 //Получение списков кодов провайдеров по типам для выпадающих списков
 private static void ReadProvidersLists()
 {
     try
     {
         var prIds = new DicI <ProviderConfig>();
         using (var rec = new ReaderAdo(ConfigFile, "SELECT * FROM SysTabl WHERE (ParamType='Provider') And (ParamValue <>'Коммуникатор')"))
         {
             while (rec.Read())
             {
                 var code = rec.GetString("ParamName");
                 var pr   = new ProviderConfig(rec.GetString("ParamValue").ToProviderType(), code);
                 pr.JointProviders.Add(code);
                 prIds.Add(rec.GetInt("ParamId"), pr);
                 ProviderConfigs.Add(pr.Code, pr);
             }
             foreach (var pr in prIds.Values)
             {
                 if (pr.Type == ProviderType.Source)
                 {
                     ProviderConfigs["CloneSource"].JointProviders.Add(pr.Code);
                 }
             }
             using (var recp = new ReaderAdo(ConfigFile, "SELECT * FROM SysSubTabl WHERE (SubParamName='ProviderFile') Or (SubParamName='JointProviders')"))
                 while (recp.Read())
                 {
                     int id = recp.GetInt("ParamId");
                     if (prIds.ContainsKey(id))
                     {
                         string prop = recp.GetString("SubParamName");
                         var    pval = recp.GetString("SubParamValue");
                         if (prop == "ProviderFile")
                         {
                             prIds[id].File = InfoTaskDir + (pval.StartsWith(@"\") ? pval.Substring(1) : pval);
                         }
                         if (prop == "JointProviders")
                         {
                             prIds[id].JointProviders.AddRange(pval.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries));
                         }
                     }
                 }
         }
     }
     catch (Exception ex)
     {
         ex.MessageError("Ошибка загрузки установленных провайдеров. Не правильный файл Config.accdb");
     }
 }
Exemple #7
0
        public void Simple()
        {
            var dic = new DicI <string>("def");

            dic.Add(2, "22");
            dic.Add(3, "33");
            Assert.IsTrue(dic.ContainsKey(2));
            Assert.IsTrue(dic.ContainsKey(3));
            Assert.IsFalse(dic.ContainsKey(4));
            Assert.IsTrue(dic.Keys.Contains(3));
            Assert.AreEqual("22", dic[2]);
            Assert.AreEqual("22", dic.Get(2));
            Assert.AreEqual("33", dic.Dic[3]);
            Assert.AreEqual("def", dic[4]);
            Assert.AreEqual(2, dic.Count);
            Assert.AreEqual(2, dic.Values.Count);
            Assert.AreEqual(2, dic.Keys.Count);
            dic.Add(2, "222");
            dic.Add(3, "333", true);
            dic.Add(4, "444");
            Assert.IsTrue(dic.ContainsKey(2));
            Assert.IsTrue(dic.ContainsKey(3));
            Assert.IsTrue(dic.ContainsKey(4));
            Assert.AreEqual("22", dic[2]);
            Assert.AreEqual("333", dic[3]);
            Assert.AreEqual("444", dic[4]);
            Assert.AreEqual("444", dic.Get(4, "hh"));
            Assert.AreEqual("def", dic[5]);
            Assert.AreEqual("hh", dic.Get(5, "hh"));
            Assert.IsTrue(dic.ContainsValue("22"));
            Assert.IsFalse(dic.ContainsValue("33"));
            Assert.AreEqual(3, dic.Count);
            dic[4] = "44";
            Assert.IsTrue(dic.ContainsKey(4));
            Assert.AreEqual("44", dic[4]);
            Assert.IsTrue(dic.Remove(3));
            Assert.IsFalse(dic.Remove(5));
            Assert.IsFalse(dic.ContainsKey(3));
            Assert.IsFalse(dic.ContainsKey(5));
            dic.Clear();
            Assert.AreEqual(0, dic.Count);
            Assert.IsFalse(dic.ContainsKey(2));
        }
Exemple #8
0
        //Задать максимальный уровень
        //И сразу загрузить список полей из таблицы в Fields
        public void AddLevel(int level)
        {
            var tname = TablName(level);
            var dicn  = new DicI <TablField>();
            var dic   = new DicS <TablField>();
            var t     = _db.Database.TableDefs[tname];
            int i     = 0;

            foreach (Field f in t.Fields)
            {
                if (f.Name != "Id" && f.Name != "ParentId" && f.Name != "Num" && f.Name != "Code")
                {
                    var tf = new TablField(f.Name, i, f.Type.ToDataType());
                    dic.Add(f.Name, tf);
                    dicn.Add(i++, tf);
                }
            }
            Fields.Add(level, dic);
            FieldsNums.Add(level, dicn);
        }
Exemple #9
0
        private void LoadParams(string fileName, string tablName)
        {
            using (var db = new DaoDb(Dir + fileName + ".accdb"))
            {
                var paramsId = new DicI <CalcParam>();
                using (var rec = new DaoRec(db, tablName + "Params"))
                    while (rec.Read())
                    {
                        var cp = new CalcParam(this, rec, false);
                        CalcParams.Add(cp.Code, cp);
                        paramsId.Add(rec.GetInt("ParamId"), cp);
                    }

                using (var rec = new DaoRec(db, tablName + "SubParams"))
                    while (rec.Read())
                    {
                        var cp    = new CalcParam(this, rec, true);
                        var owner = paramsId[rec.GetInt("ParamId")];
                        owner.SubParams.Add(cp.Code, cp);
                        cp.Owner = owner;
                    }
            }
        }
Exemple #10
0
        public void Complex()
        {
            var dic = new DicI <int>();

            dic.Add(1, 1);
            Assert.IsTrue(dic.ContainsKey(1));
            Assert.AreEqual(0, dic[2]);
            Assert.AreEqual(1, dic[1]);
            Assert.AreEqual(1, dic.Count);
            var dicAdd = new DicI <int>();

            dicAdd.Add(1, 11);
            dicAdd.Add(2, 22);
            dicAdd.Add(3, 333);
            dic.AddDic(dicAdd, false);
            Assert.IsTrue(dic.ContainsKey(1));
            Assert.IsTrue(dic.ContainsKey(2));
            Assert.IsTrue(dic.ContainsKey(3));
            Assert.AreEqual(3, dic.Count);
            Assert.AreEqual(1, dic[1]);
            Assert.AreEqual(22, dic[2]);
            Assert.AreEqual(333, dic[3]);
            dicAdd[3] = 33;
            dic.AddDic(dicAdd);
            Assert.AreEqual(3, dic.Count);
            Assert.IsTrue(dic.ContainsKey(1));
            Assert.IsTrue(dic.ContainsKey(2));
            Assert.IsTrue(dic.ContainsKey(3));
            Assert.AreEqual(22, dic[2]);
            Assert.AreEqual(33, dic[3]);
            dic.Remove((k, v) => v > 30);
            Assert.IsTrue(dic.ContainsKey(1));
            Assert.IsTrue(dic.ContainsKey(2));
            Assert.IsFalse(dic.ContainsKey(3));
            Assert.AreEqual(2, dic.Count);
        }
Exemple #11
0
        //Загрузить список сигналов, возвращает ошибку или ""
        public string LoadSignals()
        {
            StartAtom(Atom.LoadSignals);
            CountsToZero();
            if (State == State.Closed)
            {
                AddError("Копилятор уже был закрыт");
            }
            else if (State == State.Empty)
            {
                AddError("Проект не загружен");
            }
            else
            {
                try
                {
                    var objectsId = new DicI <ObjectSignal>();
                    Signals.Clear();
                    SignalsList.Clear();
                    //using (var db = new DaoDb(_projectFile))
                    using (var db = new DaoDb(_objectsFile)) //ab\
                    {
                        using (var reco = new ReaderAdo(db, "SELECT CodeObject, NameObject, TagObject, ObjectId, CommName FROM Objects ORDER BY ObjectId"))
                        {
                            AddEvent("Открыт рекордсет объектов");
                            Procent = 5;
                            while (reco.Read())
                            {
                                var curo = new ObjectSignal(reco, false);
                                Objects.Add(curo.Code, curo);
                                objectsId.Add(curo.Id, curo);
                            }
                            AddEvent("Объекты загружены");
                        }
                        Thread.Sleep(50);

                        Procent = 20;
                        using (var recs = new ReaderAdo(db, "SELECT ObjectId, Default, CodeSignal, NameSignal, Units, DataType, ConstValue, SourceName, ReceiverName, Inf, FullCode FROM Signals ORDER BY ObjectId, SignalId"))
                        {
                            int i = 0, n = recs.RecordCount("SELECT Count(*) FROM Signals");
                            Procent = 30;
                            AddEvent("Открыт рекордсет сигналов");
                            if (n != 0)
                            {
                                while (recs.Read())
                                {
                                    var sig = new Signal(recs, objectsId, false);
                                    SignalsList.Add(sig);
                                    Signals.Add(sig.FullCode, sig);
                                    if (sig.Default && objectsId.ContainsKey(sig.ObjectId))
                                    {
                                        Signals.Add(objectsId[sig.ObjectId].Code, sig);
                                    }
                                    if (n > 20 && i % (n / 15) == 0)
                                    {
                                        Procent = (i++ *70) / n + 30;
                                    }
                                }
                            }
                        }
                        AddEvent("Сигналы загружены");
                    }
                }
                catch (Exception ex)
                {
                    //ab
                    //AddError("Ошибка загрузки сигналов", ex);
                    AddError("Ошибка загрузки сигналов: " + ex.Message, ex);
                    //\ab
                }
            }
            return(FinishAtom(State.Signals, State.Project, "Проект: " + _code + @";  Сигналов: " + SignalsList.Count));
        }
Exemple #12
0
        //Проверка таблицы сигналов
        public string CheckSignals(bool onlyInUse = false)
        {
            StartAtom(Atom.CheckSignals);
            CountsToZero();
            var objectsId = new DicI <ObjectSignal>();
            var signals   = new DicS <Signal>();

            _objects.Clear();
            try
            {
                if (State == State.Closed)
                {
                    AddError("Копилятор уже был закрыт");
                }
                else if (State == State.Empty)
                {
                    AddError("Проект не загружен");
                }
                else
                {
                    //using (var reco = new RecDao(_projectFile, "SELECT CodeObject, NameObject, TagObject, ObjectId, CommName, ErrMess FROM Objects ORDER BY ObjectId"))
                    using (var reco = new RecDao(_objectsFile, "SELECT CodeObject, NameObject, TagObject, ObjectId, CommName, ErrMess FROM Objects ORDER BY ObjectId")) //ab\
                    {
                        Procent = 10;
                        while (reco.Read())
                        {
                            var ob = new ObjectSignal(reco, true);
                            objectsId.Add(ob.Id, ob);
                            if (!_objects.ContainsKey(ob.Code))
                            {
                                _objects.Add(ob.Code, ob);
                            }
                            else
                            {
                                ob.ErrMess += "Повтор кода объекта (" + ob.Code + "); ";
                                reco.Put("ErrMess", ob.ErrMess);
                                _objects[ob.Code].ErrMess += "Повтор кода объекта (" + ob.Code + "); ";
                            }
                        }
                        Procent = 25;
                        using (var recs = new RecDao(reco.DaoDb, "SELECT ObjectId, Signals.Default, CodeSignal, NameSignal, Units, Signals.DataType, ConstValue, Signals.SourceName, Signals.ReceiverName, Signals.Inf, Signals.FullCode AS FullCode, Signals.ErrMess" + (!onlyInUse ? "" : ", SignalsInUse.FullCode AS FullCodeInUse")
                                                     + " FROM Signals" + (!onlyInUse ? "" : " LEFT JOIN SignalsInUse ON Signals.FullCode=SignalsInUse.FullCode ")))
                        {
                            Procent = 35;
                            while (recs.Read())
                            {
                                var sig = new Signal(recs, objectsId, true);
                                if (onlyInUse)
                                {
                                    sig.InUse = !recs.GetString("FullCodeInUse").IsEmpty();
                                }
                                objectsId[sig.ObjectId].InUse |= sig.InUse;
                                if (signals.ContainsKey(sig.FullCode))
                                {
                                    sig.ErrMess += "Повтор полного кода сигнала (" + sig.FullCode + "); ";
                                }
                                else
                                {
                                    signals.Add(sig.FullCode, sig);
                                }
                                if (sig.ErrMess != "")
                                {
                                    recs.Put("ErrMess", sig.ErrMess, true);
                                    if (sig.InUse || !onlyInUse)
                                    {
                                        SignalsErrorsCount++;
                                    }
                                    objectsId[sig.ObjectId].ErrorInSignals = true;
                                }
                            }
                        }
                        Procent = 80;
                        reco.MoveFirst();
                        while (!reco.EOF)
                        {
                            var ob = objectsId[reco.GetInt("ObjectId")];
                            if (ob.DefalutsCount == 0)
                            {
                                ob.ErrMess += "Объект не содержит сигналов по умолчанию; ";
                            }
                            if (ob.DefalutsCount >= 2)
                            {
                                ob.ErrMess += "Объект содержит более одного сигнала по умолчанию; ";
                            }
                            if (ob.ErrorInSignals)
                            {
                                ob.ErrMess += "Ошибки в сигналах; ";
                            }
                            if (ob.ErrMess != "")
                            {
                                reco.Put("ErrMess", ob.ErrMess);
                                if (!onlyInUse || ob.InUse)
                                {
                                    ObjectsErrorsCount++;
                                }
                            }
                            reco.MoveNext();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                return(ex.MessageError("Ошибка при проверке сигналов"));
            }
            return(FinishAtom(State.Project, State.Project, "Проект: " + _code + "; Объектов с ошибками: " + ObjectsErrorsCount + "; Сигналов с ошибками: " + SignalsErrorsCount));
        }
Exemple #13
0
        //Загрузка сигналов
        public void LoadSignals()
        {
            StartLog("Загрузка сигналов", null, Type + " " + Code).Run(() =>
            {
                BaseObjectsTypes.Clear();
                ObjectsTypes.Clear();
                Objects.Clear();
                var typesId     = new DicI <ObjectType>();
                var baseTypesId = new DicI <BaseObjectType>();
                var objectsId   = new DicI <TablikObject>();

                using (var db = new DaoDb(SignalsFile))
                {
                    using (var rec = new DaoRec(db, "BaseObjectTypes"))
                        while (rec.Read())
                        {
                            var t = new BaseObjectType(this, rec);
                            baseTypesId.Add(t.Id, t);
                            BaseObjectsTypes.Add(t.Code, t);
                            BaseObjectsTypes.Add(Code + "." + t.Code, t);
                        }

                    using (var rec = new DaoRec(db, "ObjectTypes"))
                        while (rec.Read())
                        {
                            var t = new ObjectType(this, rec);
                            typesId.Add(t.Id, t);
                            ObjectsTypes.Add(t.Code, t);
                            ObjectsTypes.Add(Code + "." + t.Code, t);
                            var list = rec.GetString("BaseTypes").ToPropertyList();
                            foreach (var bt in list)
                            {
                                if (BaseObjectsTypes.ContainsKey(bt))
                                {
                                    t.BaseTypes.Add(BaseObjectsTypes[bt]);
                                }
                            }
                        }

                    using (var rec = new DaoRec(db, "Objects"))
                        while (rec.Read())
                        {
                            var t = rec.GetString("TypeObject");
                            if (ObjectsTypes.ContainsKey(t))
                            {
                                var ob = new TablikObject(this, ObjectsTypes[t], rec);
                                objectsId.Add(ob.Id, ob);
                                Objects.Add(ob.Code, ob);
                                Objects.Add(Code + "." + ob.Code, ob);
                                foreach (Field f in rec.Recordset.Fields)
                                {
                                    if (f.Name != "Otm" && f.Name != "ObjectId" && f.Name != "SysField")
                                    {
                                        var dt = f.Type.ToDataType();
                                        var m  = rec.GetMean(dt, f.Name);
                                        ob.Props.Add(f.Name, new ObjectProp(f.Name, dt, m));
                                    }
                                }
                            }
                        }

                    using (var rec = new DaoRec(db, "BaseSignals"))
                        while (rec.Read())
                        {
                            var s = new BaseTablikSignal(this, rec);
                            var t = baseTypesId[rec.GetInt("BaseTypeId")];
                            t.Signals.Add(s.Code, s);
                            if (rec.GetBool("Default"))
                            {
                                t.Signal = s;
                            }
                        }

                    using (var rec = new DaoRec(db, "Signals"))
                        while (rec.Read())
                        {
                            var s = new TablikSignal(this, rec);
                            var t = typesId[rec.GetInt("TypeId")];
                            t.Signals.Add(s.Code, s);
                            if (rec.GetBool("Default"))
                            {
                                t.Signal = s;
                            }
                            foreach (var bt in t.BaseTypes)
                            {
                                var bcode = rec.GetString("CodeSignal" + (bt.SignalColumnNum == 1 ? "" : bt.SignalColumnNum.ToString()));
                                if (!bcode.IsEmpty())
                                {
                                    t.Signals.Add(bcode, s);
                                }
                            }
                        }

                    using (var rec = new DaoRec(db, "ObjectsColumns"))
                        while (rec.Read())
                        {
                            ObjectsColumns.Add(rec.GetString("CodeColumn"), rec.GetString("DataType").ToDataType());
                        }
                }
            });
        }