private void FillDataGrid()
        {
            dt_ref_config = DBFunctions.ReadFromDB("SELECT * FROM referencesconfig WHERE ReferenceDBName = '" + reference_list.Rows[cbCurrentReference.SelectedIndex]["ReferenceDBName"] + "'");

            dt_ref_config.TableNewRow += new DataTableNewRowEventHandler(dt_TableNewRow);

            dgRefConfig.Columns.Clear();

            dgRefConfig.DataSource = dt_ref_config;

            dgRefConfig.Columns["ReferenceConfigID"].Visible = false;
            dgRefConfig.Columns["ReferenceName"].Visible     = false;
            dgRefConfig.Columns["ReferenceDBName"].Visible   = false;
            dgRefConfig.Columns["Hierarchycal"].Visible      = false;
            dgRefConfig.Columns["ColumnDBName_Old"].Visible  = false;


            dgRefConfig.Columns["ColumnName"].HeaderText   = "Имя колонки";
            dgRefConfig.Columns["ColumnDBName"].HeaderText = "Имя колонки в БД";

            DataGridViewComboBoxColumn column_type = new DataGridViewComboBoxColumn();

            column_type.Items.Add("Строка50");
            column_type.Items.Add("Строка300");
            column_type.Items.Add("Число с плавающей точкой");
            column_type.Items.Add("Целое число");
            column_type.Width            = 200;
            column_type.FlatStyle        = FlatStyle.Flat;
            column_type.Name             = "Тип колонки";
            column_type.DataPropertyName = "ColumnType";
            dgRefConfig.Columns.Remove("ColumnType");
            dgRefConfig.Columns.Add(column_type);
        }
        void AddElement()
        {
            dt_elem = DBFunctions.ReadFromDB("SELECT * FROM `ref_data_" + reference_db_name + "` WHERE ID = null");

            DataRow new_elem = dt_elem.Rows.Add();

            new_elem["ParentID"] = tvReference.SelectedNode != null ? tvReference.SelectedNode.Tag : 0;
            new_elem["RefName"]  = "Новый элемент";

            foreach (Control cntrl in edit_controls.Values)
            {
                if (cntrl is TextBox)
                {
                    ((TextBox)cntrl).Text = "";
                }
            }

            edit_controls["RefName"].Text = "Новый элемент";

            ((TextBox)edit_controls["RefName"]).SelectionStart  = 0;
            ((TextBox)edit_controls["RefName"]).SelectionLength = ((TextBox)edit_controls["RefName"]).TextLength;
            edit_controls["RefName"].Select();

            new_node = new TreeNode("Новый элемент");
            if (tvReference.SelectedNode != null)
            {
                tvReference.SelectedNode.Nodes.Add(new_node);
            }
            else
            {
                tvReference.Nodes.Add(new_node);
            }

            tvReference.SelectedNode = new_node;
        }
        private void HierarchicalRefEdit_Load(object sender, EventArgs e)
        {
            //Получим список справочников
            if (!select_mode)
            {
                reference_list    = DBFunctions.ReadFromDB("SELECT DISTINCT ReferenceName,ReferenceDBName,Hierarchycal FROM referencesconfig ORDER BY ReferenceName");
                tsbSelect.Visible = false;
            }
            else
            {
                reference_list             = DBFunctions.ReadFromDB("SELECT DISTINCT ReferenceName,ReferenceDBName,Hierarchycal FROM referencesconfig WHERE ReferenceDBName = '" + reference_db_name + "'");
                cbCurrentReference.Visible = false;
                tsbAdd.Visible             = tsbDelete.Visible = tsbSave.Visible = false;
                if (select_mode_multiselect)
                {
                    tvReference.CheckBoxes = true;
                }
            }
            foreach (DataRow row in reference_list.Rows)
            {
                cbCurrentReference.Items.Add((string)row["ReferenceName"]);
            }
            cbCurrentReference.SelectedIndex = 0;

            TestRights();
        }
Example #4
0
        private void FillDataGrid()
        {
            dt_active_sessions = DBFunctions.ReadFromDB("SELECT SessionID AS 'Номер сессии', Computer_Name AS 'Имя компьютера', DomainUser AS 'Доменный пользователь',LastActivity AS 'Последняя активность',SessionStart AS 'Начало сессии' " +
                                                        "FROM active_sessions");

            dgActiveSessions.DataSource = dt_active_sessions;
        }
        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            DataRow curr_row = GreenLight.Tools.FindCurrentRow(dgTableData);
            int     curr_id  = (int)curr_row["ID"];

            DataTable dt_columns = DBFunctions.ReadFromDB("SELECT ColumnDBName FROM tableconfig WHERE TableDBName = '" + table_db_names[cbTables.SelectedIndex] + "'");

            string fields = "";

            foreach (DataRow row in dt_columns.Rows)
            {
                fields += row["ColumnDBName"];
                if (dt_columns.Rows.IndexOf(row) + 1 < dt_columns.Rows.Count)
                {
                    fields += ",";
                }
            }

            DBFunctions.ExecuteCommand("INSERT INTO table_" + table_db_names[cbTables.SelectedIndex] + " (" + fields + ") SELECT " + fields + " FROM table_" + table_db_names[cbTables.SelectedIndex] + " WHERE ID = " + Convert.ToString(curr_id));


            int col = dgTableData.CurrentCell.ColumnIndex;

            FillDataGrid();

            dgTableData.CurrentCell = dgTableData[col, dgTableData.Rows.Count - 1];
        }
        private void FillDataGrid()
        {
            dt_replaces.Clear();

            if (cbKeyFieldValues.SelectedIndex == -1 || cbReferenceNames.SelectedIndex == -1)
            {
                return;
            }

            dt_ref_values = DBFunctions.ReadFromDB("SELECT id, RefName FROM ref_data_" + reference_db_names[cbReferenceNames.SelectedIndex] + " ORDER BY RefName");

            DataGridViewComboBoxColumn ref_name_column = (DataGridViewComboBoxColumn)dgReplaceStrings.Columns["ref_name"];

            ref_name_column.Items.Clear();

            foreach (DataRow ref_values_row in dt_ref_values.Rows)
            {
                ref_name_column.Items.Add(ref_values_row["RefName"]);
            }

            Dictionary <string, object> parameters = new Dictionary <string, object>();

            parameters.Add("tkfv", key_field_values[cbKeyFieldValues.SelectedIndex]);
            parameters.Add("trdn", reference_db_names[cbReferenceNames.SelectedIndex]);
            dt_replaces.Merge(DBFunctions.ReadFromDB("SELECT table_reference_id,table_reference_value,replace_string FROM replace_strings WHERE table_key_field_value = @tkfv AND table_reference_db_name = @trdn", parameters));
        }
Example #7
0
        private void LoadAnswers(int question_id)
        {
            dt_answers = DBFunctions.ReadFromDB("SELECT * FROM questionary_answers WHERE question_id = " + Convert.ToString(question_id));

            dt_answers.TableNewRow += new DataTableNewRowEventHandler(dt_TableAnswersNewRow);

            dgAnswers.DataSource = dt_answers;
        }
Example #8
0
        private void LoadQuestion()
        {
            DataTable dt_question = DBFunctions.ReadFromDB("SELECT * FROM questionary_questions WHERE question_id = " +
                                                           Convert.ToString(current_question_id));

            if (dt_question.Rows.Count != 1)
            {
                System.Windows.Forms.MessageBox.Show("Ошибка загрузки вопроса.", "Ошибка", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                return;
            }
            else
            {
                row_question = dt_question.Rows[0];
            }

            lbQuestionText.Text = (string)row_question["question_text"];
            tbAnswer.Text       = "";

            if ((string)row_question["question_type"] == "Справочник")
            {
                btnSelect.Visible = true;
                tbAnswer.ReadOnly = true;

                //Самойлов. Подгружаем данные из таблицы в случае их наличия
                if (row_table_record[(string)row_question["question_dest_column_db_name"]] != System.DBNull.Value)
                {
                    tbAnswer.Tag  = (int)row_table_record[(string)row_question["question_dest_column_db_name"]];
                    tbAnswer.Text = Tables.GetRefName((string)row_question["question_reference"], (int)tbAnswer.Tag);
                }
            }
            else
            {
                btnSelect.Visible = false;
                tbAnswer.ReadOnly = false;

                //Самойлов. Подгружаем данные из таблицы в случае их наличия
                tbAnswer.Text = Convert.ToString(row_table_record[(string)row_question["question_dest_column_db_name"]]);
            }

            if (question_history.Count == 0)
            {
                btnPrev.Enabled = false;
            }
            else
            {
                btnPrev.Enabled = true;
            }

            if (row_question["question_next"] == DBNull.Value && !(bool)row_question["question_variation"])
            {
                btnNext.Text = "Завершить";
            }
            else
            {
                btnNext.Text = "Следующий >";
            }
        }
Example #9
0
        public static DataTable GetTable(string table_name, ref DataGridView dgTableData, ref TableStruct ts, int record_id = 0)
        {
            DataTable dt_table_data;

            DataTable dt_table_structure = DBFunctions.ReadFromDB("SELECT ColumnName,ColumnDBName,ColumnType,ColumnReference,ReferenceMultiSelect,ShowInEditor FROM tableconfig WHERE TableDBName = '" + table_name + "'");
            string    query_text         = "SELECT table_" + table_name + ".ID";
            int       rows_count         = 0;

            foreach (DataRow row in dt_table_structure.Rows)
            {
                query_text += ",";

                rows_count++;
                query_text += row["ColumnDBName"];
            }
            query_text += " FROM table_" + table_name;
            if (record_id != 0)
            {
                query_text += " WHERE table_" + table_name + ".ID=" + Convert.ToString(record_id);
            }
            dt_table_data = DBFunctions.ReadFromDB(query_text);

            if (dgTableData != null)
            {
                dgTableData.DataSource = dt_table_data;
            }

            ts           = new TableStruct();
            ts.TableName = "table_" + table_name;
            string[] p_keys = { "ID" };
            ts.p_keys  = p_keys;
            ts.columns = new string[rows_count];

            int curr_ts_row = 0;

            for (int i = 0; i < dt_table_structure.Rows.Count; i++)
            {
                if ((bool)dt_table_structure.Rows[i]["ShowInEditor"] == false)
                {
                    dgTableData.Columns[i + 1].Visible = false;
                }
                else
                {
                    dgTableData.Columns[i + 1].HeaderText = (string)dt_table_structure.Rows[i]["ColumnName"];
                }

                /*if ( (string)dt_table_structure.Rows[i]["ColumnType"] == "Справочник")
                 * {
                 *  dgTableData.Columns[curr_dg_column - 1].Visible = false;
                 *  dgTableData.Columns[curr_dg_column++].HeaderText = (string)dt_table_structure.Rows[i]["ColumnName"];
                 * }*/
                //if ((bool)dt_table_structure.Rows[i]["ReferenceMultiSelect"] == false)
                ts.columns[curr_ts_row++] = (string)dt_table_structure.Rows[i]["ColumnDBName"];
            }

            return(dt_table_data);
        }
        void SaveElement()
        {
            if (tvReference.SelectedNode == null)
            {
                return;
            }

            foreach (DataColumn dc in dt_elem.Columns)
            {
                try
                {
                    if (dc.DataType.Name == "String")
                    {
                        dt_elem.Rows[0][dc] = edit_controls[dc.ColumnName].Text;
                    }
                    else if (dc.DataType.Name == "Int32")
                    {
                        dt_elem.Rows[0][dc] = Convert.ToInt32(edit_controls[dc.ColumnName].Text);
                    }
                    else if (dc.DataType.Name == "Single")
                    {
                        dt_elem.Rows[0][dc] = Convert.ToSingle(edit_controls[dc.ColumnName].Text);
                    }
                }
                catch (Exception) { };
            }

            DBFunctions.WriteToDB(dt_elem, ref_table_struct);

            if (tvReference.SelectedNode.Tag == null)
            {
                tvReference.SelectedNode.Tag = Convert.ToInt32(DBFunctions.ReadScalarFromDB("SELECT LAST_INSERT_ID()"));

                //Добавим этот элемент во все мультирефы, в которых выбран его родитель
                Dictionary <string, object> parameters = new Dictionary <string, object>();
                parameters.Add("ref_db_name", reference_db_name);
                DataTable dtMultirefFields = DBFunctions.ReadFromDB("SELECT tabledbname,columndbname FROM tableconfig WHERE referencemultiselect=1 and columnreference=@ref_db_name", parameters);

                foreach (DataRow multirefFieldRow in dtMultirefFields.Rows)
                {
                    parameters.Clear();
                    parameters.Add("id_string", "{" + Convert.ToString(tvReference.SelectedNode.Tag) + "}");
                    parameters.Add("id", dt_elem.Rows[0]["ParentID"]);
                    string query = @"UPDATE table_" + ((string)multirefFieldRow["tabledbname"]) + @" SET " + ((string)multirefFieldRow["columndbname"]) +
                                   @" = CONCAT(" + ((string)multirefFieldRow["columndbname"]) + @",@id_string) 
                        WHERE POSITION(CONCAT('{',(SELECT parentid FROM ref_data_" + reference_db_name + @" WHERE id=@id),'}') IN " + ((string)multirefFieldRow["columndbname"]) + ") > 0";

                    DBFunctions.ExecuteCommand(query, parameters);
                }
            }

            tvReference.SelectedNode.Text = (string)dt_elem.Rows[0]["RefName"];

            new_node = null;
        }
        private void ReferenceStructureEdit_Load(object sender, EventArgs e)
        {
            reference_list = DBFunctions.ReadFromDB("SELECT DISTINCT ReferenceName,ReferenceDBName,Hierarchycal FROM referencesconfig");
            foreach (DataRow row in reference_list.Rows)
            {
                cbCurrentReference.Items.Add((string)row["ReferenceName"]);
            }
            cbCurrentReference.SelectedIndex = 0;

            TestRights();
        }
Example #12
0
        private void FillClients()
        {
            ts         = new TableStruct();
            dt_clients = DBFunctions.ReadFromDB("SELECT id,CONCAT(familia_zaem,' ',IFNULL(Imya_zaem,''),' ',IFNULL(Otchestvo_zaem,'')) AS fio_zaem FROM table_clients");

            dgClients.DataSource = dt_clients;

            dgClients.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;

            dgClients.Columns[0].HeaderText = "ID";
            dgClients.Columns[1].HeaderText = "ФИО";
        }
        private void LoadOtborFields()
        {
            DataTable dt_otbor = DBFunctions.ReadFromDB("SELECT ColumnName FROM tableconfig WHERE tabledbname = 'credprogr' ORDER BY ColumnName");

            tscbFields.Items.Clear();
            tscbFields.Items.Add(" ");

            foreach (DataRow otbor_row in dt_otbor.Rows)
            {
                tscbFields.Items.Add(otbor_row["ColumnName"]);
            }
        }
Example #14
0
        public static void RecreateRefStatements()
        {
            DataTable References = DBFunctions.ReadFromDB("SELECT DISTINCT ReferenceDBName FROM referencesconfig");

            foreach (DataRow row in References.Rows)
            {
                //Создадим хранимые процедуры и триггеры
                string ref_create_script = (string)DBFunctions.ReadScalarFromDB("SELECT script FROM scripts WHERE script_name = 'Reference_Create'");

                ref_create_script = ref_create_script.Replace("[RefDBName]", (string)row["ReferenceDBName"]);

                DBFunctions.ExecuteScript(ref_create_script);
            }
        }
 void FillEditForm()
 {
     dt_elem = DBFunctions.ReadFromDB("SELECT * FROM `ref_data_" + reference_db_name + "` WHERE ID = " + Convert.ToString(current_elem_id));
     if (dt_elem.Rows.Count != 1)
     {
         return;
     }
     foreach (DataColumn dc in dt_elem.Columns)
     {
         try
         {
             edit_controls[dc.ColumnName].Text = Convert.ToString(dt_elem.Rows[0][dc]);
         }
         catch (Exception) { };
     }
 }
Example #16
0
        private void ClauseEditor_Load(object sender, EventArgs e)
        {
            dt = DBFunctions.ReadFromDB("SELECT * FROM where_clauses");
            if (dt.Rows.Count > 0)
            {
                tbWhereClause.Text = (string)dt.Rows[0]["Clause"];
            }

            //Загрузим подсказку с именами столбцов
            dt_column_names = DBFunctions.ReadFromDB("SELECT TableConfigID, TableName AS 'Имя таблицы', ColumnName AS 'Имя колонки', ColumnDBName AS 'Наименование колонки в БД', ColumnType AS 'Тип', ColumnReference, ReferenceMultiSelect, UseInWhereClause FROM tableconfig ORDER BY TableName");

            dgColumnNames.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            dgColumnNames.DataSource          = dt_column_names;

            TestRights();
        }
Example #17
0
        public static void UpdateDBStructure()
        {
            //Получим список главных таблиц
            DataTable MainTables = DBFunctions.ReadFromDB("SELECT DISTINCT TableDBName FROM tableconfig");

            foreach (DataRow row in MainTables.Rows)
            {
                UpdateMainTableStructure((string)row["TableDBName"]);
            }

            //Списки справочников
            DataTable References = DBFunctions.ReadFromDB("SELECT DISTINCT ReferenceDBName FROM referencesconfig");

            foreach (DataRow row in References.Rows)
            {
                UpdateReferenceStructure((string)row["ReferenceDBName"]);
            }
        }
        private void tbAddReference_Click(object sender, EventArgs e)
        {
            string ref_name = Microsoft.VisualBasic.Interaction.InputBox("Введите наименование справочника", "Ввод наименования");

            if (ref_name == "")
            {
                return;
            }
            string ref_db_name = Microsoft.VisualBasic.Interaction.InputBox("Введите название справочника для базы данных", "Ввод наименования");

            if (ref_db_name == "")
            {
                return;
            }

            ref_db_name = ref_db_name.ToLower();

            SaveData();

            DBFunctions.ExecuteCommand("INSERT INTO referencesconfig SET ReferenceName = '" + ref_name + "',ReferenceDBName = '" +
                                       ref_db_name + "',Hierarchycal = 1,ColumnName = 'Наименование',ColumnDBName = 'RefName',ColumnType = 'Строка50'");

            DBStructure.UpdateDBStructure();

            reference_list = DBFunctions.ReadFromDB("SELECT DISTINCT ReferenceName,ReferenceDBName,Hierarchycal FROM referencesconfig");

            cbCurrentReference.Items.Clear();

            foreach (DataRow row in reference_list.Rows)
            {
                cbCurrentReference.Items.Add((string)row["ReferenceName"]);
            }

            foreach (string Item in cbCurrentReference.Items)
            {
                if (Item == ref_name)
                {
                    cbCurrentReference.SelectedIndex = cbCurrentReference.Items.IndexOf(Item);
                    break;
                }
            }
        }
        public DataTable SelectOffers()
        {
            string query_text = (string)DBFunctions.ReadScalarFromDB("SELECT script FROM scripts WHERE script_name = 'OfferSelect'");

            query_text = query_text.Replace("[ClientID]", Convert.ToString(ClientID));

            DataTable dt;

            try
            {
                dt = DBFunctions.ReadFromDB(query_text);
            }
            catch (Exception e)
            {
                System.Windows.Forms.MessageBox.Show("Ошибка в условии. " + e.Message, "Ошибка", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                return(null);
            }

            return(dt);
        }
Example #20
0
        public static void ReorganizeMultiref()
        {
            DataTable dt_multirefcolumns = DBFunctions.ReadFromDB("SELECT TableDBName,ColumnDBName FROM tableconfig WHERE ReferenceMultiSelect = 1");

            DBFunctions.ExecuteCommand("SET group_concat_max_len = 32000");

            foreach (DataRow row_multirefcolumn in dt_multirefcolumns.Rows)
            {
                DataTable dt_values = DBFunctions.ReadFromDB(
                    @"SELECT TableID, GROUP_CONCAT(CONCAT('{',CONVERT(RefID, CHAR),'}') SEPARATOR '') AS RefID 
                FROM multiref_" + row_multirefcolumn["TableDBName"] + "_" + row_multirefcolumn["ColumnDBName"] + @"
                GROUP BY TableID");

                foreach (DataRow row_value in dt_values.Rows)
                {
                    DBFunctions.ExecuteCommand(@"UPDATE table_" + row_multirefcolumn["TableDBName"] + @" 
                    SET " + row_multirefcolumn["ColumnDBName"] + " = '" + row_value["RefID"] + @"'
                    WHERE id = " + Convert.ToString(row_value["TableID"]));
                }
            }
        }
Example #21
0
        public static DataTable GetTableWODataGrid(string table_name, ref TableStruct ts, int record_id = 0)
        {
            DataTable dt_table_data;

            DataTable dt_table_structure = DBFunctions.ReadFromDB("SELECT ColumnName,ColumnDBName,ColumnType,ColumnReference,ReferenceMultiSelect FROM tableconfig WHERE TableDBName = '" + table_name + "'");
            string    query_text         = "SELECT table_" + table_name + ".ID";
            int       rows_count         = 0;

            foreach (DataRow row in dt_table_structure.Rows)
            {
                query_text += ",";

                rows_count++;
                query_text += row["ColumnDBName"];
            }
            query_text += " FROM table_" + table_name;
            //query_text += join_text;
            if (record_id != 0)
            {
                query_text += " WHERE table_" + table_name + ".ID=" + Convert.ToString(record_id);
            }
            dt_table_data = DBFunctions.ReadFromDB(query_text);


            ts           = new TableStruct();
            ts.TableName = "table_" + table_name;
            string[] p_keys = { "ID" };
            ts.p_keys  = p_keys;
            ts.columns = new string[rows_count];

            int curr_ts_row = 0;

            for (int i = 0; i < dt_table_structure.Rows.Count; i++)
            {
                ts.columns[curr_ts_row++] = (string)dt_table_structure.Rows[i]["ColumnDBName"];
            }

            return(dt_table_data);
        }
Example #22
0
        public static void GenerateMacrosValuesQuery(int clientID)
        {
            string query_text = "SELECT ";

            //Заменим макросы в условиях
            DataTable dtMacros = DBFunctions.ReadFromDB("SELECT * FROM macros");

            bool first = true;

            foreach (DataRow macro in dtMacros.Rows)
            {
                if (!first)
                {
                    query_text = query_text + "," + Environment.NewLine;
                }
                first = false;

                query_text = query_text + "[" + macro["name"] + "] AS '" + macro["name"] + "'";
            }

            query_text = query_text + Environment.NewLine + "FROM table_clients LEFT JOIN table_credprogr WHERE id=" + Convert.ToString(clientID);

            bool macros_found = true;

            while (macros_found)
            {
                macros_found = false;
                foreach (DataRow macro in dtMacros.Rows)
                {
                    if (query_text.IndexOf("[" + (string)macro["name"] + "]") != -1)
                    {
                        macros_found = true;
                        query_text   = query_text.Replace("[" + (string)macro["name"] + "]", (string)macro["macro"]);
                    }
                }
            }

            query_text = query_text;
        }
        private void tbDeleteReference_Click(object sender, EventArgs e)
        {
            if (System.Windows.Forms.MessageBox.Show("Данные справочника будут безвозвратно удалены. Продолжить?", "Вопрос", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.No)
            {
                return;
            }

            string ref_db_name = (string)reference_list.Rows[cbCurrentReference.SelectedIndex]["ReferenceDBName"];

            DBFunctions.ExecuteCommand("DELETE FROM referencesconfig WHERE ReferenceDBName='" +
                                       ref_db_name + "';" +
                                       "DROP TABLE `ref_data_" + ref_db_name + "`;" +
                                       "DROP TABLE `ref_hierarchy_" + ref_db_name + "`;");

            cbCurrentReference.Items.Clear();

            reference_list = DBFunctions.ReadFromDB("SELECT DISTINCT ReferenceName,ReferenceDBName,Hierarchycal FROM referencesconfig");
            foreach (DataRow row in reference_list.Rows)
            {
                cbCurrentReference.Items.Add((string)row["ReferenceName"]);
            }
            cbCurrentReference.SelectedIndex = 0;
        }
Example #24
0
        public void SetDisplayName()
        {
            if (Value == System.DBNull.Value)
            {
                DisplayName = "";
                return;
            }
            if (!isReference)
            {
                DisplayName = Convert.ToString(Value);
            }
            else
            {
                if (isMultiRef)
                {
                    DisplayName = "";


                    DataTable dt_selected_ids = DBFunctions.ReadFromDB(@"SELECT RefName
                                                FROM ref_data_" + RefDBName + @" 
                                                WHERE LOCATE(concat('{',CAST(ID AS CHAR),'}'),'" + (string)Value + "') > 0 ORDER BY RefName");

                    foreach (DataRow ref_id_row in dt_selected_ids.Rows)
                    {
                        DisplayName += (string)ref_id_row["RefName"] + ", ";
                    }

                    char[] trimchars = { ',', ' ' };
                    DisplayName = DisplayName.TrimEnd(trimchars);
                }
                else
                {
                    DisplayName = Tables.GetRefName(RefDBName, (int)Value);
                }
            }
        }
        private void FillDataGrid()
        {
            dgFilter.AutoGenerateColumns = false;
            dgFilter.Columns.Clear();
            dt_filter = new DataTable();
            dt_filter.Columns.Add("ID вопроса", Type.GetType("System.Int32"));
            DataGridViewTextBoxColumn dgc = new DataGridViewTextBoxColumn();

            dgc.Name             = "ID вопроса";
            dgc.DataPropertyName = "ID вопроса";
            dgc.Frozen           = true;
            dgFilter.Columns.Add(dgc);
            dt_filter.Columns.Add("Текст вопроса", Type.GetType("System.String"));
            dgc                  = new DataGridViewTextBoxColumn();
            dgc.Name             = "Текст вопроса";
            dgc.DataPropertyName = "Текст вопроса";
            dgc.Frozen           = true;
            dgc.Width            = dgc.Width * 4;
            dgFilter.Columns.Add(dgc);

            string ColumnDBName = (string)DBFunctions.ReadScalarFromDB("SELECT filter_name_field FROM questionary WHERE id = " + Convert.ToString(questionary_id));

            string query_text = "SELECT id, " + ColumnDBName + " AS name FROM table_credprogr";

            if (tscbFields.SelectedIndex != -1 && (string)(tscbFields.Items[tscbFields.SelectedIndex]) != " ")
            {
                query_text += " WHERE " +
                              (string)DBFunctions.ReadScalarFromDB("SELECT ColumnDBName FROM tableconfig WHERE ColumnName = '" + tscbFields.Items[tscbFields.SelectedIndex] + "'") +
                              " LIKE '%" + tstbOtbor.Text + "%'";
            }

            DataTable dt_programs = DBFunctions.ReadFromDB(query_text);

            foreach (DataRow program_row in dt_programs.Rows)
            {
                DataColumn clm = dt_filter.Columns.Add(Convert.ToString(program_row["id"]), Type.GetType("System.Boolean"));

                DataGridViewCheckBoxColumn dg_cb_clmn = new DataGridViewCheckBoxColumn();
                dg_cb_clmn.Name             = (string)program_row["name"] + " (" + Convert.ToString(program_row["id"]) + ")";
                dg_cb_clmn.DataPropertyName = Convert.ToString(program_row["id"]);
                dg_cb_clmn.TrueValue        = true;
                dg_cb_clmn.FalseValue       = false;
                dgFilter.Columns.Add(dg_cb_clmn);
            }

            dgFilter.DataSource = dt_filter;


            DataTable dt_questions = DBFunctions.ReadFromDB("SELECT question_id,question_text FROM questionary_questions WHERE questionary_id = " + Convert.ToString(questionary_id));

            DataTable dt_filter_pairs = DBFunctions.ReadFromDB("SELECT CONCAT(question_id,'-',filter_id) FROM questionary_filter WHERE questionary_id = " + Convert.ToString(questionary_id));

            DataColumn[] keys = { dt_filter_pairs.Columns[0] };

            dt_filter_pairs.PrimaryKey = keys;

            foreach (DataRow q_row in dt_questions.Rows)
            {
                DataRow new_row = dt_filter.Rows.Add(new object[] { q_row["question_id"], q_row["question_text"] });
                foreach (DataColumn q_column in dt_filter.Columns)
                {
                    if (dt_filter.Columns.IndexOf(q_column) < 2)
                    {
                        continue;
                    }
                    if (dt_filter_pairs.Rows.Find(Convert.ToString(q_row["question_id"]) + "-" + q_column.ColumnName) != null)
                    {
                        new_row[q_column] = true;
                    }
                    else
                    {
                        new_row[q_column] = false;
                    }
                }
            }
            dt_filter.AcceptChanges();
        }
Example #26
0
        private void LoadData()
        {
            questionary_id            = (int)DBFunctions.ReadScalarFromDB("SELECT id FROM questionary WHERE Name = '" + questionary_names[cbQuestionaries.SelectedIndex] + "'");
            questionary_table_db_name = (string)DBFunctions.ReadScalarFromDB("SELECT TableDBName FROM questionary WHERE Name = '" + questionary_names[cbQuestionaries.SelectedIndex] + "'");
            questionary_use_filter    = (bool)DBFunctions.ReadScalarFromDB("SELECT use_filter FROM questionary WHERE Name = '" + questionary_names[cbQuestionaries.SelectedIndex] + "'");

            tsbEditFilter.Enabled = questionary_use_filter;

            dt_questions = DBFunctions.ReadFromDB("SELECT * FROM questionary_questions WHERE questionary_id = " + Convert.ToString(questionary_id));

            dt_questions.TableNewRow += new DataTableNewRowEventHandler(dt_TableNewRow);

            dgQuestions.Columns.Clear();
            dgQuestions.DataSource = dt_questions;

            dgQuestions.Columns["question_id"].HeaderText                  = "ID";
            dgQuestions.Columns["questionary_id"].Visible                  = false;
            dgQuestions.Columns["question_text"].HeaderText                = "Текст вопроса";
            dgQuestions.Columns["question_variation"].HeaderText           = "Разветвление";
            dgQuestions.Columns["question_type"].HeaderText                = "Тип";
            dgQuestions.Columns["question_next"].HeaderText                = "ID след. вопроса";
            dgQuestions.Columns["question_dest_column_db_name"].HeaderText = "Поле таблицы";
            dgQuestions.Columns["question_hint"].HeaderText                = "Подсказка";

            dgQuestions.Columns["question_input_type"].HeaderText   = "Тип элемента ввода(веб)";
            dgQuestions.Columns["question_web_position"].HeaderText = "Положение на странице(веб)";

            DataGridViewComboBoxColumn column_type = new DataGridViewComboBoxColumn();

            column_type.Items.Add("Строка50");
            column_type.Items.Add("Строка300");
            column_type.Items.Add("Число с плавающей точкой");
            column_type.Items.Add("Справочник");
            column_type.Items.Add("Целое число");
            column_type.Items.Add("Формула");
            column_type.Width            = 200;
            column_type.FlatStyle        = FlatStyle.Flat;
            column_type.Name             = "Тип";
            column_type.DataPropertyName = "question_type";
            dgQuestions.Columns.Remove("question_type");
            dgQuestions.Columns.Add(column_type);

            DataGridViewComboBoxColumn column_ref = new DataGridViewComboBoxColumn();
            DataTable reference_list = DBFunctions.ReadFromDB("SELECT DISTINCT ReferenceDBName FROM referencesconfig");

            foreach (DataRow ref_row in reference_list.Rows)
            {
                column_ref.Items.Add(ref_row["ReferenceDBName"]);
            }
            column_ref.Width            = 200;
            column_ref.FlatStyle        = FlatStyle.Flat;
            column_ref.Name             = "Имя справочника";
            column_ref.DataPropertyName = "question_reference";
            dgQuestions.Columns.Remove("question_reference");
            dgQuestions.Columns.Add(column_ref);

            DataGridViewComboBoxColumn column_table_column = new DataGridViewComboBoxColumn();
            DataTable columns_list = DBFunctions.ReadFromDB("SELECT DISTINCT ColumnDBName FROM tableconfig WHERE ReferenceMultiSelect = 0 AND TableDBName = '" +
                                                            questionary_table_db_name + "' ORDER BY ColumnDBName");

            foreach (DataRow col_row in columns_list.Rows)
            {
                column_table_column.Items.Add(col_row["ColumnDBName"]);
            }
            column_table_column.Width            = 200;
            column_table_column.FlatStyle        = FlatStyle.Flat;
            column_table_column.Name             = "Поле таблицы";
            column_table_column.DataPropertyName = "question_dest_column_db_name";
            dgQuestions.Columns.Remove("question_dest_column_db_name");
            dgQuestions.Columns.Add(column_table_column);
        }
Example #27
0
        public Questionary(int t_r_id = -1, string q_name = "Анкета клиента", int [] filt_ids = null)
        {
            InitializeComponent();

            questionary_name = q_name;

            questionary_id            = (int)DBFunctions.ReadScalarFromDB("SELECT id FROM questionary WHERE Name = '" + questionary_name + "'");
            questionary_table_db_name = (string)DBFunctions.ReadScalarFromDB("SELECT TableDBName FROM questionary WHERE Name = '" + questionary_name + "'");
            current_question_id       = (int)DBFunctions.ReadScalarFromDB("SELECT first_question_id FROM questionary WHERE Name = '" + questionary_name + "'");

            questionary_use_filter = (bool)DBFunctions.ReadScalarFromDB("SELECT use_filter FROM questionary WHERE Name = '" + questionary_name + "'");

            if (questionary_use_filter)
            {
                filter_ids = (int[])filt_ids.Clone();
                string query_text = "SELECT DISTINCT question_id FROM questionary_filter WHERE questionary_id=@q_id AND filter_id IN (";
                foreach (int filter_id in filter_ids)
                {
                    query_text += filter_id.ToString() + ",";
                }

                query_text = query_text.TrimEnd(',') + ")";

                Dictionary <string, object> parameters = new Dictionary <string, object>();
                parameters.Add("q_id", questionary_id);

                dt_filter_allowed_questions = DBFunctions.ReadFromDB(query_text, parameters);

                //Дойдем до первого разрешенного вопроса
                while (current_question_id != -1)
                {
                    if (dt_filter_allowed_questions.Select("question_id = " + Convert.ToString(current_question_id)).Length > 0)
                    {
                        break;
                    }

                    parameters = new Dictionary <string, object>();
                    parameters.Add("questionary_id", questionary_id);
                    parameters.Add("q_id", current_question_id);
                    object new_question_id = DBFunctions.ReadScalarFromDB("SELECT question_next FROM questionary_questions WHERE questionary_id=@questionary_id AND question_id = @q_id", parameters);
                    if (new_question_id == DBNull.Value)
                    {
                        current_question_id = -1;
                    }
                    else
                    {
                        current_question_id = (int)new_question_id;
                    }
                }
            }

            question_history = new List <QuestionInfo>();

            table_record_id = t_r_id;
            //Подгрузим инфо о записи таблицы или пустую строку
            ts            = new TableStruct();
            dt_table_data = Tables.GetTableWODataGrid(questionary_table_db_name, ref ts, table_record_id);
            if (dt_table_data.Rows.Count > 0)
            {
                row_table_record = dt_table_data.Rows[0];
            }
            else
            {
                row_table_record = dt_table_data.NewRow();
                dt_table_data.Rows.Add(row_table_record);
            }
        }
Example #28
0
        static void UpdateMainTableStructure(string TableDBName)
        {
            //Получим требуемую структуру
            DataTable neededStructure = DBFunctions.ReadFromDB("SELECT TableConfigID,ColumnDBName,ColumnDBName_Old,ColumnType,ReferenceMultiSelect FROM tableconfig WHERE TableDBName = '" + TableDBName + "'");

            //Получим текущую структуру
            DataTable CurrentStrurture = new DataTable();
            bool      new_table        = false;

            try
            {
                CurrentStrurture = DBFunctions.ReadFromDB("SHOW COLUMNS FROM table_" + TableDBName);
            }
            catch (Exception)
            {
                //Таблицы не существует, будем создавать
                new_table = true;
            }

            if (new_table)
            {
                string CommandText = "CREATE TABLE `table_" + TableDBName + "` (";

                //ПК
                CommandText += "`ID` int(11) NOT NULL AUTO_INCREMENT";

                foreach (DataRow row in neededStructure.Rows)
                {
                    if ((string)row["ColumnType"] == "Справочник" && (bool)row["ReferenceMultiSelect"] == true)
                    {
                        CommandText += ",`" + row["ColumnDBName"] + "` MEDIUMTEXT DEFAULT NULL";
                        //CreateMultiRefTable(TableDBName, (string)row["ColumnDBName"]);
                    }
                    {
                        string field_type = ConvertTypeToSQL((string)row["ColumnType"]);
                        if (field_type != null)
                        {
                            CommandText += ",`" + row["ColumnDBName"] + "` " + field_type + " DEFAULT NULL";
                        }
                    }
                }

                CommandText += ", PRIMARY KEY (`ID`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8";

                DBFunctions.ExecuteCommand(CommandText);
            }
            else
            {
                //Создаем и меняем строки
                foreach (DataRow row in neededStructure.Rows)
                {
                    string col_type;
                    if ((string)row["ColumnType"] == "Справочник" && (bool)row["ReferenceMultiSelect"] == true)
                    {
                        //CreateMultiRefTable(TableDBName, (string)row["ColumnDBName"]);
                        col_type = "MEDIUMTEXT";
                    }
                    else
                    {
                        col_type = ConvertTypeToSQL((string)row["ColumnType"]);
                    }
                    {
                        //Ищем колонку
                        DataRow[] foundRows = CurrentStrurture.Select("Field = '" + row["ColumnDBName_Old"] + "'");
                        if (foundRows.Length == 0)
                        {
                            //Добавляем колонку
                            DBFunctions.ExecuteCommand("ALTER TABLE table_" + TableDBName + " ADD `" + row["ColumnDBName"] + "` " + col_type);
                        }
                        else
                        {
                            //Проверяем соответствие имени
                            if ((string)foundRows[0]["Field"] != (string)row["ColumnDBName"])
                            {
                                //Переименовываем колонку
                                try
                                {
                                    DBFunctions.ExecuteCommand("ALTER TABLE `table_" + TableDBName + "` CHANGE `" + row["ColumnDBName_Old"] + "` `" + row["ColumnDBName"] + "` " + col_type);
                                    row["ColumnDBName_Old"] = row["ColumnDBName"];
                                }
                                catch (Exception)
                                {
                                    System.Windows.Forms.MessageBox.Show("Невозможно изменить тип столбца.", "Ошибка", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                                }
                            }
                            else if ((string)foundRows[0]["Type"] != col_type)
                            {
                                //Меняем тип
                                try
                                {
                                    DBFunctions.ExecuteCommand("ALTER TABLE `table_" + TableDBName + "` MODIFY `" + row["ColumnDBName"] + "` " + col_type);
                                }
                                catch (Exception)
                                {
                                    System.Windows.Forms.MessageBox.Show("Невозможно изменить тип столбца.", "Ошибка", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                                }
                            }
                        }
                    }
                }

                //Внесем изменения конфигурационную таблицу
                if (neededStructure.GetChanges() != null)
                {
                    TableStruct ts = new TableStruct();
                    ts.TableName = "tableconfig";
                    string[] p_keys = { "TableConfigID" };
                    ts.p_keys = p_keys;
                    string[] columns = { "ColumnDBName_Old" };
                    ts.columns = columns;

                    DBFunctions.WriteToDB(neededStructure, ts);
                }

                //Удалим лишние колонки
                foreach (DataRow row in CurrentStrurture.Rows)
                {
                    if ((string)row["Field"] == "ID")
                    {
                        continue;
                    }
                    DataRow[] foundRows = neededStructure.Select("ColumnDBName = '" + row["Field"] + "'");
                    if (foundRows.Length == 0)
                    {
                        //Удаляем колонку
                        DBFunctions.ExecuteCommand("ALTER TABLE table_" + TableDBName + " DROP `" + row["Field"] + "`");
                    }
                }

                //Удалим лишние таблицы с множественным выбором
                //DataTable multi_ref_tables = DBFunctions.ReadFromDB("SHOW TABLES WHERE tables_in_"  + DBFunctions.db_name + " LIKE 'MultiRef_" + TableDBName + "_%'");
                //foreach(DataRow row in multi_ref_tables.Rows)
                //{
                //   DataRow[] foundRows = neededStructure.Select("'MultiRef_" + TableDBName + "_' + ColumnDBName = '" + row["tables_in_" + DBFunctions.db_name] + "' AND ReferenceMultiSelect = 1");

                /*    if (foundRows.Length == 0)
                 *  {
                 *      //Удаляем таблицу
                 *      DBFunctions.ExecuteCommand("DROP TABLE `" + row["tables_in_" + DBFunctions.db_name] + "`");
                 *
                 *  }
                 * }*/
            }
        }
Example #29
0
        public static void UpdateSelectorScript()
        {
            //Получим таблицу с формулами
            //Список формульных полей
            DataTable dt_formula_fields = DBFunctions.ReadFromDB("SELECT concat('table_',TableDBName,'.',ColumnDBName) AS field FROM tableconfig WHERE ColumnType = 'Формула'");

            string formula_query_text = "SELECT ID";

            foreach (DataRow row in dt_formula_fields.Rows)
            {
                formula_query_text += "," + Convert.ToString(row["field"]) + " AS '" + Convert.ToString(row["field"]) + "'";
            }

            formula_query_text += " FROM table_credprogr";

            DataTable dt_formulas = DBFunctions.ReadFromDB(formula_query_text);

            //Получим текст условия
            string    clause_text;
            DataTable dt_clause = DBFunctions.ReadFromDB("SELECT * FROM where_clauses");

            if (dt_clause.Rows.Count > 0)
            {
                clause_text = (string)dt_clause.Rows[0]["Clause"];
            }
            else
            {
                return;
            }

            //Заменим макросы в условиях
            DataTable dtMacros = DBFunctions.ReadFromDB("SELECT * FROM macros");

            bool macros_found = true;

            while (macros_found)
            {
                macros_found = false;
                foreach (DataRow macro in dtMacros.Rows)
                {
                    if (clause_text.IndexOf("[" + (string)macro["name"] + "]") != -1)
                    {
                        macros_found = true;
                        clause_text  = clause_text.Replace("[" + (string)macro["name"] + "]", (string)macro["macro"]);
                    }
                }
            }

            //Соберем текст запроса
            string    query_text = "SELECT table_credprogr.ID";
            DataTable all_fields = DBFunctions.ReadFromDB("SELECT concat('table_',TableDBName,'.',ColumnDBName) AS field_name,ColumnName,ColumnType,ReferenceMultiSelect,ShowInOffer,TableDBName,ColumnDBName FROM tableconfig WHERE ShowInOffer = 1 OR UseInWhereClause = 1 OR ShowInOfferShort = 1");

            if (all_fields.Rows.Count == 0)
            {
                System.Windows.Forms.MessageBox.Show("Не выбраны поля для отображения", "Ошибка", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                return;
            }

            foreach (DataRow row in all_fields.Rows)
            {
                query_text += ",";

                if ((string)row["ColumnType"] == "Формула")
                {
                    query_text += "CASE table_credprogr.ID ";
                    foreach (DataRow formula_row in dt_formulas.Rows)
                    {
                        query_text += " WHEN " + formula_row["ID"] + " THEN " + formula_row[(string)row["field_name"]];
                    }
                    query_text += " END AS '" + row["ColumnDBName"] + "'";
                }
                else
                {
                    query_text += Convert.ToString(row["field_name"]) + " AS '" + row["ColumnDBName"] + "'";
                }
            }

            query_text += " FROM table_credprogr LEFT JOIN table_clients ON table_clients.id=" + "[ClientID] ";

            //Здесь формируем запрос по полям с ShowInOffer = 1
            DataTable fields_to_show = DBFunctions.ReadFromDB("SELECT ColumnDBName,ColumnName,ColumnType,ColumnReference,ReferenceMultiSelect,ShowFullName FROM tableconfig WHERE ShowInOffer = 1 ORDER BY WebOrder");

            string itog_query = "SELECT DISTINCT inner_select.ID";

            string join_text = "";

            foreach (DataRow row in fields_to_show.Rows)
            {
                itog_query += ",";

                if ((string)row["ColumnType"] == "Справочник" && (bool)row["ReferenceMultiSelect"] == false)
                {
                    itog_query += "ref_name_" + Convert.ToString(row["ColumnReference"]) + "(" + row["ColumnDBName"] + "," + Convert.ToString(row["ShowFullName"]) + ") AS '" + row["ColumnName"] + "'";
                }
                else if ((string)row["ColumnType"] == "Справочник" && (bool)row["ReferenceMultiSelect"] == true)
                {
                    itog_query += "multiref_names_" + Convert.ToString(row["ColumnReference"]) + "(" + row["ColumnDBName"] + ")" + " AS '" + row["ColumnName"] + "'";
                }
                else
                {
                    itog_query += row["ColumnDBName"] + " AS '" + row["ColumnName"] + "'";
                }
            }

            itog_query += " FROM (" + query_text + ") AS inner_select " + join_text + " WHERE ";

            itog_query += clause_text.Replace("@", "");;

            //Занесем результат в базу

            //Удалим текущий скрипт
            DBFunctions.ExecuteCommand("DELETE FROM scripts WHERE script_name = 'OfferSelect'");

            DBFunctions.ExecuteCommand("INSERT INTO scripts VALUES('OfferSelect','" + itog_query.Replace("'", "\\'") + "')");


            //Здесь формируем запрос по полям с ShowInOfferShort = 1
            fields_to_show = DBFunctions.ReadFromDB("SELECT ColumnDBName,ColumnName,ColumnType,ColumnReference,ReferenceMultiSelect,ShowFullName FROM tableconfig WHERE ShowInOfferShort = 1 ORDER BY WebOrder");

            itog_query = "SELECT DISTINCT inner_select.ID";

            foreach (DataRow row in fields_to_show.Rows)
            {
                itog_query += ",";

                if ((string)row["ColumnType"] == "Справочник" && (bool)row["ReferenceMultiSelect"] == false)
                {
                    itog_query += "ref_name_" + Convert.ToString(row["ColumnReference"]) + "(" + row["ColumnDBName"] + "," + Convert.ToString(row["ShowFullName"]) + ") AS '" + row["ColumnName"] + "'";
                }
                else if ((string)row["ColumnType"] == "Справочник" && (bool)row["ReferenceMultiSelect"] == true)
                {
                    itog_query += "multiref_names_" + Convert.ToString(row["ColumnReference"]) + "(" + row["ColumnDBName"] + ")" + " AS '" + row["ColumnName"] + "'";
                }
                else
                {
                    itog_query += row["ColumnDBName"] + " AS '" + row["ColumnName"] + "'";
                }
            }

            itog_query += " FROM (" + query_text + ") AS inner_select  WHERE ";

            itog_query += clause_text.Replace("@", "");

            //Занесем результат в базу

            //Удалим текущий скрипт
            DBFunctions.ExecuteCommand("DELETE FROM scripts WHERE script_name = 'OfferSelectShort'");

            DBFunctions.ExecuteCommand("INSERT INTO scripts VALUES('OfferSelectShort','" + itog_query.Replace("'", "\\'") + "')");
        }
Example #30
0
        static void UpdateReferenceStructure(string ref_db_name)
        {
            //Получим требуемую структуру
            DataTable neededStructure = DBFunctions.ReadFromDB("SELECT * FROM referencesconfig WHERE ReferenceDBName = '" + ref_db_name + "'");

            if (neededStructure.Rows.Count == 0)
            {
                System.Windows.Forms.MessageBox.Show("Неверное наименование справочника.", "Ошибка", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                return;
            }

            bool hierarchical = Convert.ToBoolean(neededStructure.Rows[0]["Hierarchycal"]);

            //Проверим есть ли такая таблица в БД
            bool ref_data_exists      = Convert.ToBoolean(DBFunctions.ReadFromDB("Show tables like 'ref_data_" + ref_db_name + "'").Rows.Count);
            bool ref_hierarchy_exists = Convert.ToBoolean(DBFunctions.ReadFromDB("Show tables like 'ref_hierarchy_" + ref_db_name + "'").Rows.Count);

            if ((hierarchical && ref_data_exists && ref_hierarchy_exists) || //Иерархический, есть обе таблицы
                (!hierarchical && ref_data_exists && !ref_hierarchy_exists)  //Не иерархический, есть одна таблица
                )
            {
                //Всё ок, проверим соответствие состава колонок
                DataTable CurrentStrurture = DBFunctions.ReadFromDB("SHOW COLUMNS FROM ref_data_" + ref_db_name);

                //Создаем и меняем строки
                foreach (DataRow row in neededStructure.Rows)
                {
                    //Ищем колонку
                    DataRow[] foundRows = CurrentStrurture.Select("Field = '" + row["ColumnDBName_Old"] + "'");
                    if (foundRows.Length == 0)
                    {
                        //Добавляем колонку
                        DBFunctions.ExecuteCommand("ALTER TABLE ref_data_" + ref_db_name + " ADD `" + row["ColumnDBName"] + "` " + ConvertTypeToSQL((string)row["ColumnType"]));
                    }
                    else
                    {
                        //Проверяем соответствие имени
                        if ((string)foundRows[0]["Field"] != (string)row["ColumnDBName"])
                        {
                            //Переименовываем колонку
                            try
                            {
                                DBFunctions.ExecuteCommand("ALTER TABLE `ref_data_" + ref_db_name + "` CHANGE `" + row["ColumnDBName_Old"] + "` `" + row["ColumnDBName"] + "` " + ConvertTypeToSQL((string)row["ColumnType"]));
                                row["ColumnDBName_Old"] = row["ColumnDBName"];
                            }
                            catch (Exception)
                            {
                                System.Windows.Forms.MessageBox.Show("Невозможно изменить тип столбца.", "Ошибка", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                            }
                        }
                        else if ((string)foundRows[0]["Type"] != ConvertTypeToSQL((string)row["ColumnType"]))
                        {
                            //Меняем тип
                            try
                            {
                                DBFunctions.ExecuteCommand("ALTER TABLE `ref_data_" + ref_db_name + "` MODIFY `" + row["ColumnDBName"] + "` " + ConvertTypeToSQL((string)row["ColumnType"]));
                            }
                            catch (Exception)
                            {
                                System.Windows.Forms.MessageBox.Show("Невозможно изменить тип столбца.", "Ошибка", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                            }
                        }
                    }
                }

                //Внесем изменения конфигурационную таблицу
                if (neededStructure.GetChanges() != null)
                {
                    TableStruct ts = new TableStruct();
                    ts.TableName = "referencesconfig";
                    string[] p_keys = { "ReferenceConfigID" };
                    ts.p_keys = p_keys;
                    string[] columns = { "ColumnDBName_Old" };
                    ts.columns = columns;

                    DBFunctions.WriteToDB(neededStructure, ts);
                }

                //Удалим лишние колонки
                foreach (DataRow row in CurrentStrurture.Rows)
                {
                    if ((string)row["Field"] == "id" || (string)row["Field"] == "ID")
                    {
                        continue;
                    }
                    if ((string)row["Field"] == "parentid" || (string)row["Field"] == "ParentID")
                    {
                        continue;
                    }
                    DataRow[] foundRows = neededStructure.Select("ColumnDBName = '" + row["Field"] + "'");
                    if (foundRows.Length == 0)
                    {
                        //Удаляем колонку
                        DBFunctions.ExecuteCommand("ALTER TABLE ref_data_" + ref_db_name + " DROP `" + row["Field"] + "`");
                    }
                }

                //Создадим хранимые процедуры и триггеры
                string ref_create_script = (string)DBFunctions.ReadScalarFromDB("SELECT script FROM scripts WHERE script_name = 'Reference_Create'");

                ref_create_script = ref_create_script.Replace("[RefDBName]", ref_db_name);

                DBFunctions.ExecuteScript(ref_create_script);

                return;
            }

            if (ref_data_exists || ref_hierarchy_exists)
            {
                if (System.Windows.Forms.MessageBox.Show("Сменился тип справочника " + ref_db_name + " данные справочника будут удалены. Продолжить?", "Вопрос", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.No)
                {
                    return;
                }
            }

            //Удалим таблицы
            if (ref_data_exists)
            {
                DBFunctions.ExecuteCommand("DROP TABLE `ref_data_" + ref_db_name + "`");
            }

            if (ref_hierarchy_exists)
            {
                DBFunctions.ExecuteCommand("DROP TABLE `ref_hierarchy_" + ref_db_name + "`");
            }

            //Создадим новые таблицы
            //Таблица с данными
            string CommandText = "CREATE TABLE `ref_data_" + ref_db_name + "` (";

            CommandText += "`ID` int(11) NOT NULL AUTO_INCREMENT";
            CommandText += ",`ParentID` int(11) DEFAULT 0";


            foreach (DataRow row in neededStructure.Rows)
            {
                if (row["ColumnType"] == System.DBNull.Value)
                {
                    continue;
                }
                string field_type = ConvertTypeToSQL((string)row["ColumnType"]);
                if (field_type != null)
                {
                    CommandText += ",`" + row["ColumnDBName"] + "` " + field_type + " DEFAULT NULL";
                }
            }

            CommandText += ", PRIMARY KEY (`ID`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8";
            DBFunctions.ExecuteCommand(CommandText);

            //Таблица с иерархией
            if (hierarchical)
            {
                CommandText  = "CREATE TABLE `ref_hierarchy_" + ref_db_name + "` (";
                CommandText += "`ElemID` int(11) NOT NULL";
                CommandText += ",`ParentID` int(11) NOT NULL";
                CommandText += ",`Level` int(11) NOT NULL";
                CommandText += ", PRIMARY KEY (`ElemID`,`ParentID`,`Level`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8";
                DBFunctions.ExecuteCommand(CommandText);
            }

            //Создадим хранимые процедуры и триггеры
            string ref_create_script_inner = (string)DBFunctions.ReadScalarFromDB("SELECT script FROM scripts WHERE script_name = 'Reference_Create'");

            ref_create_script_inner = ref_create_script_inner.Replace("[RefDBName]", ref_db_name);

            DBFunctions.ExecuteScript(ref_create_script_inner);
        }