コード例 #1
0
 private void pbDiagram_MouseClick(object sender, MouseEventArgs e)
 {
     if (isShift && isOpenConstructior)
     {
         TableInDiagram clickedTable = null;
         string         clickedField = null;
         foreach (TableInDiagram t in tablesInForm)
         {
             if (Rectangle.Intersect(new Rectangle(e.X, e.Y, 0, 0), t.rect) != Rectangle.Empty)
             {
                 clickedTable = t;
                 if (clickedTable != null)
                 {
                     for (int i = 0; i < clickedTable.Fields.Count; i++)
                     {
                         Rectangle bufRect = new Rectangle(clickedTable.Fields[i].Marker,
                                                           new Size(clickedTable.Width, clickedTable.Height));
                         if (Rectangle.Intersect(new Rectangle(e.X, e.Y, 0, 0), bufRect) != Rectangle.Empty)
                         {
                             _clicableField = i;
                             clickedField   = clickedTable.Fields[i].name;
                             Field f = clickedTable.Fields[i]; // цвет выделения!
                             f.Brush = Brushes.Green;
                             clickedTable.Fields[i] = f;
                             break;
                         }
                     }
                 }
                 break;
             }
         }
         if (clickedTable != null)
         {
             //rtbQueryConstructor.Text = "Клик на поле `" + clickedTable.nameTable + "`.`" + clickedField + "`";
             //Добавить в список полей
             if (isOpenSelectInConstructor)
             {
                 AddInSelect(clickedTable, clickedField);
             }
             if (isOpenInsertInConstructor)
             {
                 AddInInsert(clickedTable, clickedField);
             }
             if (isOpenUpdateInConstructor)
             {
                 AddInUpdate(clickedTable, clickedField);
             }
             if (isOpenDeleteInConstructor)
             {
                 AddInDelete(clickedTable, clickedField);
             }
         }
     }
 }
コード例 #2
0
 private void pbDiagram_MouseDown(object sender, MouseEventArgs e)
 {
     foreach (TableInDiagram t in tablesInForm)
     {
         if (Rectangle.Intersect(new Rectangle(e.X, e.Y, 0, 0), t.rect) != Rectangle.Empty)
         {
             _mouseDown  = true;
             selectTable = t;
         }
     }
 }
コード例 #3
0
 private void AddInDelete(TableInDiagram clickedTable, string clickedField)
 {
     if (clickedField != null & clickedField != "")
     {
         if (!mainDeleteQuery.TableNames.Contains(clickedTable.NameTable))
         {
             mainDeleteQuery.TableNames.Add(clickedTable.NameTable);
         }
         if (!FindDublicate(dgvDeleteFields, clickedField, 0))
         {
             dgvDeleteFields.Rows.Add("`" + clickedTable.NameTable + "`.`" + clickedField + "`", "",
                                      false);
         }
     }
 }
コード例 #4
0
 private void pbDiagram_MouseUp(object sender, MouseEventArgs e)
 {
     _mouseDown = false;
     if (selectTable != null)
     {
         int max = 0;
         foreach (TableInDiagram t in tablesInForm)
         {
             if (t.endPoint.Y > max)
             {
                 max = t.endPoint.Y;
             }
         }
     }
     selectTable = null;
     pbDiagram.Invalidate();
 }
コード例 #5
0
 private void AddInUpdate(TableInDiagram clickedTable, string clickedField)
 {
     if (mainUpdateQuery.Table == null)
     {
         mainUpdateQuery.Table = clickedTable;
     }
     if (mainUpdateQuery.Table == clickedTable)
     {
         if (!FindDublicate(dgvUpdateFields, clickedField, 0))
         {
             dgvUpdateFields.Rows.Add("`" + clickedTable.NameTable + "`.`" + clickedField + "`", "", "",
                                      new DataGridViewComboBoxCell().DisplayMember = "NONE");
         }
     }
     else
     {
         MessageBox.Show("Запрос INSERT может работать только с одной таблицей!", "Ошибка генерации запроса INSERT",
                         MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
 }
コード例 #6
0
 private void AddInInsert(TableInDiagram clickedTable, string clickedField)
 {
     if (mainInsertQuery.Table == null)
     {
         mainInsertQuery.Table = clickedTable;
     }
     if (mainInsertQuery.Table == clickedTable)
     {
         if (clickedField != "" && clickedField != null)
         {
             if (!FindDublicate(dgvInsertFields, "`" + clickedTable.NameTable + "`.`" + clickedField + "`", 0))
             {
                 dgvInsertFields.Rows.Add("`" + clickedTable.NameTable + "`.`" + clickedField + "`", "");
             }
         }
     }
     else
     {
         MessageBox.Show("Запрос INSERT может работать только с одной таблицей!", "Ошибка генерации запроса INSERT",
                         MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
 }
コード例 #7
0
        private void DownloadFromDbData(MySQLWorker MySQL)
        {
            this.MySQL = MySQL;
            tablesInForm.Clear();
            RelationshipsDrawer.relationships.Clear();
            MySQL.Connection();
            List <string> tableNames         = MySQL.GetTableNames();
            int           startPointMod      = 0;
            List <NamesAndCoordinates> names = null;

            if (File.Exists("Constructor/" + MySQL.Db + ".json"))
            {
                StreamReader sr   = new StreamReader(File.OpenRead("Constructor/" + MySQL.Db + ".json"));
                string       json = sr.ReadToEnd();
                sr.Close();
                names = JsonSerializer.Deserialize <List <NamesAndCoordinates> >(json);
            }
            foreach (string table in tableNames)
            {
                List <Field>   fields     = MySQL.GetFieldsInTable(table);
                Point          startPoint = GetStartPoint(startPointMod, names, table);
                TableInDiagram tID        = new TableInDiagram(startPoint, table, fields, new List <string>());
                tablesInForm.Add(tID);
                startPointMod++;
                this.Invoke(new Action(() =>
                {
                    sLabel.Text = "Обработка таблицы " + table + " " + startPointMod + " из " + tableNames.Count + 1;
                }));
            }
            RelationshipsDrawer.tables        = tablesInForm;
            RelationshipsDrawer.relationships = MySQL.GetRelationships(tableNames);
            pbDiagram.Invalidate();
            this.Invoke(new Action(() =>
            {
                vsbDiagram.Value = 0;
                sLabel.Text      = "Загрузка из БД завершена успешно";
            }));
        }
コード例 #8
0
 private void AddInSelect(TableInDiagram clickedTable, string clickedField)
 {
     if (!FindDublicate(dgvAlias, clickedTable.NameTable, 0))  // если это поле не выбиралось
     {
         int          relCount = mainSelectQuery.useRelationships.Count;
         Relationship r        = FindRelationshipField(clickedTable.NameTable); // поиск таблицы если можно связать
         if (relCount == 0)                                                     //Если связей нет
         {
             //Если такой таблицы не было добавлено, то добавить
             if (!mainSelectQuery.tableNames.Contains(clickedTable.NameTable))
             {
                 mainSelectQuery.tableNames.Add(clickedTable.NameTable);
             }
             //Если такого поля не было выбрано ранее, то выбрать
             if (clickedField != null && clickedField != "" &&
                 !FindDublicate(dgvAlias, "`" + clickedTable.NameTable + "`.`" + clickedField + "`", 0))
             {
                 dgvAlias.Rows.Add("`" + clickedTable.NameTable + "`.`" + clickedField + "`", "");
                 mainSelectQuery.selectExpressions.Add("`" + clickedTable.NameTable + "`.`" + clickedField + "`");
             }
             if (r.columnName != null)
             {
                 dgvJoin.Rows.Add(r.referencedTableName, r.referencedColumnName, r.tableName, r.columnName,
                                  new DataGridViewComboBoxCell().ValueMember = "JOIN");
                 mainSelectQuery.useRelationships.Add(r);
             }
         }
         else //Если связи уже есть
         {
             if (r.tableName == mainSelectQuery.useRelationships[relCount - 1].tableName ||
                 r.referencedTableName == mainSelectQuery.useRelationships[relCount - 1].tableName)
             {
                 if (!mainSelectQuery.useRelationships.Contains(r))
                 {
                     if (clickedField != "" || clickedField != null)
                     {
                         dgvAlias.Rows.Add("`" + clickedTable.NameTable + "`.`" + clickedField + "`", "");
                         mainSelectQuery.selectExpressions.Add("`" + clickedTable.NameTable + "`.`" + clickedField + "`");
                     }
                     dgvJoin.Rows.Add(r.referencedTableName, r.referencedColumnName, r.tableName, r.columnName,
                                      new DataGridViewComboBoxCell().ValueMember = "JOIN");
                     mainSelectQuery.useRelationships.Add(r);
                 }
                 else
                 {
                     if (clickedField != "" || clickedField != null)
                     {
                         dgvAlias.Rows.Add("`" + clickedTable.NameTable + "`.`" + clickedField + "`", "");
                         mainSelectQuery.selectExpressions.Add("`" + clickedTable.NameTable + "`.`" + clickedField + "`");
                     }
                 }
             }
             else
             {
                 MessageBox.Show("Для использования оператора JOIN необходимо связывать таблицы последовательно!");
                 Field f = clickedTable.Fields[_clicableField]; // цвет выделения!
                 f.Brush = Brushes.Black;
                 clickedTable.Fields[_clicableField] = f;
             }
         }
     }
 }