TaskFlow/app/DD_PM_WINDREAM/frmSQL_DESIGNER.vb

297 lines
13 KiB
VB.net

Imports System.Text.RegularExpressions
Imports Oracle.ManagedDataAccess.Client
Imports DD_LIB_Standards
Public Class frmSQL_DESIGNER
Dim CurrentPosition As Integer = 0
Dim CurrentPlaceholders As New Placeholders()
Dim CurrentTableType As String
Dim AtPlaceholderPattern As String = "\[%{1}[a-zA-Z0-9\!\$\&\/\(\)\=\?\,\.\-\;\:_öÖüÜäÄ\#\'\+\*\~\{\}\@\€\<\>\ ]+]{1}" '"\[%[0-9A-Za-z_-]{1,}\]"
Public Class Placeholders
Public Property RecordId As Integer
Public Property ParentRecordId As Integer
Public Property FormId As Integer
End Class
Public Property SQLCommand() As String
Get
Return SQL_COMMANDTextBox.Text
End Get
Set(value As String)
SQL_COMMANDTextBox.Text = value
End Set
End Property
Public Property ConnectionID As Integer
Private Sub TBPM_PROFILE_FINAL_INDEXINGBindingNavigatorSaveItem_Click(sender As Object, e As EventArgs)
Validate()
TableAdapterManager.UpdateAll(Me.DD_DMSLiteDataSet)
End Sub
Private Sub frmSQL_FINAL_INDICES_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
lblSaveFinalIndex.Visible = False
TBDD_CONNECTIONTableAdapter.Connection.ConnectionString = CONNECTION_STRING_ECM
TBDD_CONNECTIONTableAdapter.Fill(DD_DMSLiteDataSet.TBDD_CONNECTION)
If CURRENT_DESIGN_TYPE = "INPUT_INDEX" Then
CURRENT_DT_SQL_CONFIG_TABLE = DatabaseFallback.GetDatatableECM(String.Format("SELECT T.CONNECTION_ID,T1.BEZEICHNUNG AS 'CON_STRING',ISNULL(T.SQL_UEBERPRUEFUNG,'') AS 'SQL_COMMAND' FROM TBPM_PROFILE_CONTROLS T, TBDD_CONNECTION T1 WHERE T.CONNECTION_ID = T1.GUID AND T.GUID = {0}", CURRENT_CONTROL_ID)) ', "frmSQL_FINAL_INDICES_Load1")
ElseIf CURRENT_DESIGN_TYPE = "FINAL_INDEX" Then
CURRENT_DT_SQL_CONFIG_TABLE = DatabaseFallback.GetDatatableECM(String.Format("SELECT T.CONNECTION_ID,T1.BEZEICHNUNG AS 'CON_STRING',ISNULL(T.SQL_COMMAND,'') AS 'SQL_COMMAND' FROM TBPM_PROFILE_FINAL_INDEXING T, TBDD_CONNECTION T1 WHERE T.CONNECTION_ID = T1.GUID AND T.GUID = {0} ORDER BY T.SEQUENCE", CURRENT_INDEX_ID)) ', "frmSQL_FINAL_INDICES_Load2")
ElseIf CURRENT_DESIGN_TYPE = "SQL_SOURCE_TABLE_COLUMN" Then
CURRENT_DT_SQL_CONFIG_TABLE = DatabaseFallback.GetDatatableECM(String.Format("SELECT T.CONNECTION_ID,T1.BEZEICHNUNG AS 'CON_STRING',ISNULL(T.SQL_COMMAND,'') AS 'SQL_COMMAND' FROM TBPM_CONTROL_TABLE T, TBDD_CONNECTION T1 WHERE T.CONNECTION_ID = T1.GUID AND T.GUID = {0}", CURRENT_INDEX_ID)) ', "frmSQL_FINAL_INDICES_Load2")
End If
If CURRENT_DESIGN_TYPE = "SQL_OVERVIEW" Then
cmbConnection.Enabled = False
btnShowConnections.Enabled = False
Else
cmbConnection.Enabled = True
btnShowConnections.Enabled = True
End If
If (CURRENT_DESIGN_TYPE = "INPUT_INDEX") Or CURRENT_DESIGN_TYPE = "FINAL_INDEX" Or CURRENT_DESIGN_TYPE = "SQL_BTNFINISH" Or CURRENT_DESIGN_TYPE = "SQL_SOURCE_TABLE_COLUMN" Then
If Not IsNothing(CURRENT_DT_SQL_CONFIG_TABLE) Then
If CURRENT_DT_SQL_CONFIG_TABLE.Rows.Count = 1 Then
cmbConnection.SelectedValue = CURRENT_DT_SQL_CONFIG_TABLE.Rows(0).Item("CONNECTION_ID")
cmbConnection.FindStringExact(CURRENT_DT_SQL_CONFIG_TABLE.Rows(0).Item("CON_STRING"))
End If
End If
Dim oSQL = String.Format("SELECT NAME FROM TBPM_PROFILE_CONTROLS WHERE PROFIL_ID = {0} AND CTRL_TYPE <> 'LBL' ORDER BY NAME", CURRENT_ProfilGUID)
Dim oDatatable As DataTable = DatabaseFallback.GetDatatableECM(oSQL) ', "frmSQL_FINAL_INDICES_Load3")
cmbControls.DataSource = oDatatable
cmbControls.DisplayMember = oDatatable.Columns(0).ColumnName
cmbControls.Visible = True
lblControls.Visible = True
btnAddControl.Visible = True
cmbIndexe.Items.Clear()
If IDB_ACTIVE = False Then
If MyIndicies IsNot Nothing Then
For Each index As String In MyIndicies
cmbIndexe.Items.Add(index)
Next
cmbIndexe.SelectedIndex = -1
End If
'cmbIndexe.Enabled = True
'lbIndexe.Enabled = True
'btnAddIndex.Enabled = True
Else
Dim oAttributes = IDBData.GetIndicesByBE(CURRENT_OBJECTTYPE)
If oAttributes IsNot Nothing Then
For Each oAttribute As String In oAttributes
cmbIndexe.Items.Add(oAttribute)
Next
cmbIndexe.SelectedIndex = -1
End If
'cmbIndexe.Enabled = False
'lbIndexe.Enabled = False
'btnAddIndex.Enabled = False
End If
Else
cmbControls.Visible = False
lblControls.Visible = False
btnAddControl.Visible = False
cmbIndexe.Visible = False
lbIndexe.Visible = False
btnAddIndex.Visible = False
End If
Catch ex As Exception
LOGGER.Error(ex)
MsgBox("Unexpected Error while loading form: " & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Sub SQL_COMMANDTextBox_TextChanged(sender As Object, e As EventArgs) Handles SQL_COMMANDTextBox.TextChanged, SQL_COMMANDTextBox.Click
CurrentPosition = SQL_COMMANDTextBox.SelectionStart
If SQL_COMMANDTextBox.Text.Trim().Count = 0 Then
dgvPlaceholders.Enabled = False
Else
dgvPlaceholders.Enabled = True
End If
CheckForPlaceholders()
End Sub
Private Sub CheckForPlaceholders()
Dim text As String = SQL_COMMANDTextBox.Text
dgvPlaceholders.Rows.Clear()
Dim patterns As List(Of clsPatterns.Pattern) = clsPatterns.GetAllPatterns(text)
For Each pattern In patterns
dgvPlaceholders.Rows.Add({pattern.ToString, ""})
Next
'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 btnTestSQL_Click(sender As Object, e As EventArgs) Handles btnTestSQL.Click
Dim query As String = SQL_COMMANDTextBox.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
Dim pattern As New clsPatterns.Pattern(placeholder)
query = clsPatterns.ReplacePattern(query, pattern.Type, 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
GridControl1.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.Get_ConnectionString(connectionId)
connectionString = DatabaseFallback.GetConnectionString(connectionId)
If connectionString <> "" Then
If (connectionString.StartsWith("Server=") And connectionString.Contains("Database=")) Or (connectionString.StartsWith("Data Source=") And connectionString.Contains("Initial Catalog=")) 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 DEBUG = True Then LOGGER.Info(" >> 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
LOGGER.Error(ex)
LOGGER.Info(" - Unvorhergesehener Fehler bei TestSQL - Fehler: " & vbNewLine & ex.Message)
MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler bei TestSQL:")
Return Nothing
End Try
End Function
Private Sub btnSaveSQLCommand_Click(sender As Object, e As EventArgs) Handles btnSaveSQLCommand.Click
If CURRENT_DESIGN_TYPE = "FINAL_INDEX" Then
' SQL wird nicht hier, sondern in frmAdministration gespeichert
lblSaveFinalIndex.Visible = True
lblSaveFinalIndex.Text = "SQL für finalen Index wurde erfolgreich gespeichert! " & Now.ToString
End If
SQLCommand = SQL_COMMANDTextBox.Text
ConnectionID = cmbConnection.SelectedValue
CURRENT_CONN_ID = ConnectionID
End Sub
Private Sub btnAddControl_Click(sender As Object, e As EventArgs) Handles btnAddControl.Click
If cmbControls.SelectedIndex <> -1 Then
Dim value As String = clsPatterns.WrapPatternValue(clsPatterns.PATTERN_CTRL, cmbControls.Text)
InsertAtSelection(value)
End If
End Sub
Private Sub btnAddStatic_Click(sender As Object, e As EventArgs) Handles btnAddStatic.Click
If cmbStatic.SelectedIndex <> -1 Then
Dim value As String = clsPatterns.WrapPatternValue(clsPatterns.PATTERN_INT, cmbStatic.Text)
InsertAtSelection(value)
End If
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnAddIndex.Click
If cmbIndexe.SelectedIndex <> -1 Then
Dim oValue As String
If IDB_ACTIVE = False Then
oValue = clsPatterns.WrapPatternValue(clsPatterns.PATTERN_WMI, cmbIndexe.Text)
Else
oValue = clsPatterns.WrapPatternValue(clsPatterns.PATTERN_IDBA, cmbIndexe.Text)
End If
InsertAtSelection(oValue)
End If
End Sub
Private Sub btnAddUser_Click(sender As Object, e As EventArgs) Handles btnAddUser.Click
If cmbUser.SelectedIndex <> -1 Then
Dim value As String = clsPatterns.WrapPatternValue(clsPatterns.PATTERN_USER, cmbUser.Text)
InsertAtSelection(value)
End If
End Sub
Private Sub InsertAtSelection(str As String)
Dim altePosition As Integer = SQL_COMMANDTextBox.SelectionStart()
SQL_COMMANDTextBox.Text = SQL_COMMANDTextBox.Text.Insert(altePosition, str)
SQL_COMMANDTextBox.SelectionStart = altePosition + str.Length
End Sub
Private Sub btnShowConnections_Click(sender As Object, e As EventArgs) Handles btnShowConnections.Click
frmConnection.ShowDialog()
End Sub
Private Sub cmbConnection_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbConnection.SelectedIndexChanged
End Sub
Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click
End Sub
End Class