void ChangePassword() { logger.Info("Отправляем новый пароль на сервер..."); if (Session.IsSaasConnection) { ISaaSService svc = Session.GetSaaSService(); if (!svc.changeUserPasswordByLogin(entryLogin.Text, Session.Account, entryPassword.Text)) { logger.Error("Ошибка установки пароля!"); } else { logger.Info("Пароль изменен. Ok"); } } else { string sql; try { QSMain.CheckConnectionAlive(); sql = "SET PASSWORD FOR @login = PASSWORD(@password)"; MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@login", entryLogin.Text); cmd.Parameters.AddWithValue("@password", entryPassword.Text); cmd.ExecuteNonQuery(); cmd.CommandText = "SET PASSWORD FOR @login @'localhost' = PASSWORD(@password)"; cmd.ExecuteNonQuery(); logger.Info("Пароль изменен. Ok"); } catch (Exception ex) { logger.Error(ex, "Ошибка установки пароля!"); QSMain.ErrorMessage(this, ex); } } }
public bool TestUserExistByLogin(bool CreateNotExist) { logger.Info("Проверка наличия пользователя в базе..."); if (loadedInConstructor) { logger.Warn("Информация о пользователе загружена в момент входа, это старый метод, его вызов не требуется."); return(true); } try { QSMain.CheckConnectionAlive(); bool Exist = false; string sql = "SELECT COUNT(*) AS cnt FROM users WHERE login = @login"; MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@login", login); using (var rdr = cmd.ExecuteReader()) { rdr.Read(); Exist = (rdr ["cnt"].ToString() != "0"); } if (CreateNotExist && !Exist) { CreateUserRow(); Exist = true; } return(Exist); } catch (Exception ex) { logger.ErrorException("Ошибка проверки пользователя!", ex); return(false); } }
/// <summary>Заполняет комбобокс уникальными значениями поля /// </summary> public static void ComboFillUniqueValue(ComboBox combo, string tablename, string fieldname, bool SetDefault = true) { ((ListStore)combo.Model).Clear(); logger.Info("Запрос всех значений {0}.{1} ...", tablename, fieldname); try { QSMain.CheckConnectionAlive(); int count = 0; string sql = "SELECT DISTINCT " + fieldname + " FROM " + tablename; DbCommand cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = sql; using (DbDataReader rdr = cmd.ExecuteReader()) { while (rdr.Read()) { if (rdr[0] != DBNull.Value) { combo.AppendText(rdr.GetString(0)); count++; } } } if (SetDefault && count == 1) { combo.Active = 0; } logger.Info("Ok"); } catch (Exception ex) { logger.Error(ex, "Ошибка получения списка уникальных значений!"); } }
public void UpdateUserInfoByLogin() { logger.Info("Чтение информации о пользователе..."); if (loadedInConstructor) { logger.Warn("Информация о пользовтеле загружена в момент входа, вызов функции не требуется при старте программы. Если нужно обновить информацию используйте метод LoadUserInfo"); return; } try { string sql = "SELECT * FROM users WHERE login = @login"; QSMain.CheckConnectionAlive(); MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@login", login); using (var rdr = cmd.ExecuteReader()) { rdr.Read(); Name = rdr ["name"].ToString(); Id = rdr.GetInt32("id"); Admin = rdr.GetBoolean(QSMain.AdminFieldName); Permissions = new Dictionary <string, bool> (); foreach (KeyValuePair <string, UserPermission> Right in QSMain.ProjectPermission) { string FieldName = Right.Value.DataBaseName; Permissions.Add(Right.Key, rdr.GetBoolean(FieldName)); } } Email = tryGetUserEmail(); } catch (Exception ex) { logger.ErrorException("Ошибка чтения информации о пользователе!", ex); } }
protected void OnDestroyed(object sender, EventArgs e) { if (RefChanged) { QSMain.OnReferenceUpdated(TableRef); } }
protected void OnButtonOkClicked(object sender, EventArgs e) { NewPassword = entryPassword.Text; if (WorkMode == Mode.Manual) { return; } if (Session.IsSaasConnection) { ISaaSService svc = Session.GetSaaSService(); if (svc == null || !svc.changeUserPasswordBySessionId(Session.SessionId, NewPassword)) { logger.Error("Ошибка установки пароля!"); return; } logger.Info("Пароль изменен."); } else { logger.Info("Отправляем новый пароль на сервер..."); string sql; sql = "SET PASSWORD = PASSWORD('" + entryPassword.Text + "')"; try { QSMain.CheckConnectionAlive(); DbCommand cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = sql; cmd.ExecuteNonQuery(); logger.Info("Пароль изменен. Ok"); } catch (Exception ex) { logger.Error(ex, "Ошибка установки пароля!"); QSMain.ErrorMessage(this, ex); } } }
protected void OnRemoveActionActivated(object sender, System.EventArgs e) { TreeIter iter; treeviewref.Selection.GetSelected(out iter); SelectedID = (int)filter.GetValue(iter, 0); bool result; if (QSMain.IsOrmDeletionConfigered) { result = QSMain.OnOrmDeletion(TableRef, SelectedID); } else { Delete winDelete = new Delete(); result = winDelete.RunDeletion(TableRef, SelectedID); winDelete.Destroy(); } if (result) { UpdateList(); RefChanged = true; } }
/// <summary>Заполняет комбобокс уникальными значениями поля /// </summary> public static ListStore CreateWithUniqueValue(string tablename, string fieldname) { logger.Info("Запрос всех значений {0}.{1} ...", tablename, fieldname); ListStore list = new ListStore(typeof(string)); try { string sql = "SELECT DISTINCT " + fieldname + " FROM " + tablename; QSMain.CheckConnectionAlive(); DbCommand cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = sql; using (DbDataReader rdr = cmd.ExecuteReader()) { while (rdr.Read()) { if (rdr[0] != DBNull.Value) { list.AppendValues(rdr.GetString(0)); } } } logger.Info("Ok"); } catch (Exception ex) { logger.Error(ex, "Ошибка получения списка уникальных значений!"); } return(list); }
protected void OnButtonOkClicked(object sender, EventArgs e) { NewPassword = entryPassword.Text; if (WorkMode == Mode.Manual) { return; } if (Session.IsSaasConnection) { ISaaSService svc = Session.GetSaaSService(); if (svc == null || !svc.changeUserPasswordBySessionId(Session.SessionId, NewPassword)) { logger.Error("Ошибка установки пароля!"); return; } logger.Info("Пароль изменен."); } else { logger.Info("Отправляем новый пароль на сервер..."); string sql; try { var reg = new Regex("password=(.+?)(;|$)"); QSMain.CheckConnectionAlive(); DbCommand cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = "SELECT version();"; var version = (string)cmd.ExecuteScalar(); logger.Debug("Server version: " + version); if (version.EndsWith("-MariaDB")) { sql = "SET PASSWORD = PASSWORD('" + entryPassword.Text + "')"; } else if (Version.Parse(version) >= new Version(8, 0, 13)) { var match = reg.Match(QSMain.ConnectionString); string oldPassword = match.Success ? match.Groups[1].Value : null; sql = $"SET PASSWORD='******' REPLACE '{oldPassword}';"; } else { sql = "SET PASSWORD = PASSWORD('" + entryPassword.Text + "')"; } cmd.CommandText = sql; cmd.ExecuteNonQuery(); logger.Info("Пароль изменен. Ok"); //Заменяем пароль с текущей строке одключения, для того чтобы при переподключении не было ошибок //и чтобы при смене пароля еще раз был текущий пароль. QSMain.ConnectionString = reg.Replace(QSMain.ConnectionString, $"password={entryPassword.Text};"); } catch (Exception ex) { logger.Error(ex, "Ошибка установки пароля!"); QSMain.ErrorMessage(this, ex); } } }
public static void SubscribeToUnhadledExceptions() { AppDomain.CurrentDomain.UnhandledException += delegate(object sender, UnhandledExceptionEventArgs e) { logger.Fatal((Exception)e.ExceptionObject, "Поймано необработаное исключение в Application Domain."); QSMain.ErrorMessage((Exception)e.ExceptionObject); }; GLib.ExceptionManager.UnhandledException += delegate(GLib.UnhandledExceptionArgs a) { logger.Fatal((Exception)a.ExceptionObject, "Поймано необработаное исключение в GTK."); QSMain.ErrorMessage((Exception)a.ExceptionObject); }; }
protected void OnButtonSaveOrdinalClicked(object sender, EventArgs e) { int[] Numbers = new int[RefListStore.IterNChildren()]; int n = 0; foreach (object[] row in RefListStore) { Numbers[n] = (int)row[OrdinalColumn]; n++; } Array.Sort(Numbers); string sql = String.Format("UPDATE {0} SET {1} = @ord WHERE id = @id", TableRef, _OrdinalField); DbCommand cmd; DbTransaction trans = QSMain.ConnectionDB.BeginTransaction(); QSMain.CheckConnectionAlive(); try { n = 0; cmd = QSMain.ConnectionDB.CreateCommand(); DbParameter paramId = cmd.CreateParameter(); paramId.ParameterName = "@id"; cmd.Parameters.Add(paramId); DbParameter paramOrd = cmd.CreateParameter(); paramOrd.ParameterName = "@ord"; cmd.Parameters.Add(paramOrd); cmd.CommandText = sql; cmd.Prepare(); foreach (object[] row in RefListStore) { if (Numbers[n] != (int)row[OrdinalColumn]) { paramId.Value = row[0]; paramOrd.Value = Numbers[n]; cmd.ExecuteNonQuery(); } n++; } trans.Commit(); UpdateList(); } catch (Exception ex) { trans.Rollback(); logger.Error(ex, "Ошибка записи последовательности в {0}!", nameRef); QSMain.ErrorMessage(this, ex); } }
void ChangePassword() { logger.Info("Отправляем новый пароль на сервер..."); if (Session.IsSaasConnection) { ISaaSService svc = Session.GetSaaSService(); if (!svc.changeUserPasswordByLogin(entryLogin.Text, Session.Account, entryPassword.Text)) { logger.Error("Ошибка установки пароля!"); } else { logger.Info("Пароль изменен. Ok"); } } else { string sql; try { QSMain.CheckConnectionAlive(); sql = "SELECT version();"; MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB); var version = (string)cmd.ExecuteScalar(); logger.Debug("Server version: " + version); if (!version.EndsWith("-MariaDB") && Version.Parse(version) >= new Version(8, 0, 13)) { cmd.CommandText = "ALTER USER @login IDENTIFIED BY @password;"; cmd.Parameters.AddWithValue("@login", entryLogin.Text); cmd.Parameters.AddWithValue("@password", entryPassword.Text); cmd.ExecuteNonQuery(); } else { cmd.CommandText = "SET PASSWORD FOR @login = PASSWORD(@password)"; cmd.Parameters.AddWithValue("@login", entryLogin.Text); cmd.Parameters.AddWithValue("@password", entryPassword.Text); cmd.ExecuteNonQuery(); cmd.CommandText = "SET PASSWORD FOR @login @'localhost' = PASSWORD(@password)"; cmd.ExecuteNonQuery(); } logger.Info("Пароль изменен. Ok"); } catch (Exception ex) { logger.Error(ex, "Ошибка установки пароля!"); QSMain.ErrorMessage(this, ex); } } }
bool RenameLogin() { logger.Info("Переименование учетной записи на сервере..."); try { QSMain.CheckConnectionAlive(); //Проверка существует ли логин string sql = "SELECT COUNT(*) from mysql.user WHERE USER = @login"; MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@login", entryLogin.Text); try { if (Convert.ToInt32(cmd.ExecuteScalar()) > 0) { string Message = "Пользователь с логином " + entryLogin.Text + " уже существует на сервере. " + "Переименование невозможно."; MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Error, ButtonsType.Ok, Message); md.Destroy(); return(false); } } catch (MySqlException ex) { if (ex.Number == 1045) { logger.Warn(ex, "Нет доступа к таблице пользователей, пробую создать пользователя в слепую."); } else { logger.Error(ex, "Ошибка чтения таблицы пользователей!"); QSMain.ErrorMessage(this, ex); return(false); } } //Переименование пользователя. sql = "RENAME USER @old_login TO @new_login, @old_login @'localhost' TO @new_login @'localhost'"; cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@old_login", OriginLogin); cmd.Parameters.AddWithValue("@new_login", entryLogin.Text); cmd.ExecuteNonQuery(); logger.Info("Ok"); return(true); } catch (Exception ex) { logger.Error(ex, "Ошибка переименования пользователя!"); QSMain.ErrorMessage(this, ex); return(false); } }
protected void UpdateList() { logger.Info("Получаем таблицу справочника " + nameRef + "..."); entryFilter.Text = ""; QSMain.CheckConnectionAlive(); try { string sql = SqlSelect.Replace("@tablename", TableRef); DbCommand cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = sql; using (DbDataReader rdr = cmd.ExecuteReader()) { RefListStore.Clear(); object[] Values = new object[RefListStore.NColumns]; while (rdr.Read()) { Values[0] = rdr.GetInt32(0); object[] Fields = new object[rdr.FieldCount]; rdr.GetValues(Fields); for (int i = 1; i < Columns.Count; i++) { Values[i] = String.Format(Columns[i].DisplayFormat, Fields); } if (_OrdinalField != "") { Values[OrdinalColumn] = rdr.GetInt32(rdr.GetOrdinal(_OrdinalField)); } RefListStore.AppendValues(Values); } } logger.Info("Ok"); } catch (Exception ex) { logger.Error(ex, "Ошибка получения таблицы!"); QSMain.ErrorMessage(this, ex); } OnTreeviewrefCursorChanged((object)treeviewref, EventArgs.Empty); TestOrdinalChanged(); }
void UpdateUsers() { if (!QSMain.TestConnection()) { return; } QSMain.CheckConnectionAlive(); logger.Info("Получаем таблицу пользователей..."); string sql = "SELECT * FROM users "; if (!chkShowInactive.Active) { sql += " WHERE deactivated = 0"; } MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB); MySqlDataReader rdr = cmd.ExecuteReader(); UsersListStore.Clear(); while (rdr.Read()) { bool deactivated = false; try { deactivated = DBWorks.GetBoolean(rdr, "deactivated", false); } catch { logger.Warn("В базе отсутствует поле deactivated!"); } UsersListStore.AppendValues(int.Parse(rdr ["id"].ToString()), rdr ["login"].ToString(), rdr ["name"].ToString(), (bool)rdr ["admin"], deactivated, deactivated ? "grey" : "black"); } rdr.Close(); logger.Info("Ok"); OnTreeviewUsersCursorChanged(null, null); }
public bool StartProgressBar(Thread thread, int seconds) { progressbar1.Adjustment.Upper = seconds; double percentInSecond = 1.0 / 20.0; for (int i = 0; i < seconds * 20; i++) { if (!thread.IsAlive) { return(false); } progressbar1.Adjustment.Value += percentInSecond; Thread.Sleep(50); QSMain.WaitRedraw(); } if (thread.IsAlive) { thread.Abort(); } logger.Warn("Таймаут ожидания потока с проверкой..."); return(true); }
protected void OnButtonDeleteClicked(object sender, EventArgs e) { TreeIter iter; treeviewUsers.Selection.GetSelected(out iter); int itemid = (int)UsersListStore.GetValue(iter, 0); string loginname = UsersListStore.GetValue(iter, 1).ToString(); bool result; if (QSMain.IsOrmDeletionConfigered) { result = QSMain.OnOrmDeletion("users", itemid); } else { Delete winDel = new Delete(); result = winDel.RunDeletion("users", itemid); winDel.Destroy(); } if (result) { if (QSSaaS.Session.IsSaasConnection) { logger.Info("Удаляем пользователя в облаке..."); QSSaaS.ISaaSService svc = QSSaaS.Session.GetSaaSService(); if (!svc.changeBaseAccessFromProgram(QSSaaS.Session.SessionId, loginname, QSSaaS.Session.SaasBaseName, false)) { logger.Error("Ошибка удаления доступа к базе на сервере SaaS."); } if (svc.UserAccessBaseCount(QSSaaS.Session.SessionId, QSSaaS.Session.Account, loginname) == 0) { if (MessageDialogWorks.RunQuestionDialog($"У пользователя '{loginname}' на сервисе QS:Облако больше не осталось баз данных, к которым он имеет доступ. Удалить пользователя с QS:Облако тоже?")) { if (!svc.DeleteCloudUser(QSSaaS.Session.SessionId, QSSaaS.Session.Account, loginname)) { var text = "Удаления пользователя с QS:Облако не произошло."; logger.Error(text); MessageDialogWorks.RunErrorDialog(text); } } } } else { logger.Info("Удаляем пользователя MySQL..."); string sql; sql = "DROP USER @login, @login @'localhost'"; try { QSMain.CheckConnectionAlive(); MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@login", loginname); cmd.ExecuteNonQuery(); logger.Info("Пользователь удалён. Ok"); if (QSMain.User.Id == itemid) { MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.Close, "Был удален пользователь, под которым Вы подключились к базе данных, чтобы недопустить некорректных операций программа закроется. Зайдите в программу от имени другого пользователя."); md.Run(); md.Destroy(); Environment.Exit(0); } } catch (Exception ex) { logger.Error(ex, "Ошибка удаления пользователя!"); QSMain.ErrorMessage(this, ex); } } } UpdateUsers(); }
int FillObjects(string Table, TreeIter root, TableInfo.Params ParametersIn) { TreeIter DeleteIter, ClearIter, GroupIter, ItemIter; int Totalcount = 0; int DelCount = 0; int ClearCount = 0; int GroupCount; DbCommand cmd; DbDataReader rdr; QSMain.CheckConnectionAlive(); logger.Debug("Поиск зависимостей для таблицы {0}", Table); if (!QSMain.ProjectTables.ContainsKey(Table)) { ErrorString = "Нет описания для таблицы " + Table; logger.Error(ErrorString); ErrorHappens = true; return(0); } if (QSMain.ProjectTables[Table].DeleteItems.Count > 0) { if (!ObjectsTreeStore.IterIsValid(root)) { DeleteIter = ObjectsTreeStore.AppendNode(); } else { DeleteIter = ObjectsTreeStore.AppendNode(root); } foreach (KeyValuePair <string, TableInfo.DeleteDependenceItem> pair in QSMain.ProjectTables[Table].DeleteItems) { GroupCount = 0; if (!QSMain.ProjectTables.ContainsKey(pair.Key)) { ErrorString = String.Format("Зависимость удаления у таблицы {1} ссылается на таблицу {0} описания для которой нет.", pair.Key, Table); logger.Error(ErrorString); ErrorHappens = true; return(0); } string sql = QSMain.ProjectTables[pair.Key].SqlSelect + pair.Value.sqlwhere; cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = sql; AddParameters(cmd, pair.Value.SqlParam, ParametersIn); rdr = cmd.ExecuteReader(); if (!rdr.HasRows) { rdr.Close(); continue; } GroupIter = ObjectsTreeStore.AppendNode(DeleteIter); int IndexIntParam = 0; int IndexStrParam = 0; if (QSMain.ProjectTables[pair.Key].PrimaryKey.ParamInt != "") { IndexIntParam = rdr.GetOrdinal(QSMain.ProjectTables[pair.Key].PrimaryKey.ParamInt); } if (QSMain.ProjectTables[pair.Key].PrimaryKey.ParamStr != "") { IndexStrParam = rdr.GetOrdinal(QSMain.ProjectTables[pair.Key].PrimaryKey.ParamStr); } List <object[]> ReadedData = new List <object[]>(); while (rdr.Read()) { object[] Fields = new object[rdr.FieldCount]; rdr.GetValues(Fields); ReadedData.Add(Fields); } rdr.Close(); foreach (object[] row in ReadedData) { ItemIter = ObjectsTreeStore.AppendValues(GroupIter, String.Format(QSMain.ProjectTables[pair.Key].DisplayString, row)); if (QSMain.ProjectTables[pair.Key].DeleteItems.Count > 0 || QSMain.ProjectTables[pair.Key].ClearItems.Count > 0) { TableInfo.Params OutParam = new TableInfo.Params(); if (QSMain.ProjectTables[pair.Key].PrimaryKey.ParamInt != "") { OutParam.ParamInt = Convert.ToInt32(row[IndexIntParam]); } if (QSMain.ProjectTables[pair.Key].PrimaryKey.ParamStr != "") { OutParam.ParamStr = row[IndexStrParam].ToString(); } Totalcount += FillObjects(pair.Key, ItemIter, OutParam); } GroupCount++; Totalcount++; DelCount++; } ObjectsTreeStore.SetValues(GroupIter, QSMain.ProjectTables[pair.Key].ObjectsName + "(" + GroupCount.ToString() + ")"); } if (DelCount > 0) { ObjectsTreeStore.SetValues(DeleteIter, String.Format("Будет удалено ({0}/{1}) объектов:", DelCount, Totalcount)); } else { ObjectsTreeStore.Remove(ref DeleteIter); } } if (QSMain.ProjectTables[Table].ClearItems.Count > 0) { if (!ObjectsTreeStore.IterIsValid(root)) { ClearIter = ObjectsTreeStore.AppendNode(); } else { ClearIter = ObjectsTreeStore.AppendNode(root); } foreach (KeyValuePair <string, TableInfo.ClearDependenceItem> pair in QSMain.ProjectTables[Table].ClearItems) { GroupCount = 0; if (!QSMain.ProjectTables.ContainsKey(pair.Key)) { ErrorString = String.Format("Зависимость очистки у таблицы {1} ссылается на таблицу {0} описания для которой нет.", pair.Key, Table); logger.Error(ErrorString); ErrorHappens = true; return(0); } string sql = QSMain.ProjectTables[pair.Key].SqlSelect + pair.Value.sqlwhere; cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = sql; AddParameters(cmd, pair.Value.SqlParam, ParametersIn); rdr = cmd.ExecuteReader(); if (!rdr.HasRows) { rdr.Close(); continue; } GroupIter = ObjectsTreeStore.AppendNode(ClearIter); while (rdr.Read()) { object[] Fields = new object[rdr.FieldCount]; rdr.GetValues(Fields); ItemIter = ObjectsTreeStore.AppendValues(GroupIter, String.Format(QSMain.ProjectTables[pair.Key].DisplayString, Fields)); GroupCount++; Totalcount++; ClearCount++; } ObjectsTreeStore.SetValues(GroupIter, QSMain.ProjectTables[pair.Key].ObjectsName + "(" + GroupCount.ToString() + ")"); rdr.Close(); } if (ClearCount > 0) { ObjectsTreeStore.SetValues(ClearIter, String.Format("Будет очищено ссылок у {0} объектов:", ClearCount)); } else { ObjectsTreeStore.Remove(ref ClearIter); } } return(Totalcount); }
protected void OnReferenceUpdate(object sender, QSMain.ReferenceUpdatedEventArgs e) { switch (e.ReferenceTable) { case "doc_types": ComboWorks.ComboFillReference (comboDocType, "doc_types", ComboWorks.ListMode.OnlyItems); break; } }
/// <summary>Заполняет комбобокс элементами справочника. /// <param name="listmode">Режимы списка: /// 0 - Только элементы; /// 1 - Есть пункт "Все" с кодом 0; /// 2 - Есть пункт "Нет" с кодом -1;</param> </summary> public static void ComboFillReference(ComboBox combo, string TableRef, ListMode listmode, bool SetDefault = true, string OrderBy = "") { combo.Clear(); CellRendererText text = new CellRendererText(); ListStore store = new ListStore(typeof(string), typeof(int)); combo.Model = store; combo.PackStart(text, false); combo.AddAttribute(text, "text", 0); logger.Info("Запрос справочника " + TableRef + "..."); try { QSMain.CheckConnectionAlive(); int count = 0; string sql = String.Format("SELECT id, name FROM {0} ", TableRef); if (OrderBy != "") { sql += "ORDER BY " + OrderBy; } DbCommand cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = sql; using (DbDataReader rdr = cmd.ExecuteReader()) { switch (listmode) { case ListMode.WithAll: //Все store.AppendValues("Все", 0); break; case ListMode.WithNo: //Нет store.AppendValues("нет", -1); break; default: break; } while (rdr.Read()) { store.AppendValues(rdr["name"].ToString(), int.Parse(rdr["id"].ToString())); count++; } } if (SetDefault && listmode != ListMode.OnlyItems) { combo.Active = 0; } if (SetDefault && listmode == ListMode.WithNo && count == 1) { combo.Active = 1; } if (SetDefault && listmode == ListMode.OnlyItems && count == 1) { combo.Active = 0; } logger.Info("Ok"); } catch (Exception ex) { logger.Error(ex, "Ошибка получения данных справочника!"); } }
void on_editnode_response(object obj, ResponseArgs args) { if (args.ResponseId == ResponseType.Ok) { logger.Info("Запись " + nameNode + "..."); string sql, InsertDescriptString, UpdateDescriptString; if (DescriptionField) { if (ParentFieldName == "") { InsertDescriptString = " (name, description) VALUES (@name, @descript)"; } else { InsertDescriptString = " (name, description, " + ParentFieldName + ") VALUES (@name, @descript, @parent)"; } UpdateDescriptString = ", description = @descript "; } else { if (ParentFieldName == "") { InsertDescriptString = " (name) VALUES (@name)"; } else { InsertDescriptString = " (name, " + ParentFieldName + ") VALUES (@name, @parent)"; } UpdateDescriptString = ""; } if (NewNode) { sql = "INSERT INTO " + TableRef + InsertDescriptString; } else { sql = "UPDATE " + TableRef + " SET name = @name " + UpdateDescriptString + "WHERE id = @id"; } QSMain.CheckConnectionAlive(); try { DbCommand cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = sql; DbParameter param = cmd.CreateParameter(); param.ParameterName = "@id"; param.Value = SelectedID; cmd.Parameters.Add(param); param = cmd.CreateParameter(); param.ParameterName = "@name"; param.Value = inputNameEntry.Text; cmd.Parameters.Add(param); if (DescriptionField) { param = cmd.CreateParameter(); param.ParameterName = "@descript"; param.Value = inputDiscriptionEntry.Text; cmd.Parameters.Add(param); } if (ParentFieldName != "") { param = cmd.CreateParameter(); param.ParameterName = "@parent"; param.Value = ParentId; cmd.Parameters.Add(param); } cmd.ExecuteNonQuery(); if (NewNode && OrdinalField != "") { cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = @"select last_insert_rowid()"; int ItemId = Convert.ToInt32(cmd.ExecuteScalar()); cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = String.Format("UPDATE {0} SET {1} = @id WHERE id = @id", TableRef, OrdinalField); param = cmd.CreateParameter(); param.ParameterName = "@id"; param.Value = ItemId; cmd.Parameters.Add(param); cmd.ExecuteNonQuery(); } logger.Info("Ok"); } catch (Exception ex) { logger.Error(ex, "Ошибка записи {0}!", nameNode); QSMain.ErrorMessage(this, ex); } } }
/// <summary>Заполняет комбобокс любыми данными из базы. /// <param name="listmode">Режимы списка: /// 0 - Только элементы; /// 1 - Есть пункт "Все" с кодом 0; /// 2 - Есть пункт "Нет" с кодом -1;</param> </summary> public static void ComboFillUniversal(ComboBox combo, string SqlSelect, string DisplayString, System.Data.IDataParameter[] Parameters, int KeyField, ListMode listmode, bool WithDBValues = false) { combo.Clear(); CellRendererText text = new CellRendererText(); ListStore store; if (WithDBValues) { store = new ListStore(typeof(string), typeof(int), typeof(object[])); } else { store = new ListStore(typeof(string), typeof(int)); } combo.Model = store; combo.PackStart(text, false); combo.AddAttribute(text, "text", 0); logger.Info("Запрос элементов комбобокс..."); try { QSMain.CheckConnectionAlive(); int count = 0; DbCommand cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = SqlSelect; if (Parameters != null) { cmd.Parameters.AddRange(Parameters); } using (DbDataReader rdr = cmd.ExecuteReader()) { switch (listmode) { case ListMode.WithAll: //Все store.AppendValues("Все", 0); break; case ListMode.WithNo: //Нет store.AppendValues("нет", -1); break; default: break; } while (rdr.Read()) { object[] Fields = new object[rdr.FieldCount]; rdr.GetValues(Fields); if (WithDBValues) { store.AppendValues(String.Format(DisplayString, Fields), Convert.ToInt32(Fields[KeyField]), Fields); } else { store.AppendValues(String.Format(DisplayString, Fields), Convert.ToInt32(Fields[KeyField])); } count++; } } if (listmode == ListMode.WithNo && count == 1) { combo.Active = 1; } if (listmode == ListMode.OnlyItems && count == 1) { combo.Active = 0; } logger.Info("Ok"); } catch (Exception ex) { logger.Error(ex, "Ошибка получения данных для комбобокс!"); } }
bool CreateLogin() { logger.Info("Создание учетной записи на сервере..."); try { //Проверка существует ли логин string sql = "SELECT COUNT(*) FROM users WHERE login = @login"; QSMain.CheckConnectionAlive(); MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@login", entryLogin.Text); if (Convert.ToInt32(cmd.ExecuteScalar()) > 0) { string Message = "Пользователь с логином " + entryLogin.Text + " уже существует в базе. " + "Создание второго пользователя с таким же логином невозможно."; MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.Ok, Message); md.Run(); md.Destroy(); return(false); } sql = "SELECT COUNT(*) from mysql.user WHERE USER = @login"; cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@login", entryLogin.Text); try { if (Convert.ToInt32(cmd.ExecuteScalar()) > 0) { string Message = "Пользователь с логином " + entryLogin.Text + " уже существует на сервере. " + "Если он использовался для доступа к другим базам, может возникнуть путаница. " + "Использовать этот логин?"; MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.YesNo, Message); bool result = (ResponseType)md.Run() == ResponseType.Yes; md.Destroy(); return(result); } } catch (MySqlException ex) { if (ex.Number == 1045) { logger.Warn(ex, "Нет доступа к таблице пользователей, пробую создать пользователя в слепую."); } else { return(false); } } //Создание пользователя. sql = "CREATE USER @login IDENTIFIED BY @password"; cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@login", entryLogin.Text); cmd.Parameters.AddWithValue("@password", entryPassword.Text); cmd.ExecuteNonQuery(); cmd.CommandText = "CREATE USER @login @'localhost' IDENTIFIED BY @password"; cmd.ExecuteNonQuery(); logger.Info("Ok"); return(true); } catch (Exception ex) { logger.Error(ex, "Ошибка создания пользователя!"); QSMain.ErrorMessage(this, ex); return(false); } }
protected void OnReferenceUpdate(object sender, QSMain.ReferenceUpdatedEventArgs e) { switch (e.ReferenceTable) { case "place_types": ComboWorks.ComboFillReference (comboPlaceType, "place_types", ComboWorks.ListMode.WithAll); ComboWorks.ComboFillReference (comboContractPlaceT, "place_types", ComboWorks.ListMode.WithAll); break; case "organizations": ComboWorks.ComboFillReference (comboPlaceOrg, "organizations", ComboWorks.ListMode.WithAll); ComboWorks.ComboFillReference (comboContractOrg, "organizations", ComboWorks.ListMode.WithAll); break; case "contract_category": ComboWorks.ComboFillReference (comboContractCategory, "contract_category", ComboWorks.ListMode.WithAll); break; } }
private void DeleteObjects(string Table, TableInfo.Params ParametersIn) { DbCommand cmd; DbDataReader rdr; string sql; if (!QSMain.ProjectTables.ContainsKey(Table)) { ErrorString = "Нет описания для таблицы " + Table; logger.Error(ErrorString); ErrorHappens = true; return; } QSMain.CheckConnectionAlive(); if (QSMain.ProjectTables[Table].DeleteItems.Count > 0) { foreach (KeyValuePair <string, TableInfo.DeleteDependenceItem> pair in QSMain.ProjectTables[Table].DeleteItems) { if (QSMain.ProjectTables[pair.Key].DeleteItems.Count > 0 || QSMain.ProjectTables[pair.Key].ClearItems.Count > 0) { sql = "SELECT * FROM " + pair.Key + " " + pair.Value.sqlwhere; cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = sql; AddParameters(cmd, pair.Value.SqlParam, ParametersIn); rdr = cmd.ExecuteReader(); List <TableInfo.Params> ReadedData = new List <TableInfo.Params>(); string IntFieldName = QSMain.ProjectTables[pair.Key].PrimaryKey.ParamInt; string StrFieldName = QSMain.ProjectTables[pair.Key].PrimaryKey.ParamStr; while (rdr.Read()) { TableInfo.Params OutParam = new TableInfo.Params(); if (IntFieldName != "") { OutParam.ParamInt = rdr.GetInt32(rdr.GetOrdinal(IntFieldName)); } if (StrFieldName != "") { OutParam.ParamStr = rdr.GetString(rdr.GetOrdinal(StrFieldName)); } ReadedData.Add(OutParam); } rdr.Close(); foreach (TableInfo.Params row in ReadedData) { DeleteObjects(pair.Key, row); } } sql = "DELETE FROM " + pair.Key + " " + pair.Value.sqlwhere; cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = sql; AddParameters(cmd, pair.Value.SqlParam, ParametersIn); cmd.ExecuteNonQuery(); } } if (QSMain.ProjectTables[Table].ClearItems.Count > 0) { foreach (KeyValuePair <string, TableInfo.ClearDependenceItem> pair in QSMain.ProjectTables[Table].ClearItems) { sql = "UPDATE " + pair.Key + " SET "; bool first = true; foreach (string FieldName in pair.Value.ClearFields) { if (!first) { sql += ", "; } sql += FieldName + " = NULL "; first = false; } sql += pair.Value.sqlwhere; cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = sql; AddParameters(cmd, pair.Value.SqlParam, ParametersIn); cmd.ExecuteNonQuery(); } } sql = "DELETE FROM " + Table + " WHERE "; bool FirstKey = true; if (QSMain.ProjectTables[Table].PrimaryKey.ParamInt != "") { sql += QSMain.ProjectTables[Table].PrimaryKey.ParamInt + " = @IntParam "; FirstKey = false; } if (QSMain.ProjectTables[Table].PrimaryKey.ParamStr != "") { if (!FirstKey) { sql += "AND "; } sql += QSMain.ProjectTables[Table].PrimaryKey.ParamStr + " = @StrParam "; FirstKey = false; } cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = sql; TableInfo.PrimaryKeys TempParams = new TableInfo.PrimaryKeys( QSMain.ProjectTables[Table].PrimaryKey.ParamInt != "" ? "@IntParam" : "", QSMain.ProjectTables[Table].PrimaryKey.ParamStr != "" ? "@StrParam" : "" ); AddParameters(cmd, TempParams, ParametersIn); cmd.ExecuteNonQuery(); }
protected void OnButtonOkClicked(object sender, EventArgs e) { string sql; ISaaSService svc = null; if (entryLogin.Text == "root") { string Message = "Операции с пользователем root запрещены."; MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.Ok, Message); md.Run(); md.Destroy(); return; } if (Session.IsSaasConnection) { int dlgRes; svc = Session.GetSaaSService(); if (NewUser) { //Проверка существует ли логин sql = "SELECT COUNT(*) FROM users WHERE login = @login"; QSMain.CheckConnectionAlive(); MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@login", entryLogin.Text); if (Convert.ToInt32(cmd.ExecuteScalar()) > 0) { string Message = "Пользователь с логином " + entryLogin.Text + " уже существует в базе. " + "Создание второго пользователя с таким же логином невозможно."; MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.Ok, Message); md.Run(); md.Destroy(); return; } //Регистрируем пользователя в SaaS Result result = svc.registerUserV3(entryLogin.Text, entryPassword.Text, Session.SessionId, entryName.Text, entryEmail.Text); if (!result.Success) { if (result.Error == ErrorType.UserExists) { MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.YesNo, "Пользователь с таким логином уже существует. Предоставить ему доступ к базе?\n" + "ВНИМАНИЕ: Если вы указали новый пароль для пользователя, то он применен не будет."); dlgRes = md.Run(); md.Destroy(); if ((ResponseType)dlgRes == ResponseType.No) { return; } } else { MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.Close, result.Description); md.Run(); md.Destroy(); return; } } //Создаем запись в Users. sql = "INSERT INTO users (name, login, deactivated, email, " + QSMain.AdminFieldName + ", description" + QSMain.GetPermissionFieldsForSelect() + GetExtraFieldsForSelect() + ") " + "VALUES (@name, @login, @deactivated, @email, @admin, @description" + QSMain.GetPermissionFieldsForInsert() + GetExtraFieldsForInsert() + ")"; } else { if (entryPassword.Text != passFill) { MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.YesNo, "Изменение пароля произойдет во всех базах, к которым пользователь имеет доступ.\nПродолжить?"); dlgRes = md.Run(); md.Destroy(); if ((ResponseType)dlgRes == ResponseType.Yes && !svc.changeUserPasswordByLogin(entryLogin.Text, Session.Account, entryPassword.Text)) { MessageDialog md1 = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.Close, "Ошибка изменения пароля пользователя."); md1.Run(); md1.Destroy(); return; } else if ((ResponseType)dlgRes != ResponseType.Yes) { return; } } sql = "UPDATE users SET name = @name, deactivated = @deactivated, email = @email, " + QSMain.AdminFieldName + " = @admin," + "description = @description " + QSMain.GetPermissionFieldsForUpdate() + GetExtraFieldsForUpdate() + " WHERE id = @id"; } } else { if (NewUser) { if (!CreateLogin()) { return; } sql = "INSERT INTO users (name, login, deactivated, email, " + QSMain.AdminFieldName + ", description" + QSMain.GetPermissionFieldsForSelect() + GetExtraFieldsForSelect() + ") " + "VALUES (@name, @login, @deactivated, @email, @admin, @description" + QSMain.GetPermissionFieldsForInsert() + GetExtraFieldsForInsert() + ")"; } else { if (OriginLogin != entryLogin.Text && !RenameLogin()) { return; } if (entryPassword.Text != passFill) { ChangePassword(); } sql = "UPDATE users SET name = @name, deactivated = @deactivated, email = @email, login = @login, " + QSMain.AdminFieldName + " = @admin," + "description = @description " + QSMain.GetPermissionFieldsForUpdate() + GetExtraFieldsForUpdate() + " WHERE id = @id"; } UpdatePrivileges(); logger.Info("Запись пользователя..."); } try { QSMain.CheckConnectionAlive(); MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@id", entryID.Text); cmd.Parameters.AddWithValue("@name", entryName.Text); cmd.Parameters.AddWithValue("@login", entryLogin.Text); cmd.Parameters.AddWithValue("@admin", checkAdmin.Active); cmd.Parameters.AddWithValue("@deactivated", checkDeactivated.Active); cmd.Parameters.AddWithValue("@email", entryEmail.Text); foreach (KeyValuePair <string, CheckButton> Pair in RightCheckButtons) { cmd.Parameters.AddWithValue("@" + QSMain.ProjectPermission[Pair.Key].DataBaseName, Pair.Value.Active); } if (permissionViews != null) { foreach (var view in permissionViews) { cmd.Parameters.AddWithValue(view.DBFieldName, view.DBFieldValue); } } if (textviewComments.Buffer.Text == "") { cmd.Parameters.AddWithValue("@description", DBNull.Value); } else { cmd.Parameters.AddWithValue("@description", textviewComments.Buffer.Text); } cmd.ExecuteNonQuery(); if (QSMain.User.Login == entryLogin.Text) { QSMain.User.LoadUserInfo(); } logger.Info("Ok"); Respond(ResponseType.Ok); } catch (Exception ex) { logger.Error(ex, "Ошибка записи пользователя!"); QSMain.ErrorMessage(this, ex); } //Предоставляем пользователю доступ к базе if (Session.IsSaasConnection) { if (!svc.changeBaseAccessFromProgram(Session.SessionId, entryLogin.Text, Session.SaasBaseName, !checkDeactivated.Active, checkAdmin.Active)) { MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.Close, "Ошибка предоставления доступа к базе данных."); md.Run(); md.Destroy(); return; } } }
void UpdatePrivileges() { logger.Info("Устанавливаем права..."); try { string privileges; if (checkAdmin.Active) { privileges = "ALL"; } else { privileges = "SELECT, INSERT, UPDATE, DELETE, EXECUTE, SHOW VIEW"; } string sql = $"GRANT {privileges} ON `{QSMain.connectionDB.Database}`.* TO @login, @login @'localhost'"; QSMain.CheckConnectionAlive(); MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@login", entryLogin.Text); cmd.ExecuteNonQuery(); if (checkAdmin.Active) { cmd.CommandText = "GRANT CREATE USER, GRANT OPTION ON *.* TO @login, @login @'localhost'"; } else { cmd.CommandText = "REVOKE CREATE USER, GRANT OPTION ON *.* FROM @login, @login @'localhost'"; } cmd.ExecuteNonQuery(); bool GrantMake = false; if (checkAdmin.Active) { sql = "GRANT SELECT, UPDATE ON mysql.* TO @login, @login @'localhost'"; GrantMake = true; } else { sql = "SHOW GRANTS FOR @login"; cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@login", entryLogin.Text); using (MySqlDataReader rdr = cmd.ExecuteReader()) { while (rdr.Read()) { if (rdr[0].ToString().IndexOf("mysql") > 0) { GrantMake = true; } } } sql = "REVOKE SELECT, UPDATE ON mysql.* FROM @login, @login @'localhost'"; } if (GrantMake) { cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@login", entryLogin.Text); cmd.ExecuteNonQuery(); } logger.Info("Права установлены. Ok"); } catch (MySqlException ex) when(ex.Number == 1044) { logger.Error(ex, "Ошибка установки прав!"); MessageDialogWorks.RunErrorDialog("У вас не достаточно прав на сервере MySQL для установки полномочий другим пользователям. Возможно некоторые права не были установлены."); } catch (Exception ex) { logger.Error(ex, "Ошибка установки прав!"); QSMain.ErrorMessage(this, ex); } }
protected void OnReferenceUpdate(object sender, QSMain.ReferenceUpdatedEventArgs e) { /* switch (e.ReferenceTable) { case "doc_types": ComboWorks.ComboFillReference (comboDocType, "doc_types", 0); break; } */ }
static void HandleRunErrorMessageDlg(object sender, QSMain.RunErrorMessageDlgEventArgs e) { if(currentCrashDlg != null) { logger.Debug ("Добавляем исключение в уже созданное окно."); currentCrashDlg.AddAnotherException (e.Exception, e.UserMessage); } else { logger.Debug ("Создание окна отправки отчета о падении."); currentCrashDlg = new ErrorMsg (e.ParentWindow, e.Exception, e.UserMessage); currentCrashDlg.Run (); currentCrashDlg.Destroy (); currentCrashDlg = null; logger.Debug ("Окно отправки отчета, уничтожено."); } }
public void UserFill(int UserId) { NewUser = false; logger.Info("Запрос пользователя №{0}...", UserId); string sql = "SELECT * FROM users WHERE users.id = @id"; try { QSMain.CheckConnectionAlive(); MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@id", UserId); MySqlDataReader rdr = cmd.ExecuteReader(); rdr.Read(); bool deactivated = false; string email = String.Empty; try { deactivated = DBWorks.GetBoolean(rdr, "deactivated", false); email = DBWorks.GetString(rdr, "email", String.Empty); } catch { } entryID.Text = rdr["id"].ToString(); entryLogin.Text = rdr["login"].ToString(); //Если SaaS - запретить редактировать логин. entryLogin.Sensitive = !Session.IsSaasConnection; OriginLogin = rdr["login"].ToString(); entryName.Text = rdr["name"].ToString(); entryPassword.Text = passFill; entryEmail.Text = email; checkDeactivated.Active = deactivated; checkDeactivated.Sensitive = QSMain.User.Login != OriginLogin; checkAdmin.Active = rdr.GetBoolean(QSMain.AdminFieldName); if (deactivated && Session.IsSaasConnection) //FIXME Очень странное условие. Нужно разобраться. Что делает этот блок и зачем? { entryName.Sensitive = entryPassword.Sensitive = entryEmail.Sensitive = false; checkDeactivated.Sensitive = checkAdmin.Sensitive = false; } foreach (KeyValuePair <string, CheckButton> Pair in RightCheckButtons) { Pair.Value.Active = rdr.GetBoolean(QSMain.ProjectPermission[Pair.Key].DataBaseName); } if (permissionViews != null) { foreach (var view in permissionViews) { view.DBFieldValue = DBWorks.GetString(rdr, view.DBFieldName); } } textviewComments.Buffer.Text = rdr["description"].ToString(); rdr.Close(); this.Title = entryName.Text; logger.Info("Ok"); } catch (Exception ex) { logger.Error(ex, "Ошибка получения информации о пользователе!"); QSMain.ErrorMessage(this, ex); } }
protected void OnReferenceUpdate(object sender, QSMain.ReferenceUpdatedEventArgs e) { switch (e.ReferenceTable) { case "place_types": ComboWorks.ComboFillReference (comboPlaceType, "place_types", ComboWorks.ListMode.WithAll); ComboWorks.ComboFillReference (comboContractPlaceT, "place_types", ComboWorks.ListMode.WithAll); ComboWorks.ComboFillReference (comboEventPlaceT, "place_types", ComboWorks.ListMode.WithAll); break; case "organizations": ComboWorks.ComboFillReference (comboPlaceOrg, "organizations", ComboWorks.ListMode.WithAll); ComboWorks.ComboFillReference (comboContractOrg, "organizations", ComboWorks.ListMode.WithAll); ComboWorks.ComboFillReference (comboAccrualOrg, "organizations", ComboWorks.ListMode.WithAll); ComboWorks.ComboFillReference (comboCashOrg, "organizations", ComboWorks.ListMode.WithAll); break; case "cash": ComboWorks.ComboFillReference (comboCashCash, "cash", ComboWorks.ListMode.WithAll); ComboWorks.ComboFillReference (comboAccrualCash, "cash", ComboWorks.ListMode.WithAll); break; case "income_items": if (notebookCash.CurrentPage == 0) ComboWorks.ComboFillReference (comboCashItem, "income_items", ComboWorks.ListMode.WithAll); ComboWorks.ComboFillReference (comboAccrualItem, "income_items", ComboWorks.ListMode.WithAll); break; case "expense_items": if (notebookCash.CurrentPage >= 1) ComboWorks.ComboFillReference (comboCashItem, "expense_items", ComboWorks.ListMode.WithAll); break; case "classes": ComboWorks.ComboFillReference (comboEventType, "classes", ComboWorks.ListMode.WithAll); break; } }