//Загрузка SysTabl проекта, needCompilation = true - ругается, если проект не скомпилирован public void ReadSysTabl(bool needCompilation) { try { using (var sys = new SysTabl(File)) { Code = sys.SubValue("ProjectInfo", "Project"); Name = sys.SubValue("ProjectInfo", "ProjectName"); Description = sys.SubValue("ProjectInfo", "ProjectDescription"); VedTag = sys.Tag("VedTag"); if (needCompilation) { Interpolation = sys.SubValue("ProjectInfo", "Interpolation").ToInterpolation(); LastChange = DateTime.Parse(sys.SubValue("CompileStatus", "LastTimeCompile")); } IsMoments = sys.SubValue("ArchiveOptions", "IsMoments") == "True"; IsPeriodic = sys.SubValue("ArchiveOptions", "IsPeriodic") == "True"; IsAbsolute = sys.SubValue("ArchiveOptions", "IsAbsolute") == "True"; IsPrevAbs = sys.SubValue("ArchiveOptions", "IsPrevAbs") == "True"; IsLastBase = sys.SubValue("ArchiveOptions", "IsLastBase") == "True"; IsLastHour = sys.SubValue("ArchiveOptions", "IsLastHour") == "True"; IsLastDay = sys.SubValue("ArchiveOptions", "IsLastDay") == "True"; IsManyBase = sys.SubValue("ArchiveOptions", "IsManyBase") == "True"; IsManyHour = sys.SubValue("ArchiveOptions", "IsManyHour") == "True"; IsManyDay = sys.SubValue("ArchiveOptions", "IsManyDay") == "True"; IsManyMoments = sys.SubValue("ArchiveOptions", "IsManyMoments") == "True"; } } catch (Exception ex) { ThreadCalc.AddError("Недопустимые настройки в файле проекта (SysTabl) или проект никогда не копилировался", ex, "Путь=" + File); } }
//Открывает рекордсет Projects, удаляет оттуда проект и закрывает public void DeleteFromDb() { try { DaoDb.Execute(General.ControllerFile, "DELETE * FROM Projects WHERE (ThreadId=" + Id + ") And (Project='" + Code + "')"); } catch (Exception ex) { ThreadCalc.AddError("Ошибка при удалении проекта из ControllerData", ex, Code); } }
//Открывает рекордсет Projects, записывает туда проект и закрывает public void AddToDb() { try { using (var rec = new RecDao(General.ControllerFile, "SELECT * FROM Projects WHERE (ThreadId=" + Id + ")")) { if (!rec.FindFirst("Project", Code)) { rec.AddNew(); } ToRecordset(rec); } } catch (Exception ex) { ThreadCalc.AddError("Ошибка при записи проекта в ControllerData", ex, Code); } }
//Создание проекта по указанному файлу file в потоке thread public Project(string file, ThreadCalc thread) { ThreadCalc = thread; File = file; Otm = true; //Проверка правильности проекта if (!DbVersion.IsProject(File)) { thread.AddError("Указан недопустимый файл проекта", null, "Путь=" + File); return; } if (thread.ApplicationType == ApplicationType.Controller) {//Обновление версии файла проекта var vsyn = new DbVersion(); vsyn.UpdateProjectVersion(File, false); } ReadSysTabl(false); }
public Grafic(IRecordRead recg, ThreadCalc thread) : base(recg.GetInt("Dimension"), 0) { Code = recg.GetString("Code"); GraficType = recg.GetString("GraficType").ToGraficType(); ThreadCalc = thread; while (!recg.EOF && recg.GetString("Code").ToLower() == Code.ToLower()) { try { ReadPoint(recg); recg.Read(); } catch (Exception ex) { thread.AddError("Ошибка загрузки графика", ex, "График=" + Code); } } }
//Загрузка списка провайдеров public void ReadProviders() { try { Providers.Clear(); using (var rec = new ReaderAdo(File, "SELECT * FROM Providers WHERE (ProviderType <> '" + "Коммуникатор" + "')")) { while (rec.Read()) { var p = new Provider(rec, ThreadCalc); try { p.Codes = General.ProviderConfigs[p.Code].JointProviders; } catch (Exception ex) { AddError("Не установлен провайдер", ex, p.Code); } if (!ThreadCalc.ProvidersDic.ContainsKey(p.Name)) { Providers.Add(p.Name, p); ThreadCalc.ProvidersDic.Add(p.Name, p); p.Projects.Add(Code); if (p.Code == "HandInputSource" || p.Code == "HandInputSqlSource") { HandInputProvider = p; } AddEvent("Загружен провайдер"); } else { var pr = ThreadCalc.ProvidersDic[p.Name]; Providers.Add(p.Name, pr); pr.Projects.Add(Code); } } } } catch (Exception ex) { ThreadCalc.AddError("Ошибка чтения списка провайдеров из проекта", ex, "Проект=" + Code); } }
//Чтение списка расчетных параметров private void ReadCalcParams() { CalcParamsCode.Clear(); CalcParamsId.Clear(); CalcSubParamsId.Clear(); Grafics.Clear(); AddEvent("Загрузка графиков"); using (var db = new DaoDb(File)) { try { const string stSql = "SELECT GraficsList.Code, GraficsList.Dimension, GraficsList.GraficType, GraficsValues.X1, GraficsValues.X2, GraficsValues.X3, GraficsValues.X4, GraficsValues.X5, GraficsValues.X6, GraficsValues.X7, GraficsValues.X8 " + "FROM GraficsList INNER JOIN GraficsValues ON GraficsList.GraficId = GraficsValues.GraficId " + "ORDER BY GraficsList.Code, GraficsValues.X8, GraficsValues.X7, GraficsValues.X6, GraficsValues.X5, GraficsValues.X4, GraficsValues.X3, GraficsValues.X2, GraficsValues.X1;"; using (var recg = new ReaderAdo(db, stSql)) { //Считывание графиков recg.Read(); while (!recg.EOF) { var gr = new Grafic(recg, ThreadCalc); Grafics.Add(gr.Code, gr); } } } catch (Exception ex) { AddError("Ошибка загрузки графика", ex); } Procent = 10; AddEvent("Загрузка параметров"); try { const string stSql = "SELECT * FROM CalcParams WHERE (TaskOn = True) AND (CalcOn = True)"; using (var rec = new ReaderAdo(db, stSql)) while (rec.Read()) { var calc = new CalcParam(this, rec, false); calc.FullCode = calc.Code; CalcParamsId.Add(calc.Id, calc); CalcParamsCode.Add(calc.Code, calc); if (IsError) { return; } } } catch (Exception ex) { AddError("Список расчетных параметров загружен с ошибками, необходима повторная компиляция расчета", ex); } Procent = 40; AddEvent("Загрузка подпараметров"); try { const string stSql = "SELECT CalcSubParams.* FROM CalcParams INNER JOIN CalcSubParams ON CalcParams.CalcParamId = CalcSubParams.OwnerId" + " WHERE (CalcParams.TaskOn=True) AND (CalcParams.CalcOn=True) AND (CalcSubParams.CalcOn=True)"; using (var recp = new ReaderAdo(db, stSql)) while (recp.Read()) { var calc = new CalcParam(this, recp, true); CalcSubParamsId.Add(calc.Id, calc); calc.Owner = CalcParamsId[recp.GetInt("OwnerId")]; calc.Owner.Methods.Add(calc.Code, calc); calc.FullCode = calc.Owner.FullCode + "." + calc.Code; if (IsError) { return; } } } catch (Exception ex) { AddError("Список расчетных параметров загружен с ошибками, необходима повторная компиляция расчета", ex); } Procent = 60; } AddEvent("Загрузка справочных таблиц"); Tabls.Clear(); using (var db = new DaoDb(File).ConnectDao()) foreach (TableDef t in db.Database.TableDefs) { if (t.Name.StartsWith("Tabl_")) { var tabl = new Tabl(int.Parse(t.Name.Substring(5))); Tabls.Add(tabl.Num, tabl); tabl.FieldsCount = 0; foreach (Field f in t.Fields) { if (f.Name.StartsWith("Val_")) { int fnum = int.Parse(f.Name.Substring(4)); if (fnum >= tabl.FieldsCount) { tabl.FieldsCount = fnum + 1; } } } TableDef st = db.Database.TableDefs["Sub" + t.Name]; tabl.SubFieldsCount = 0; foreach (Field f in st.Fields) { if (f.Name.StartsWith("SubVal_")) { int fnum = int.Parse(f.Name.Substring(7)); if (fnum >= tabl.SubFieldsCount) { tabl.SubFieldsCount = fnum + 1; } } } } } if (Tabls.Count > 0) { using (var db = new DaoDb(File)) foreach (var t in Tabls.Values) { using (var rect = new ReaderAdo(db, "SELECT * FROM Tabl_" + t.Num)) while (rect.Read()) { new TablParam().ParamFromRec(t, rect); } using (var rect = new ReaderAdo(db, "SELECT * FROM SubTabl_" + t.Num)) while (rect.Read()) { new TablParam().SubParamFromRec(t, rect); } } } Procent = 75; AddEvent("Разбор выражений"); try { foreach (var cp in CalcParamsId.Values) { if (!Start(cp.Parse)) { break; } } } catch (Exception ex) { ThreadCalc.AddError("Список расчетных параметров загружен с ошибками, необходима повторная компиляция расчета", ex); } }
private void AddError(string text, Exception ex = null, string pars = "") { ThreadCalc.AddError(text, ex, pars, "Проект=" + Code); }