//Загрузка всех таблиц для указанной базы данных public TablsList(DaoDb db) { db.ConnectDao(); foreach (TableDef t in db.Database.TableDefs) { var tup = Tabl.GetTabl(t.Name); if (tup != null) { if (Tabls.ContainsKey(tup.Item1)) { Tabls[tup.Item1].AddLevel(tup.Item2); } else { Tabls.Add(tup.Item1, new Tabl(tup.Item1, tup.Item2, db)); } } } }
//Чтение списка расчетных параметров 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); } }
public TablGroup(string dbFile, string code) { DbFile = dbFile; Code = code; Tabls.Add(-1, new TablStruct("", -1)); //Искусственный родитель главной таблицы }