//Загрузка структур таблиц private void LoadTabls() { AddEvent("Загрузка структур таблиц"); Tabls = new TablsList(); using (var db = new DaoDb(Dir + "Tables.accdb")) Tabls.AddDbStructs(db); }
public void TablsList() { var tdir = Different.GetTestInfoTaskDir() + @"CommonTypes\Tabls\TablsList\"; var tdb = new DaoDb(tdir + "Project1GenData.accdb"); { var tlist = new TablsList(tdb); Assert.IsNotNull(tlist.Tabls); Assert.IsTrue(tlist.Tabls.ContainsKey("T1")); var t = tlist.Tabls["T1"]; Assert.AreEqual("T1", t.Code); Assert.AreEqual(1, t.MaxLevel); Assert.AreEqual(2, t.Fields.Count); Assert.AreEqual(2, t.Fields[0].Count); Assert.AreEqual(2, t.FieldsNums[0].Count); Assert.IsTrue(new TablField("StringField", 0, DataType.String).IsEquals(t.FieldsNums[0][0])); Assert.IsTrue(new TablField("IntField", 1, DataType.Integer).IsEquals(t.FieldsNums[0][1])); Assert.AreEqual(2, t.Fields[1].Count); Assert.AreEqual(2, t.FieldsNums[1].Count); Assert.IsTrue(new TablField("StringSub", 0, DataType.String).IsEquals(t.FieldsNums[1][0])); Assert.IsTrue(new TablField("IntSub", 1, DataType.Integer).IsEquals(t.FieldsNums[1][1])); Assert.IsTrue(tlist.Tabls.ContainsKey("T2")); t = tlist.Tabls["T2"]; Assert.AreEqual("T2", t.Code); Assert.AreEqual(0, t.MaxLevel); Assert.AreEqual(1, t.Fields.Count); Assert.AreEqual(1, t.Fields[0].Count); } }
//Загружает в форму информацию о группе отчетов public void LoadGroup(int groupId) { _groupId = groupId; using (var db = new DaoDb(General.ReporterFile)) { using (var rec = new ReaderAdo(db, "SELECT * FROM GroupReports WHERE GroupId=" + groupId)) if (rec.HasRows()) { GroupCode.Text = rec.GetString("GroupCode"); GroupName.Text = rec.GetString("GroupName"); } Reports.Rows.Clear(); using (var rec = new ReaderAdo(db, "SELECT * FROM ReportsForGroup WHERE GroupId=" + groupId)) while (rec.Read()) { var row = Reports.Rows[Reports.Rows.Add()]; rec.GetToDataGrid("Report", row); rec.GetToDataGrid("ReportName", row); rec.GetToDataGrid("ReportFile", row); rec.GetToDataGrid("ReportTag", row); } } if (Reports.Rows.Count > 0) { Reports.Rows[0].Selected = true; } _isLoaded = true; ChangeReportsRow(); }
//Создание рабочего файла, возвращает ошибку или "" public string MakeWorkFile() { if (State != State.Compiled) { string s = CompileProject(); if (s != "") { return(s); } } StartAtom(Atom.MakeWorkFile); if (State == State.Closed) { AddError("Копилятор уже был закрыт"); } else { try { var f = new FileInfo(_projectFile); string cd = _compiledDir; if (cd.IsEmpty()) { cd = f.DirectoryName; } cd = (cd ?? "").EndsWith("\\") ? cd : cd + "\\"; _workFile = cd + f.Name.Substring(0, f.Name.Length - f.Extension.Length) + "_Work" + f.Extension; Procent = 10; AddEvent("Копирование в новый файл", _workFile); f.CopyTo(_workFile, true); Procent = 30; AddEvent("Очистка расчетных параметров"); using (var db = new DaoDb(_workFile)) { db.Execute("DELETE CalcParams.* FROM CalcParams WHERE CalcOn=False"); db.Execute("DELETE CalcSubParams.* FROM CalcSubParams WHERE CalcOn=False"); Procent = 40; db.Execute("UPDATE CalcParams SET UserExpr1=Null, UserExpr2=Null"); db.Execute("UPDATE CalcSubParams SET UserExpr1=Null, UserExpr2=Null"); Procent = 50; AddEvent("Удаление таблиц"); db.Database.TableDefs.Delete("Signals"); db.Database.TableDefs.Delete("Objects"); db.Database.TableDefs.Delete("TracesTemplates"); } Procent = 60; AddEvent("Сжатие базы", _workFile); DaoDb.Compress(_workFile, 20000000, _tmpDir, 2000); } catch (Exception ex) { AddError("Ошибка при сжатии скомпилированного проекта", ex); } } return(FinishAtom(State.Compiled, State.Signals, "Проект: " + _code + "; Ошибок: " + ErrorsCount + ";" + Different.NewLine + "Параметров: " + CalcParamsId.Count + "; Архивных параметров:" + ArchiveParams.Count + "; Сигналов: " + SignalsInUseCount)); }
//Создание клона источника 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); } }
private void butOK_Click(object sender, EventArgs e) { if (GroupCode.Text.IsEmpty()) { Different.MessageError("Не заполнено имя группы"); return; } ChangeReportsRow(); using (var db = new DaoDb(General.ReporterFile)) { //Сохранение в ReporterData using (var rec = new RecDao(db, "SELECT * FROM GroupReports WHERE GroupId=" + _groupId)) { rec.Put("GroupCode", GroupCode.Text); rec.Put("GroupName", GroupName.Text); ((FormGroupReports)GeneralRep.CommonBook.Forms[ReporterCommand.GroupReports]).EditItem(rec, _groupId); } db.Execute("DELETE * FROM ReportsForGroup WHERE GroupId=" + _groupId); using (var rec = new RecDao(db, "ReportsForGroup")) foreach (DataGridViewRow row in Reports.Rows) { if (!row.IsNewRow) { rec.AddNew(); rec.Put("GroupId", _groupId); rec.PutFromDataGrid("Report", row); rec.PutFromDataGrid("ReportName", row); rec.PutFromDataGrid("ReportFile", row); rec.PutFromDataGrid("ReportTag", row); } } } Close(); }
//Загрузка значений всех таблиц одной базы 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); } } } } } } }
//Сгенерировать 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 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); }
private void UpdateParams(DaoDb db) { AddEvent("Обновление таблиц CalcParams и Projects по ячейкам отчета"); using (var rpr = new RecDao(db, "Projects")) while (rpr.Read()) { string pr = rpr.GetString("ProjectCode2"); if (pr.IsEmpty()) { pr = rpr.GetString("Project"); } Projects[pr].PropsToRecordset(rpr); } using (var rp = new RecDao(db, "CalcParams")) if (rp.HasRows()) { rp.MoveFirst(); while (!rp.EOF) { var proj = Projects[rp.GetString("Project")]; var code = rp.GetString("Code"); var param = proj.Params[code]; param.PropsToRecordset(rp); rp.MoveNext(); } } }
//Добавление в таблицу поля с указанием типа данных public static void SetColumn(this DaoDb db, string tableName, string columnName, DataType dtype) { switch (dtype) { case DataType.String: db.SetColumnString(tableName, columnName); break; case DataType.Real: db.SetColumnDouble(tableName, columnName); break; case DataType.Integer: db.SetColumnLong(tableName, columnName); break; case DataType.Boolean: db.SetColumnBool(tableName, columnName); break; case DataType.Time: db.SetColumnDateTime(tableName, columnName); break; } }
//Загрузка сигналов 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 GenerateParams(string moduleDir) //Каталог модуля { using (StartLog("Генерация параметров", moduleDir)) { try { var dir = moduleDir.EndDir(); var table = new GenTemplateTable("GenParams", "GenRule", "ErrMess", "CalcOn", "ParamId"); var subTable = new GenTemplateTable("GenSubParams", table, "GenRule", "ErrMess", "CalcOn", "SubParamId", "ParamId"); var dataTabls = new TablsList(); AddEvent("Загрузка структуры исходных таблиц", dir + "Tables.accdb"); using (var db = new DaoDb(dir + "Tables.accdb")) { dataTabls.AddDbStructs(db); AddEvent("Загрузка значений из исходных таблиц"); dataTabls.LoadValues(db, true); } AddEvent("Загрузка и проверка генерирующих параметров"); var generator = new ModuleGenerator(Logger, dataTabls, dir + "CalcParams.accdb", table, subTable); generator.Generate(dir + "Compiled.accdb", "GeneratedParams", "GeneratedSubParams"); AddEvent("Генерация завершена", generator.GenErrorsCount + " ошибок"); if (generator.GenErrorsCount != 0) { SetLogResults(generator.GenErrorsCount + " ошибок"); AddCollectResult("Шаблон генерации содержит " + generator.GenErrorsCount + " ошибок"); } } catch (Exception ex) { AddError("Ошибка при генерации параметров", ex); } } }
//Проверка соединения с файлом protected override void ConnectProvider() { if (!DaoDb.Check(DbFile, new[] { "NODES", "ABONENTS" })) { AddError("Недопустимая база данных системы Пролог"); } }
public ResultSaver(string projectProvider, ThreadCalc thread) { _projectProvider = projectProvider; _db = new DaoDb(thread.ResultFile); _rec = new RecDao(_db, "DebugParams"); _recv = new RecDao(_db, "DebugParamsValues"); _thread = thread; }
//Закрытие соединения protected override void DisconnectProvider() { if (Db != null) { Db.Dispose(); Db = null; } }
//Создание таблицы public Tabl(string code, //код таблицы int level, // уровень вложенности DaoDb db) //База данных { Code = code; _db = db; AddLevel(level); }
//Продготовка файла Result protected void PrepareResultFile() { ResultFile = General.ControllerDir + @"Result\Result" + Id + ".accdb"; if (!DaoDb.FromTemplate(General.ControllerDir + "ResultTemplate.accdb", ResultFile, ApplicationType == ApplicationType.Controller ? ReplaceByTemplate.IfNewVersion : ReplaceByTemplate.Always)) { DaoDb.Compress(ResultFile, 400000000, General.TmpDir, 3000); } }
//Загрузить проект projectFile, compileDir - каталог для компиляции public string LoadProject(string projectFile) { StartAtom(Atom.LoadProject, true, projectFile); CountsToZero(); if (State == State.Closed) { AddError("Копилятор уже был закрыт"); } else { try { if (!DaoDb.Check(projectFile, new[] { "CalcParams", "CalcSubParams", "CalcParamsArchive", "Objects", "Signals", "SignalsInUse", "GraficsList", "GraficsValues" })) { AddError("Указан неправильный файл проекта", null, projectFile); } else { using (var db = new DaoDb(projectFile)) { using (var rec = new RecDao(db, "SELECT * FROM Providers WHERE (ProviderCode='HandInputSource') OR (ProviderCode='HandInputSqlSource')")) if (rec.HasRows()) { HandInputSource = rec.GetString("ProviderName"); } using (var sys = new SysTabl(db)) { _code = sys.SubValue("ProjectInfo", "Project"); _name = sys.SubValue("ProjectInfo", "ProjectName"); sys.PutSubValue("ProjectInfo", "HandInputSource", HandInputSource); //ab _objectsFile = sys.Value("ObjectsFile"); if (string.IsNullOrEmpty(_objectsFile)) { _objectsFile = projectFile; } if (_objectsFile != projectFile) { if (!DaoDb.Check(projectFile, new[] { "CalcParams", "CalcSubParams", "CalcParamsArchive", "Objects", "Signals", "SignalsInUse", "GraficsList", "GraficsValues" })) { AddError("В проекте указан неправильный файл списка объектов", null, projectFile); _objectsFile = projectFile; } } //\ab } } _projectFile = projectFile; } } catch (Exception ex) { AddError("Указан неправильный файл проекта", ex, projectFile); } } return(FinishAtom(State.Project, State.Empty, "Проект:" + _code + ", " + _name)); }
//Запись в клон списка описаний ошибок private void WriteMomentErrors(DaoDb cloneDb) { AddEvent("Запись описаний ошибок"); using (var rec = new DaoRec(cloneDb, "MomentErrors")) foreach (var ed in Source.ErrPool.UsedErrorDescrs) { ed.ToRecordset(rec); } }
//Проверка соединения при ошибке public bool Check() { if (!DaoDb.Check(_db, new[] { "NODES", "ABONENTS" })) { Logger.AddError("Не найден или неправильный файл архива программы \"Пролог\"", null, "", Context); return(IsConnected = false); } return(IsConnected = true); }
//Сравнение фалов со сгенерированными параметрами public static void CompareGeneratedParams(string file1, string file2) { using (var db1 = new DaoDb(file1)) using (var db2 = new DaoDb(file2)) { CompareTables(db1, db2, "GeneratedParams", "ParamId"); CompareTables(db1, db2, "GeneratedSubParams", "SubParamId"); } }
//Проверка соединения при ошибке public bool Check() { if (!DaoDb.Check(CloneFile, new[] { "Objects", "Signals", "MomentsValues" })) { Logger.AddError("Не найден или неправильный" + _cloneFileType, null, "", Context); return(IsConnected = false); } return(IsConnected = true); }
//Формирование списка параметров для записи в архив и запись их в CalcParamsArchive private void SaveArchive() { try { using (var db = new DaoDb(_projectFile)) { foreach (var cp in CalcParamsId.Values) { if (cp.Inputs.Count == 0 && cp.CalcOn && cp.ErrMess == "") { new ParamArchive(cp); } } var old = new SetS(); var add = new SetS(); using (var rec = new RecDao(db, "CalcParamsArchive", RecordsetTypeEnum.dbOpenTable)) while (rec.Read()) { var code = rec.GetString("FullCode"); if (ArchiveParams.ContainsKey(code)) { old.Add(code); } else { rec.Put("Del", true); } } db.Execute("DELETE * FROM CalcParamsArchive WHERE Del=True"); foreach (var ap in ArchiveParams.Keys) { if (!old.Contains(ap)) { add.Add(ap); } } using (var rec = new RecDao(db, "CalcParamsArchive", RecordsetTypeEnum.dbOpenTable)) { while (rec.Read()) { ArchiveParams[rec.GetString("FullCode")].ToRecordset(rec, false); } foreach (var p in add.Keys) { ArchiveParams[p].ToRecordset(rec, true); } } } } catch (Exception ex) { AddError("Ошибка сохранения архивных параметров", ex); } }
//Очистка таблиц CalcParams и т.д. private void ClearProject() { AddEvent("Очистка таблиц параметров проекта"); using (var pdb = new DaoDb(_projectFile)) { pdb.Execute("DELETE * FROM CalcSubParams"); pdb.Execute("DELETE * FROM CalcParams"); } DaoDb.Compress(_templateFile, 300000000, _infoTaskDir + @"Tmp\"); }
//Загрузка таблиц private void LoadTables() { AddEvent("Загрузка данных исходных таблиц"); using (var db = new DaoDb(_tablsFile)) { db.ConnectDao(); TablsList = new TablsList(db); TablsList.LoadValues(); } }
public StateSaverAccess(string fileName) { //IEnumerable<string> tables = new[] { TableName }; IEnumerable <string> tables = new[] { MainTableName, SubTableName }; if (DaoDb.Check(fileName, tables)) { _daoDb = new DaoDb(fileName); } }
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { bool stop = true; foreach (var t in App.Threads) { stop &= t.State != State.Calc && t.State != State.FinishCalc && t.State != State.Waiting && t.State != State.FinishWaiting && t.State != State.GetTime; } if (!stop) { Different.MessageInfo("Для закрытия контроллера расчетов нужно чтобы все потоки были остановлены"); e.Cancel = true; } else { try { if (AppInfoWindow != null) { AppInfoWindow.Close(); } } catch {} foreach (var tt in App.Threads) { try { var t = (ThreadController)tt; if (t.HandInputWindow != null && t.HandInputWindow.IsVisible) { var vw = t.HandInputWindow.ValuesVindow; if (vw != null && vw.Visibility == Visibility.Visible) { ((GridInputParam)vw.DataContext).SaveHandValues(); vw.Close(); } t.HandInputWindow.ValuesVindow = null; if (t.HandInputWindow.IsVisible) { t.HandInputWindow.Close(); } } if (t.SetupWindow != null && t.SetupWindow.IsVisible) { t.SetupWindow.Close(); } if (t.ThreadWindow != null && t.ThreadWindow.IsVisible) { t.ThreadWindow.Close(); } t.CloseThread(); } catch {} } try { DaoDb.Compress(General.ControllerFile, 100000000, General.TmpDir); } catch { } } }
public void LoadValues() { var tdir = Different.GetTestInfoTaskDir() + @"CommonTypes\Tabls\LoadValues\"; var tdb = new DaoDb(tdir + "Project2GenData.accdb"); { var tlist = new TablsList(tdb); tlist.LoadValues(); var t = tlist.Tabls["T1"]; var rnums = t.TablValues.SubNums; var rcodes = t.TablValues.SubCodes; Assert.IsTrue(rnums.ContainsKey(1)); Assert.AreEqual("aa", rnums[1].Code); Assert.AreEqual("sssa", rnums[1]["stringfield"].String); Assert.AreEqual(10, rnums[1]["intfield"].Integer); Assert.AreEqual(2, rnums[1].SubCodes.Count); Assert.AreEqual(2, rnums[1].SubNums.Count); Assert.AreEqual("a1", rnums[1].SubNums[1].Code); Assert.AreEqual(2, rnums[1].SubCodes["a2"].Num); Assert.AreEqual("sa1", rnums[1].SubNums[1]["StringSub"].String); Assert.AreEqual("sa2", rnums[1].SubNums[2]["StringSub"].String); Assert.AreEqual("sa1", rnums[1].SubNums[1][0].String); Assert.AreEqual("sa2", rnums[1].SubNums[2][0].String); Assert.AreEqual(11, rnums[1].SubNums[1][1].Integer); Assert.AreEqual(12, rnums[1].SubNums[2][1].Integer); Assert.IsTrue(rcodes.ContainsKey("aa")); Assert.AreEqual(1, rcodes["aa"].Num); Assert.AreEqual("sssa", rcodes["aa"]["stringfield"].String); Assert.AreEqual("sa2", rcodes["aa"].SubNums[2]["StringSub"].String); Assert.IsTrue(rnums.ContainsKey(2)); Assert.AreEqual("bb", rnums[2].Code); Assert.AreEqual("Sssb", rnums[2]["StringField"].String); Assert.AreEqual(20, rnums[2]["IntField"].Integer); Assert.AreEqual(1, rnums[2].SubCodes.Count); Assert.AreEqual(1, rnums[2].SubNums.Count); Assert.AreEqual("b1", rnums[2].SubNums[1].Code); Assert.AreEqual("sb1", rnums[2].SubNums[1]["StringSub"].String); Assert.IsTrue(rnums.ContainsKey(3)); Assert.AreEqual("cc", rnums[3].Code); Assert.AreEqual("SSSC", rnums[3]["StringField"].String); Assert.AreEqual(30, rnums[3]["IntField"].Integer); Assert.AreEqual(3, rnums[3].SubCodes.Count); Assert.AreEqual(3, rnums[3].SubNums.Count); Assert.AreEqual("c2", rnums[3].SubNums[2].Code); Assert.AreEqual("sc3", rnums[3].SubNums[3]["StringSub"].String); Assert.AreEqual(33, rnums[3].SubNums[3]["IntSub"].Integer); t = tlist.Tabls["T2"]; Assert.AreEqual(0, t.TablValues.SubNums.Count); Assert.AreEqual(0, t.TablValues.SubCodes.Count); } }
//Загрузка таблиц private TablsList Load(string prefix) { var tabls = new TablsList(); using (var db = new DaoDb(TestLib.CopyFile("Generator", "GenData.accdb", "Check" + prefix + ".accdb"))) { tabls.AddStruct(db, "Tabl", "SubTabl", "SubSubTabl"); tabls.AddDbStructs(db); } return(tabls); }