351 lines
13 KiB
VB.net
351 lines
13 KiB
VB.net
Imports System.Text.RegularExpressions
|
|
Imports Oracle.ManagedDataAccess.Client
|
|
|
|
Public Class frmSQLEditor
|
|
Dim CurrentPosition As Integer = 0
|
|
Dim CurrentPlaceholders As New Placeholders()
|
|
Dim CurrentTableType As String
|
|
|
|
Dim AtPlaceholderPattern As String = "@[A-Za-z_]+"
|
|
|
|
Public Class Placeholders
|
|
Public Property RecordId As Integer
|
|
Public Property ParentRecordId As Integer
|
|
Public Property FormId As Integer
|
|
End Class
|
|
|
|
Public Property Value() As String
|
|
Get
|
|
Return txtValue.Text
|
|
End Get
|
|
Set(value As String)
|
|
txtValue.Text = value
|
|
End Set
|
|
End Property
|
|
|
|
Private Sub frmSQLEditor_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
|
Load_Connections()
|
|
|
|
cmbPlaceholder.SelectedIndex = 0
|
|
|
|
|
|
End Sub
|
|
|
|
Private Sub Load_Connections()
|
|
Try
|
|
'TODO: Diese Codezeile lädt Daten in die Tabelle "DD_DMSDataSet.TBDD_CONNECTION". Sie können sie bei Bedarf verschieben oder entfernen.
|
|
Me.TBDD_CONNECTIONTableAdapter.Connection.ConnectionString = MyConnectionString
|
|
Me.TBDD_CONNECTIONTableAdapter.Fill(Me.DD_DMSDataSet.TBDD_CONNECTION)
|
|
Catch ex As Exception
|
|
ClassLogger.Add(" - Unexpected Error in Load Connections - errpor: " & vbNewLine & ex.Message)
|
|
MsgBox("Unexpected Error in Load Connections: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
|
|
End Try
|
|
|
|
End Sub
|
|
|
|
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
|
|
Dim frm As New frmConnections()
|
|
frm.Show()
|
|
End Sub
|
|
|
|
Private Sub txtValue_TextChanged(sender As Object, e As EventArgs) Handles txtValue.TextChanged, txtValue.Click
|
|
CurrentPosition = txtValue.SelectionStart
|
|
|
|
If txtValue.Text.Trim().Count = 0 Then
|
|
dgvPlaceholders.Enabled = False
|
|
Else
|
|
dgvPlaceholders.Enabled = True
|
|
End If
|
|
|
|
CheckForPlaceholders()
|
|
End Sub
|
|
|
|
Private Sub CheckForPlaceholders()
|
|
Dim count As Integer = 0
|
|
Dim text As String = Me.Value
|
|
Dim atPlaceholderRegex = New Regex(AtPlaceholderPattern, RegexOptions.IgnoreCase)
|
|
Dim matches As MatchCollection = atPlaceholderRegex.Matches(text)
|
|
|
|
dgvPlaceholders.Rows.Clear()
|
|
|
|
For Each match As Match In matches
|
|
dgvPlaceholders.Rows.Add({match.Value, ""})
|
|
Next
|
|
End Sub
|
|
|
|
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles btnAddPlaceholder.Click
|
|
If Not cmbPlaceholder.Text = String.Empty Then
|
|
Dim placeholder As String = cmbPlaceholder.Text
|
|
txtValue.Text = txtValue.Text.Insert(CurrentPosition, placeholder)
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub btnRefreshConnections_Click(sender As Object, e As EventArgs) Handles btnRefreshConnections.Click
|
|
Load_Connections()
|
|
End Sub
|
|
|
|
Private Sub btnTestSQL_Click(sender As Object, e As EventArgs) Handles btnTestSQL.Click
|
|
Dim query As String = txtValue.Text
|
|
|
|
For Each row As DataGridViewRow In dgvPlaceholders.Rows
|
|
Dim placeholder As String = row.Cells(0).Value
|
|
Dim replacement As String = row.Cells(1).Value
|
|
|
|
' Wenn Ersetzung ausgefüllt wurde, Platzhalter damit ersetzen
|
|
If Not String.IsNullOrEmpty(replacement) Then
|
|
query = query.Replace(placeholder, replacement)
|
|
Else
|
|
MsgBox("Bitte geben Sie für den Platzhalter " & placeholder & " einen Wert an!", MsgBoxStyle.Exclamation, "Fehlende Platzhalter Ersetzung")
|
|
Exit Sub
|
|
End If
|
|
Next
|
|
|
|
Dim ds As DataSet = ExecuteWithConnection(cmbConnection.SelectedValue, query)
|
|
|
|
If ds IsNot Nothing Then
|
|
dgvResult.DataSource = ds.Tables(0)
|
|
End If
|
|
|
|
|
|
End Sub
|
|
|
|
Private Function ExecuteWithConnection(connectionId As Integer, sql As String) As DataSet
|
|
Try
|
|
|
|
Dim connectionString As String
|
|
|
|
connectionString = ClassDatabase.GetConnectionString(connectionId)
|
|
|
|
If connectionString <> "" Then
|
|
|
|
If connectionString.StartsWith("Server=") And connectionString.Contains("Database=") Then
|
|
Dim sqlConnection As SqlClient.SqlConnection
|
|
Dim sqlCommand As SqlClient.SqlCommand
|
|
Dim sqlAdapter As New SqlClient.SqlDataAdapter
|
|
Dim dataset As New DataSet
|
|
|
|
sqlConnection = New SqlClient.SqlConnection(connectionString)
|
|
sqlConnection.Open()
|
|
|
|
sqlCommand = New SqlClient.SqlCommand(sql, sqlConnection)
|
|
|
|
sqlAdapter.SelectCommand = sqlCommand
|
|
sqlAdapter.Fill(dataset)
|
|
|
|
Return dataset
|
|
ElseIf connectionString.Contains("dsn=") Then 'ODBC-Connection
|
|
Dim sqlConnection As Odbc.OdbcConnection
|
|
Dim sqlCommand As Odbc.OdbcCommand
|
|
Dim sqlAdapter As New Odbc.OdbcDataAdapter
|
|
Dim dataset As New DataSet
|
|
|
|
sqlConnection = New Odbc.OdbcConnection(connectionString)
|
|
sqlConnection.Open()
|
|
|
|
sqlCommand = New Odbc.OdbcCommand(sql, sqlConnection)
|
|
|
|
sqlAdapter.SelectCommand = sqlCommand
|
|
sqlAdapter.Fill(dataset)
|
|
|
|
Return dataset
|
|
Else
|
|
|
|
If LogErrorsOnly = True Then ClassLogger.Add(" >> It's an Oracle-Connection (ExecuteWithConnection)", False)
|
|
Dim sqlConnection As OracleConnection
|
|
Dim sqlCommand As OracleCommand
|
|
Dim sqlAdapter As New OracleDataAdapter
|
|
Dim dataset As New DataSet
|
|
|
|
sqlConnection = New OracleConnection(connectionString)
|
|
sqlConnection.Open()
|
|
|
|
sqlCommand = New OracleCommand(sql, sqlConnection)
|
|
|
|
sqlAdapter.SelectCommand = sqlCommand
|
|
sqlAdapter.Fill(dataset)
|
|
|
|
Return dataset
|
|
End If
|
|
Else
|
|
MsgBox("Keine gültige ConnectionID", MsgBoxStyle.Exclamation)
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
ClassLogger.Add(" - Unvorhergesehener Fehler bei TestSQL - Fehler: " & vbNewLine & ex.Message)
|
|
MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler bei TestSQL:")
|
|
Return Nothing
|
|
End Try
|
|
End Function
|
|
|
|
|
|
Private Sub EnableColumns(Optional enabled = True)
|
|
cmbSelectColumns.Enabled = enabled
|
|
cmbWhereColumns.Enabled = enabled
|
|
End Sub
|
|
|
|
Private Sub EnableTables()
|
|
cmbFromTables.Enabled = True
|
|
End Sub
|
|
|
|
Private Sub radioTable_CheckedChanged(sender As Object, e As EventArgs) Handles radioTable.CheckedChanged
|
|
CurrentTableType = "TABLE"
|
|
EnableTables()
|
|
End Sub
|
|
|
|
Private Sub radioView_CheckedChanged(sender As Object, e As EventArgs) Handles radioView.CheckedChanged
|
|
CurrentTableType = "VIEW"
|
|
EnableTables()
|
|
End Sub
|
|
|
|
Private Sub GetColumns(tableName As String, ByRef combobox As ComboBox)
|
|
Try
|
|
Dim CS As String
|
|
CS = ClassDatabase.GetConnectionString(cmbConnection.SelectedValue)
|
|
Dim typeCS As String = ClassDatabase.Execute_Scalar("SELECT SQL_PROVIDER FROM TBDD_CONNECTION WHERE GUID = " & cmbConnection.SelectedValue, True)
|
|
Dim SQL As String
|
|
Dim DT As DataTable
|
|
If typeCS.ToUpper = "Oracle".ToUpper Then
|
|
SQL = "select COLUMN_NAME from USER_TAB_COLS where TABLE_NAME='" & tableName & "' order by COLUMN_NAME"
|
|
DT = ClassDatabase.Oracle_Return_Datatable(SQL, CS, True)
|
|
Else
|
|
SQL = "SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('" & tableName & "') ORDER BY name"
|
|
DT = ClassDatabase.Return_Datatable_CS(SQL, CS, True)
|
|
End If
|
|
|
|
If DT IsNot Nothing Then
|
|
combobox.Items.Clear()
|
|
For Each row As DataRow In DT.Rows
|
|
combobox.Items.Add(row.Item(0))
|
|
Next
|
|
End If
|
|
Catch ex As Exception
|
|
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error in GetColumns:")
|
|
End Try
|
|
End Sub
|
|
|
|
Private Sub GetColumns(tableName As String, ByRef combobox As DevExpress.XtraEditors.CheckedComboBoxEdit)
|
|
Dim SQL As String = "SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('" & tableName & "') ORDER BY name"
|
|
Dim ds As DataSet = ExecuteWithConnection(cmbConnection.SelectedValue, SQL)
|
|
|
|
If ds IsNot Nothing Then
|
|
combobox.Properties.Items.Clear()
|
|
|
|
For Each row As DataRow In ds.Tables(0).Rows
|
|
combobox.Properties.Items.Add(row.Item(0))
|
|
Next
|
|
End If
|
|
End Sub
|
|
|
|
|
|
Private Sub cmbTables_DropDown(sender As Object, e As EventArgs) Handles cmbFromTables.DropDown
|
|
Dim type As String
|
|
|
|
If CurrentTableType = "TABLE" Then
|
|
type = "'BASE TABLE'"
|
|
ElseIf CurrentTableType = "VIEW" Then
|
|
type = "'VIEW'"
|
|
End If
|
|
|
|
Dim SQL As String = "SELECT TABLE_NAME from information_schema.tables where TABLE_TYPE = " & type & " ORDER BY TABLE_NAME"
|
|
Dim ds As DataSet = ExecuteWithConnection(cmbConnection.SelectedValue, SQL)
|
|
|
|
If ds IsNot Nothing Then
|
|
cmbFromTables.Items.Clear()
|
|
|
|
For Each row As DataRow In ds.Tables(0).Rows
|
|
cmbFromTables.Items.Add(row.Item(0))
|
|
Next
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub cmbColumns_DropDown(sender As Object, e As EventArgs) Handles cmbSelectColumns.DropDown
|
|
Dim table = cmbFromTables.Text
|
|
GetColumns(table, cmbSelectColumns)
|
|
End Sub
|
|
|
|
Private Sub cmbWhereColumns_DropDown(sender As Object, e As EventArgs) Handles cmbWhereColumns.DropDown
|
|
Dim table = cmbFromTables.Text
|
|
GetColumns(table, cmbWhereColumns)
|
|
End Sub
|
|
|
|
Private Sub cmbFromTables_SelectedIndexChanged() Handles cmbFromTables.SelectedIndexChanged
|
|
If cmbFromTables.Text <> "" Then
|
|
EnableColumns()
|
|
Else
|
|
EnableColumns(False)
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub queryBuilder_Changed(sender As Object, e As EventArgs) Handles cmbSelectColumns.SelectedIndexChanged, cmbFromTables.SelectedIndexChanged, cmbWhereColumns.SelectedIndexChanged, cmbWhereOperator.SelectedIndexChanged, txtCondition.TextChanged
|
|
Dim sql = ""
|
|
Dim column, table, column2, op, condition As String
|
|
Dim isNumberRegex = New Regex("^\d+$")
|
|
|
|
column = cmbSelectColumns.Text
|
|
table = cmbFromTables.Text
|
|
column2 = cmbWhereColumns.Text
|
|
op = cmbWhereOperator.Text
|
|
condition = txtCondition.Text
|
|
|
|
|
|
If column <> "" And table <> "" Then
|
|
|
|
sql = String.Format("SELECT [{0}] FROM [{1}]", column, table)
|
|
|
|
If column2 <> "" And op <> "" And condition <> "" Then
|
|
|
|
If isNumberRegex.Match(condition).Success = False Then
|
|
condition = String.Format("'{0}'", condition)
|
|
End If
|
|
|
|
sql &= String.Format(" WHERE [{0}] {1} {2}", column2, op, condition)
|
|
|
|
End If
|
|
|
|
End If
|
|
|
|
txtValue.Text = sql
|
|
|
|
End Sub
|
|
|
|
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
|
|
Try
|
|
Dim sql_comamnd As String = txtValue.Text
|
|
If txtValue.Text.Contains("'") Then
|
|
sql_comamnd = txtValue.Text.Replace("'", "''")
|
|
End If
|
|
Dim upd As String = "UPDATE TBPMO_CONTROL SET SQL_COMMAND_1 = '" & sql_comamnd & "', CONNECTION_ID_1 = " & cmbConnection.SelectedValue & ", CHANGED_WHO = '" & USER_USERNAME & "' WHERE GUID = " & CURRENT_CONTROL_ID
|
|
If ClassDatabase.Execute_non_Query(upd, True) Then
|
|
MsgBox("SQL-Befehl erfolgreich gespeichert!", MsgBoxStyle.Exclamation)
|
|
End If
|
|
Catch ex As Exception
|
|
ClassLogger.Add(" - Unexpected Error in Save SQL-Command for control - error: " & vbNewLine & ex.Message)
|
|
MsgBox("Unexpected Error in Save SQL-Command for control - error: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
|
|
End Try
|
|
End Sub
|
|
|
|
Private Sub frmSQLEditor_Shown(sender As Object, e As EventArgs) Handles Me.Shown
|
|
Try
|
|
Dim connsql = "SELECT BEZEICHNUNG FROM TBDD_CONNECTION WHERE GUID = (SELECT CONNECTION_ID_1 FROM TBPMO_CONTROL WHERE GUID = " & CURRENT_CONTROL_ID & ")"
|
|
Dim con_name = ClassDatabase.Execute_Scalar(connsql, True)
|
|
|
|
If IsDBNull(con_name) Then
|
|
If Me.DD_DMSDataSet.TBDD_CONNECTION.Rows.Count > 0 Then
|
|
cmbConnection.SelectedIndex = 0
|
|
End If
|
|
Else
|
|
If IsNothing(con_name) Then
|
|
If Me.DD_DMSDataSet.TBDD_CONNECTION.Rows.Count > 0 Then
|
|
cmbConnection.SelectedIndex = 0
|
|
End If
|
|
Else
|
|
cmbConnection.SelectedIndex = cmbConnection.FindStringExact(con_name)
|
|
End If
|
|
|
|
End If
|
|
Catch ex As Exception
|
|
ClassLogger.Add(" - Unexpected Error in Get Connection for Control - error: " & vbNewLine & ex.Message)
|
|
MsgBox("Unexpected Error in Get Connection for Control - error: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
|
|
End Try
|
|
End Sub
|
|
End Class |