//Загрузка сигналов 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()) { } } }
public TablValues(int maxLevel) { _rows = new DicI <TablRow> [maxLevel]; for (int i = 0; i < maxLevel; i++) { _rows[i] = new DicI <TablRow>(); } }
public Tabl(int maxLevel) { _rows = new DicI <TablRow> [maxLevel - 1]; for (int i = 0; i < maxLevel - 1; i++) { _rows[i] = new DicI <TablRow>(); } }
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("Системная ошибка компилятора. Ошибка загрузки функций"); } }
//Конструктор, на входе рекорсет 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; } } } }
//Получение списков кодов провайдеров по типам для выпадающих списков 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"); } }
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)); }
//Задать максимальный уровень //И сразу загрузить список полей из таблицы в 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); }
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; } } }
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); }
//Загрузить список сигналов, возвращает ошибку или "" 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)); }
//Проверка таблицы сигналов 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)); }
//Загрузка сигналов 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()); } } }); }