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); } } } }
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; } } }
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); } } }
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(); }
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); } }
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); } }
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 = "Загрузка из БД завершена успешно"; })); }
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; } } } }