//Запись значения в рекордсет клона protected void PutCloneRec(IReadMean mom, //Значение DaoRec rec, //Рекордсет bool isCutTable, //Запись в таблицу срезов DateTime d) //Время среза { rec.AddNew(); rec.Put("SignalId", IdInClone); if (isCutTable) { rec.Put("CutTime", d); } rec.Put("Time", mom.Time); if (mom.Error != null) { rec.Put("ErrNum", mom.Error.Number); } if (DataType.IsReal()) { rec.Put("RealValue", mom.Real); } else if (DataType == DataType.String) { rec.Put("StrValue", mom.String); } else if (DataType == DataType.Time) { rec.Put("TimeValue", mom.Date); } rec.Update(); }
//Подготовка провайдера protected override void PrepareProvider() { var set = new SetS(); using (var rec = new DaoRec(Db, "Signals")) { while (rec.Read()) { var code = rec.GetString("FillCode"); var isContains = _outs.ContainsKey(code); rec.Put("IsActive", isContains); if (isContains) { set.Add(code); _outs[code].Id = rec.GetInt("SignalId"); } } foreach (var k in _outs.Keys) { if (!set.Contains(k)) { rec.AddNew(); var o = _outs[k].ValueSignal; rec.Put("FullCode", o.Code); rec.Put("DataType", o.DataType.ToRussian()); rec.Put("SignalType", SignalType.List.ToRussian()); _outs[k].Id = rec.GetInt("SignalId"); } } } CloneRec = new DaoRec(Db, "MomentValues"); CloneStrRec = new DaoRec(Db, "MomentStrValues"); }
//Сохранить подпараметры в таблицу private void SaveSubPars(DaoRec rec) { while (rec.Read()) { SubParamsId[rec.GetInt("SubParamId")].SaveCompileResults(rec); } }
//Загрузка сигналов 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 void MakeClone(string cloneDir) //Каталог клона { using (StartProgress("Создание клона")) using (StartLog(0, 100, "Создание клона источника")) try { using (var db = new DaoDb(cloneDir.EndDir() + "Clone.accdb")) { //using (var sys = new SysTabl(db)) //{ // Complect = sys.Value("CloneComplect"); // var pr = _providersFactory.CreateProvider(Logger, sys.Value("SourceCode"), sys.Value("SourceInf")); // JoinProvider(pr); //} ReadCloneSignals(db); using (CloneRec = new DaoRec(db, "MomentValues")) using (CloneCutRec = new DaoRec(db, "MomentValuesCut")) using (CloneStrRec = new DaoRec(db, "MomentStrValues")) using (CloneStrCutRec = new DaoRec(db, "MomentStrValuesCut")) using (CloneErrorsRec = new DaoRec(db, "ErrorsObjects")) GetValues(); WriteMomentErrors(db); } } catch (Exception ex) { AddError("Ошибка при создании клона", ex); } }
//Сгенерировать таблицу по данному ряду public void Generate(TablsList dataTabls, //Список таблиц с данными для генерации DaoRec rec, //Рекордсет генерируемой таблицы DaoRec subrec) //Рекордсет генерируемой подтаблицы { if (!Keeper.ErrMess.IsEmpty()) { return; } IEnumerable <SubRows> rows = Rule == null ? new SubRows[] { null } : ((NodeRTabl)Rule).SelectRows(dataTabls, null); foreach (var row in rows) { rec.AddNew(); int id = rec.GetInt(Table.IdField); GenerateFields(row, rec); rec.Update(); if (subrec != null) { foreach (var subRowGen in SubRows) { IEnumerable <SubRows> subRows = subRowGen.RuleString.IsEmpty() ? new [] { row } : (((INodeRTabl)subRowGen.Rule).SelectRows(dataTabls, row)); foreach (var subRow in subRows) { subrec.AddNew(); subrec.Put(subRowGen.Table.ParentIdField, id); subRowGen.GenerateFields(subRow, subrec); subrec.Update(); } } } } }
//Сгенерировать public void Generate(string makedFile, //Файл сгенерированных таблиц string makedTabl, //Главная сгенерированная таблица string makedSubTabl = null) //Подчиненная сгенерированная таблица { try { AddEvent("Открытие рекордсетов для записи сгенерированных значений"); using (var db = new DaoDb(makedFile)) { if (makedSubTabl != null) { db.Execute("DELETE * FROM " + makedSubTabl); } db.Execute("DELETE * FROM " + makedTabl); using (var rec = new DaoRec(db, makedTabl)) using (var subRec = makedSubTabl == null ? null : new DaoRec(db, makedSubTabl)) foreach (var row in _rowsGen.Values) { if (row.Keeper.Errors.Count == 0) { if (!row.RuleString.IsEmpty()) { AddEvent("Генерация данных по шаблону", row.RuleString); } row.Generate(DataTabls, rec, subRec); } } } } catch (Exception ex) { AddError("Ошибка при генерации", ex, makedFile); } }
public GenRow(ModuleGenerator generator, //Ссылка на генератор TablsList dataTabls, //Исходные таблицы для генерации GenTemplateTable table, DaoRec rec, //Рекортсет и поля таблицы GenTemplateTable subTable, DaoRec subRec) //Рекордсет и и поля подтаблицы : base(generator, table, rec) { Id = rec.GetInt(table.IdField); var dataTabl = Rule == null ? null : ((NodeRTabl)Rule).Check(dataTabls, null); foreach (var key in Fields.Keys) { Keeper.SetFieldName(key); Fields[key].Check(dataTabl); } if (subRec != null && !subRec.EOF) { Keeper.SetFieldName(""); bool subErr = false; while (subRec.GetInt(subTable.ParentIdField) == Id) { var row = new GenSubRow(generator, dataTabls, dataTabl, subTable, subRec); if (row.Keeper.Errors.Count != 0 && !subErr) { Keeper.AddError("Ошибки в рядах подтаблицы", (IToken)null); subErr = true; } SubRows.Add(row); if (!subRec.MoveNext()) { break; } } } rec.Put(table.ErrField, Keeper.ErrMess); }
public TablRow(DaoRec rec) { foreach (Field f in rec.Recordset.Fields) { Means.Add(f.Name, rec.GetMean(f.Type.ToDataType(), f.Name)); } }
//Сравнение двух таблиц на полное совпадение, public static bool CompareTables(DaoDb db1, DaoDb db2, //Базы данных для сравнения string tableName, //Имяы таблицы string idField, string idField2 = null, string idField3 = null, //Ключевые поля для сравнения string tableName2 = null, //Имя таблицы во второй базе, если отличается params string[] exeptionFields) //Поля, исключаемые из сравнения { var exFields = new SetS(); foreach (var f in exeptionFields) { exFields.Add(f); } using (var rec1 = new DaoRec(db1, "SELECT * FROM " + tableName + " ORDER BY " + idField + (idField2 == null ? "" : ", " + idField2) + (idField3 == null ? "" : ", " + idField3))) using (var rec2 = new DaoRec(db2, "SELECT * FROM " + (tableName2 ?? tableName) + " ORDER BY " + idField + (idField2 == null ? "" : ", " + idField2) + (idField3 == null ? "" : ", " + idField3))) { rec1.Read(); while (rec2.Read()) { Assert.AreEqual(rec1.EOF, rec2.EOF); foreach (var k in rec1.Fileds.Keys) { if (!exFields.Contains(k)) { Assert.AreEqual(rec1.Recordset.Fields[k].Value, rec2.Recordset.Fields[k].Value); } } rec1.Read(); } Assert.AreEqual(rec1.EOF, rec2.EOF); } return(true); }
//Загрузка значений всех таблиц одной базы public void LoadValues(DaoDb db, bool onlyOtm) //Загружать только отмеченные ряды { foreach (var s in Structs.Dic) { if (s.Value.DbFile == db.File) { var tabl = Tabls.Add(s.Key, new Tabl(s.Value.Tabls.Count)); foreach (var tsi in s.Value.Tabls.Values) { if (tsi.Level >= 0) { using (var rec = new DaoRec(db, tsi.TableName)) while (rec.Read()) { if (!onlyOtm || (rec.ContainsField("Otm") && rec.GetBool("Otm"))) { tabl.AddRow(tsi.Level, new TablRow(rec), true); } } } } } } }
//Запись в клон списка описаний ошибок private void WriteMomentErrors(DaoDb cloneDb) { AddEvent("Запись описаний ошибок"); using (var rec = new DaoRec(cloneDb, "MomentErrors")) foreach (var ed in Source.ErrPool.UsedErrorDescrs) { ed.ToRecordset(rec); } }
//Запись в рекордсет public void ToRecordset(DaoRec rec, int objectId) { rec.AddNew(); rec.Put("ObjectId", objectId); rec.Put("CodeProp", Code); rec.Put("DataType", DataType.ToRussian()); rec.Put("Mean", Mean.String); rec.Update(); }
//Запись в рекордсет public void ToRecordset(DaoRec rec, bool addNew = true) { if (addNew) { rec.AddNew(); } rec.Put("ErrNum", Number); rec.Put("ErrText", Text); rec.Put("Quality", (int)Quality); }
//Сгенерировать значения полей по ряду таблицы internal void GenerateFields(SubRows row, DaoRec rec) { foreach (var field in Fields.Keys) { if (rec.ContainsField(field)) { rec.PutMean(field, Fields[field].Generate(row)); } } }
//Загрузка списка графиков private void LoadGrafics() { AddEvent("Загрузка списка графиков"); using (var rec = new DaoRec(Dir + "Grafics.accdb", "GraficsList")) while (rec.Read()) { var code = rec.GetString("Code"); Grafics.Add(code, new Grafic(code, rec.GetInt("Dimension"), rec.GetString("GraficType").ToGraficType())); } }
//Загрузить параметры из таблицы private void LoadPars(DaoRec rec) { while (rec.Read()) { var par = new TablikCalcParam(this, rec, false, false); ParamsId.Add(par.ParamId, par); ParamsAll.Add(par.Code, par); if (par.CalcOn && !par.IsFatalError) { Params.Add(par.Code, par); } } }
//Запись в рекордсет public void ToRecordset(DaoRec rec, int objectId, string objectCode) { rec.AddNew(); rec.Put("ObjectId", objectId); rec.Put("FullCode", objectCode + "." + Code); rec.Put("CodeSignal", Code); rec.Put("NameSignal", Name); rec.Put("DataType", DataType.ToRussian()); rec.Put("SignalType", SignalType); rec.Put("InfOut", InfOut); rec.Put("InfProp", InfProp); rec.Put("InitialSignals", InitialSignals); rec.Put("Formula", Formula); rec.Update(); }
private void LoadDerivedParams() { AddEvent("Загрузка порожденных параметров"); using (var rec = new DaoRec(Dir + "Compiled.accdb", "DerivedParams")) while (rec.Read()) { var dp = new DerivedParam(rec); DerivedParams.Add(dp.Code, dp); } using (var rec = new DaoRec(Dir + "CalcParams.accdb", "DerivedParamsEdit")) while (rec.Read()) { DerivedParams[rec.GetString("FullCode")].LoadEdited(rec); } }
//Создание фабрики ошибок protected override IMomErrFactory MakeErrFactory() { AddEvent("Создание фабрики ошибок"); var factory = new MomErrFactory(ProviderConnect.Code, MomErrType.Source); using (var rec = new DaoRec(CloneFile, "MomentErrors")) while (rec.Read()) { int quality = rec.GetInt("Quality"); int num = rec.GetInt("ErrNum"); string text = rec.GetString("ErrText"); factory.AddDescr(num, text, quality); } return(factory); }
//Загрузить подпараметры из таблицы private void LoadSubPars(DaoRec rec) { while (rec.Read()) { var par = new TablikCalcParam(this, rec, true, false); SubParamsId.Add(par.ParamId, par); var opar = ParamsId[par.OwnerId]; opar.ParamsId.Add(par.ParamId, par); opar.ParamsAll.Add(par.Code, par); if (par.CalcOn && !par.IsFatalError) { opar.Params.Add(par.Code, par); } } }
public GenSubRow(ModuleGenerator generator, //Ссылка на генератор TablsList dataTabls, //Исходные таблицы для генерации ITablStruct dataTabl, //Таблица - шаблон генерации GenTemplateTable table, //Поля таблицы - шаблона генерации DaoRec rec) //Рекордсет таблицы результатов : base(generator, table, rec) { var subTabl = Rule == null ? dataTabl : ((INodeRTabl)Rule).Check(dataTabls, dataTabl); foreach (var key in Fields.Keys) { Keeper.SetFieldName(key); Fields[key].Check(subTabl); } rec.Put(table.ErrField, Keeper.ErrMess); }
//Чтение Id сигналов клона private void ReadCloneSignals(DaoDb cloneDb) { AddEvent("Чтение сигналов клона"); ClearSignals(); using (var rec = new DaoRec(cloneDb, "Signals")) while (rec.Read()) { var sig = (CloneSignal)AddSignal(rec.GetString("FullCode"), rec.GetString("DataType").ToDataType(), rec.GetString("SignalType").ToSignalType() == SignalType.Uniform ? SignalType.UniformClone : SignalType.Clone, rec.GetString("InfObject"), rec.GetString("InfOut"), rec.GetString("InfProp")); sig.IdInClone = rec.GetInt("SignalId"); } }
public GenBaseRow(ModuleGenerator generator, //Ссылка на генератор GenTemplateTable table, //Описание полей таблицы-шаблона DaoRec rec) //Рекордсет таблицы шаблона генерации { Table = table; Keeper = new GenKeeper(generator); RuleString = rec.GetString(Table.RuleField); if (!RuleString.IsEmpty()) { var parse = Table.IsSub ? new SubRuleParsing(Keeper, Table.RuleField, RuleString) : new RuleParsing(Keeper, Table.RuleField, RuleString); Rule = parse.ResultTree; } foreach (Field field in rec.Recordset.Fields) { var name = field.Name; if (!Table.IsSpecial(name) && !rec.IsNull(name)) { var dataType = field.Type.ToDataType(); if (dataType != DataType.String) { Fields.Add(name, new GenConstNode(rec.GetMean(dataType, name))); } else { string s = rec.GetString(name); if (!s.Contains("[")) { Fields.Add(name, new GenConstNode(null, s)); } else { var fparse = new FieldsParsing(Keeper, name, rec.GetString(name)); var f = (IExprNode)fparse.ResultTree; if (f != null) { Fields.Add(name, f); } } } } } }
//Запись объекта в рекорсеты вместе с сигналами и свойствами public void ToRecordsets(DaoRec recObjects, DaoRec recSignals, DaoRec recProps) { recObjects.AddNew(); recObjects.Put("CodeObject", Code); recObjects.Put("NameObject", Name); recObjects.Put("InfObject", InfObject); int id = recObjects.GetInt("ObjectId"); recObjects.Update(); foreach (var prop in UsedProps.Values) { prop.ToRecordset(recProps, id); } foreach (var sig in UsedSignals) { sig.ToRecordset(recSignals, id, Code); } }
private void LoadTabls() { AddEvent("Загрузка графиков"); using (var db = new DaoDb(Dir + "Grafics.accdb")) { using (var rec = new DaoRec(db, "GraficsList")) while (rec.Read()) { } } AddEvent("Загрузка таблиц"); using (var db = new DaoDb(Dir + "Tables.accdb")) { TablsList.AddDbStructs(db); TablsList.LoadValues(db, false); } }
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); }
//Отметка в клоне считывемых сигналов, получение Id сигналов protected override void PrepareProvider() { AddEvent("Отметка в клоне считывемых сигналов"); using (var rec = new DaoRec(CloneFile, "SELECT SignalId, FullCode, OtmReadClone FROM Signals")) while (rec.Read()) { string code = rec.GetString("FullCode"); var id = rec.GetInt("SignalId"); if (Objects.ContainsKey(code)) { rec.Put("OtmReadClone", true); var ob = Objects[code]; ObjectsId.Add(id, ob); ObjectsList.Add(ob); } else { rec.Put("OtmReadClone", false); } } }
//Запись результатов компиляции internal void SaveCompile() { AddEvent("Сохранение используемых сигналов"); using (var reco = new DaoRec(Dir + "UsedSignals.accdb", "UsedObjects")) using (var recs = new DaoRec(reco.DaoDb, "UsedSignals")) using (var recp = new DaoRec(reco.DaoDb, "UsedObjectsProps")) foreach (var ob in UsedObjects.Values) { ob.ToRecordsets(reco, recs, recp); } AddEvent("Сохранение скомпилированных расчетных параметров"); using (var db = new DaoDb(Dir + "CalParams.accdb")) { using (var rec = new DaoRec(db, "CalcParams")) SavePars(rec); AddEvent("Сохранение скомпилированных расчетных подпараметров"); using (var rec = new DaoRec(db, "CalcSubParams")) SaveSubPars(rec); } AddEvent("Сохранение скомпилированных сгенерированных параметров"); using (var db = new DaoDb(Dir + "Compiled.accdb")) { using (var rec = new DaoRec(db, "GeneratedParams")) SavePars(rec); AddEvent("Сохранение скомпилированных сгенерированных подпараметров"); using (var rec = new DaoRec(db, "GeneratedSubParams")) SaveSubPars(rec); AddEvent("Сохранение порожденных параметров"); using (var rec = new DaoRec(db, "DerivedParams")) foreach (var dp in DerivedParams) { dp.ToRecordset(rec); } } }
//Загрузить список параметров internal void LoadModule() { AddEvent("Загрузка расчетных параметров"); using (var db = new DaoDb(Dir + "CalcParams.accdb")) { using (var rec = new DaoRec(db, "CalcParams")) LoadPars(rec); AddEvent("Загрузка расчетных подпараметров"); using (var rec = new DaoRec(db, "CalcSubParams")) LoadSubPars(rec); } AddEvent("Загрузка сгенерированных параметров"); using (var db = new DaoDb(Dir + "Compiled.accdb")) { using (var rec = new DaoRec(db, "GeneratedParams")) LoadPars(rec); AddEvent("Загрузка сгенерированных подпараметров"); using (var rec = new DaoRec(db, "GeneratedSubParams")) LoadSubPars(rec); } LoadGrafics(); LoadTabls(); }