예제 #1
0
        //Сохранение старого файла истории и добавление нового
        public void UpdateHistory(bool openAfterUpdate)
        {
            try
            {
                if (LastHistoryId > 300000)
                {
                    _reasonUpdate = "Старый файл истории содержит более 300000 записей";
                }

                if (_reasonUpdate != null && HistoryIsStable)
                {
                    CloseHistory();
                    Thread.Sleep(1500);
                    DaoDb.FromTemplate(_historyTemplate, _historyFile, ReplaceByTemplate.Always, true);
                    Thread.Sleep(1500);
                    if (openAfterUpdate)
                    {
                        OpenHistoryRecs();
                    }
                }
            }
            catch (Exception ex)
            {
                AddErrorAboutHistory(ex);
            }
        }
예제 #2
0
 //Открытие рекордсетов истории и добавление в историю первой записи после создания
 private void OpenHistoryRecs()
 {
     HistoryIsStable = false;
     HistoryDb       = new DaoDb(_historyFile);
     History         = new RecDao(HistoryDb, "History");
     SuperHistory    = new RecDao(HistoryDb, "SuperHistory");
     if (_useSubHistory)
     {
         SubHistory = new RecDao(HistoryDb, "SubHistory");
     }
     if (_useErrorsList)
     {
         ErrorsRec = new RecDao(HistoryDb, "ErrorsList");
     }
     if (_reasonUpdate != null)
     {
         SubHistoryId = 0;
         try
         {
             StartLog("Создание нового файла истории", _reasonUpdate).Dispose();
             _reasonUpdate = null;
         }
         catch (Exception ex)
         {
             AddErrorAboutHistory(ex);
         }
         LastHistoryId = 0;
     }
 }
예제 #3
0
 //Задание файла истории
 public AccessHistory(Logger logger,          //логгер
                      string historyFile,     //файл истории
                      string historyTemplate) //шаблон для файла истории
 {
     try
     {
         Logger           = logger;
         _historyFile     = historyFile;
         _historyTemplate = historyTemplate;
         if (_historyFile != null)
         {
             if (_historyTemplate != null &&
                 DaoDb.FromTemplate(_historyTemplate, _historyFile, ReplaceByTemplate.IfNewVersion, true))
             {
                 _updateReason = "Новая версия файла истории";
             }
             OpenHistoryRecs();
         }
     }
     catch (OutOfMemoryException) { }
     catch (Exception ex)
     {
         AddErrorAboutHistory(ex);
     }
 }
예제 #4
0
 public SysTabl(string dbFile,          //dbFile - файл базы данных
                bool useSubTabl = true) //useSubTabl - использовать SysSubTabl
 {
     _db    = new DaoDb(dbFile);
     _useDb = false;
     OpenTables(useSubTabl);
 }
예제 #5
0
        //Сохранение старого файла истории и добавление нового
        public void UpdateHistory()
        {
            try
            {
                if (_historyId > 300000)
                {
                    _updateReason = "Старый файл истории содержит более 300000 записей";
                    _historyId    = 0;
                }

                if (_updateReason != null)
                {
                    Close();
                    Thread.Sleep(1500);
                    DaoDb.FromTemplate(_historyTemplate, _historyFile, ReplaceByTemplate.Always, true);
                    Thread.Sleep(1500);
                    OpenHistoryRecs();
                }
            }
            catch (OutOfMemoryException) { }
            catch (Exception ex)
            {
                AddErrorAboutHistory(ex);
            }
        }
예제 #6
0
 //Закрывает историю
 public void Close()
 {
     try
     {
         if (_subHistory != null)
         {
             _subHistory.Dispose();
         }
         if (_history != null)
         {
             _history.Dispose();
         }
         if (_superHistory != null)
         {
             _superHistory.Dispose();
         }
         if (_errorsRec != null)
         {
             _errorsRec.Dispose();
         }
         if (HistoryDb != null)
         {
             HistoryDb.Dispose();
         }
         _subHistory   = null;
         _history      = null;
         _superHistory = null;
         _errorsRec    = null;
         HistoryDb     = null;
     }
     catch { }
 }
예제 #7
0
 public SysTabl(DaoDb db,               // db - соединение с базой данных
                bool useSubTabl = true) //useSubTabl - использовать SysSubTabl
 {
     _db    = db;
     _useDb = true;
     OpenTables(useSubTabl);
 }
예제 #8
0
 //db - база Access, stSql - запрос
 public ReaderAdo(DaoDb db, string stSql)
 {
     _useDb       = true;
     DatabaseType = DatabaseType.Access;
     DaoDb        = db.ConnectAdo();
     OpenReader(stSql, db.Connection);
 }
예제 #9
0
 //Метод выдает список индексов данной таблицы или сообщает о том, есть ли в ней данный индекс
 public bool RunOverIndexList(string dbFile, string table, string index = "")
 {
     try
     {
         string indexesS    = "";
         bool   fieldFinded = false;
         using (var db = new DaoDb(dbFile))
         {
             db.ConnectDao();
             foreach (Index ind in db.Database.TableDefs[table].Indexes)
             {
                 indexesS += ind.Name + "\n";
                 if (ind.Name == index)
                 {
                     fieldFinded = true;
                 }
             }
         }
         if (index == "")
         {
             MessageBox.Show(indexesS);
         }
         else
         {
             return(fieldFinded);
         }
         return(false);
     }
     catch (Exception)
     { return(false); }
 }
예제 #10
0
 public AdoReader(DaoDb db,     //база Access
                  string stSql) //запрос
 {
     _useDb       = true;
     DatabaseType = DatabaseType.Access;
     DaoDb        = db.ConnectAdo();
     OpenReader(stSql, db.Connection);
 }
예제 #11
0
 //db - файл accdb, stSql - запрос
 public ReaderAdo(string db, string stSql)
 {
     _useDb       = false;
     DatabaseType = DatabaseType.Access;
     if (stSql.IsEmpty() || db.IsEmpty())
     {
         throw new NullReferenceException("Путь к файлу базы данных не может быть пустой строкой или null");
     }
     DaoDb = new DaoDb(db).ConnectAdo();
     OpenReader(stSql, DaoDb.Connection);
 }
예제 #12
0
 //Сохранение объектов из словаря в таблицу
 //Старые записи удаляются, только если их нет в словаре, иначе просто обновляются
 public static void SaveDicToTable <T>(string dbFile,             //dbFile - файл базы данных
                                       DicS <T> dic,              //Словарь
                                       string tabl,               //Имя таблицы
                                       string keyField  = "Code", //keyField - ключевое поле
                                       string keyField2 = "",     //если ключ по двум полям, то второе ключевое поле
                                       string delField  = "Del")  //delField - поле отметки для удаления,
     where T : ISaveToRecDao
 {
     using (var db = new DaoDb(dbFile))
         db.SaveDicToTable(dic, tabl, keyField, keyField2, delField);
 }
예제 #13
0
파일: DaoDb.cs 프로젝트: martugin/InfoTask2
 //Проверяет, что файл file является файлом типа fileType (в SysSubTab параметр FileOptions\FileType)
 //Также производится проверка на содержание в файле списка указанных таблиц tables
 //Возвращает true, если проверка прошла удачно
 public static bool Check(string file, string fileType, IEnumerable <string> tables = null)
 {
     try
     {
         if (file.IsEmpty() || !new FileInfo(file).Exists)
         {
             return(false);
         }
         if (!fileType.IsEmpty())
         {
             using (var daodb = new DaoDb(file))
                 using (var sys = new SysTabl(daodb))
                     if (sys.SubValue("FileOptions", "FileType") != fileType)
                     {
                         return(false);
                     }
         }
         var en = new DBEngine();
         var db = en.OpenDatabase(file);
         try
         {
             var missing = new SortedSet <string>();
             if (tables != null)
             {
                 foreach (var table in tables)
                 {
                     missing.Add(table);
                 }
                 foreach (var t in db.TableDefs)
                 {
                     string s = ((TableDef)t).Name;
                     if (missing.Contains(s))
                     {
                         missing.Remove(s);
                     }
                 }
             }
             return(missing.Count == 0);
         }
         finally
         {
             try
             {
                 try { db.Close(); } catch { }
                 db = null;
                 en = null;
                 GC.Collect();
             }
             catch { }
         }
     }
     catch { return(false); }
 }
예제 #14
0
 //Закрытие
 public void Dispose()
 {
     try { if (_isEdit)
           {
               Recordset.Update();
           }
     }
     catch { }
     try
     {
         Recordset.Close();
         Recordset = null;
     }
     catch { }
     if (!_useDb)
     {
         DaoDb.Dispose();
     }
 }
예제 #15
0
 //Закрытие рекордсета, полная очистка ресурсов
 public void Dispose()
 {
     try { Command.Dispose(); } catch { }
     try
     {
         Reader.Close();
         Reader.Dispose();
     } catch { }
     try
     {
         if (DatabaseType == DatabaseType.SqlServer)
         {
             _connection.Close();
         }
     }
     catch { }
     if (!_useDb && DatabaseType == DatabaseType.Access)
     {
         DaoDb.Dispose();
     }
 }
예제 #16
0
 //Открытие рекордсетов истории и добавление в историю первой записи после создания
 private void OpenHistoryRecs()
 {
     HistoryDb     = new DaoDb(_historyFile);
     _subHistory   = new DaoRec(HistoryDb, "SubHistory");
     _history      = new DaoRec(HistoryDb, "History");
     _superHistory = new DaoRec(HistoryDb, "SuperHistory");
     _errorsRec    = new DaoRec(HistoryDb, "ErrorsList");
     if (_updateReason != null)
     {
         try
         {
             Logger.StartLog(0, 0, "Создание нового файла истории", _updateReason).Finish();
             _updateReason = null;
         }
         catch (OutOfMemoryException) { }
         catch (Exception ex)
         {
             AddErrorAboutHistory(ex);
         }
         _historyId = 0;
     }
 }
예제 #17
0
 //Задание файла истории historyFile и файла его шаблона historyTemplate, открытие истории, useSubHistory - использовать SubHistory
 public void OpenHistory(string historyFile = null, string historyTemplate = null, bool useSubHistory = false, bool useErrorsList = true)
 {
     try
     {
         _historyFile     = historyFile;
         _historyTemplate = historyTemplate;
         _useSubHistory   = useSubHistory;
         _useErrorsList   = useErrorsList;
         if (_historyFile != null)
         {
             if (_historyTemplate != null && DaoDb.FromTemplate(_historyTemplate, _historyFile, ReplaceByTemplate.IfNewVersion, true))
             {
                 _reasonUpdate = "Новая версия файла истории";
             }
             OpenHistoryRecs();
         }
     }
     catch (Exception ex)
     {
         AddErrorAboutHistory(ex);
     }
 }
예제 #18
0
        //Запуск открытия файла
        private string RunOpenFile(string initial)
        {
            var op = new OpenFileDialog
            {
                AddExtension    = true,
                CheckFileExists = true,
                DefaultExt      = Extension,
                Multiselect     = false,
                Title           = DialogTitle,
                Filter          = DialogFilter
            };

            op.ShowDialog();
            if (op.FileName.IsEmpty())
            {
                return(initial);
            }
            if (FileTables != null && !DaoDb.Check(op.FileName, FileTables))
            {
                Different.MessageError(ErrorMessage, op.FileName);
                return(initial);
            }
            return(op.FileName);
        }
예제 #19
0
 //Открывает рекордсет, при закрытии база данных будет закрыта
 public DaoRec(string file, string stSql, object type = null, object options = null, object lockEdit = null)
 {
     _useDb = false;
     DaoDb  = new DaoDb(file).ConnectDao();
     Open(DaoDb.Database, stSql, type, options, lockEdit);
 }
예제 #20
0
 //Сохранение объектов из словаря dic в таблицу tabl, keyField - ключевое поле, если ключ по двум полям, то keyField2 - второе ключевое поле
 //delField - поле отметки для удаления, dbFile - файл базы данных
 //Старые записи удаляются, только если их нет в словаре, иначе просто обновляются
 public static void SaveDicToTable <T>(string dbFile, DicS <T> dic, string tabl, string keyField = "Code", string keyField2 = "", string delField = "Del") where T : ISaveToRecDao
 {
     using (var db = new DaoDb(dbFile))
         db.SaveDicToTable(dic, tabl, keyField, keyField2, delField);
 }
예제 #21
0
 // db - соединение с базой данных, useSubTabl - использовать SysSubTabl
 public SysTabl(DaoDb db, bool useSubTabl = true)
 {
     _db    = db;
     _useDb = true;
     OpenTables(useSubTabl);
 }
예제 #22
0
 //dbFile - файл базы данных, useSubTabl - использовать SysSubTabl
 public SysTabl(string dbFile, bool useSubTabl = true)
 {
     _db    = new DaoDb(dbFile);
     _useDb = false;
     OpenTables(useSubTabl);
 }
예제 #23
0
 //Открывает рекордсет, при закрытии база данных не будет закрыта
 public DaoRec(DaoDb daodb, string stSql, object type = null, object options = null, object lockEdit = null)
 {
     _useDb = true;
     DaoDb  = daodb.ConnectDao();
     Open(daodb.Database, stSql, type, options, lockEdit);
 }