Imports System.Text.RegularExpressions Imports Oracle.ManagedDataAccess.Client Imports DD_LIB_Standards Public Class frmSQL_DESIGNER 'Private _windreamPM As ClassPMWindream 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 TBDD_CONNECTIONTableAdapter.Fill(DD_DMSLiteDataSet.TBDD_CONNECTION) CURRENT_DT_SQL_CONFIG_TABLE = ClassDatabase.Return_Datatable(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), True) If CURRENT_DESIGN_TYPE = "INPUT_INDEX" Then If CURRENT_DT_SQL_CONFIG_TABLE.Rows.Count > 0 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")) SQL_COMMANDTextBox.Text = CURRENT_DT_SQL_CONFIG_TABLE.Rows(0).Item("SQL_COMMAND") Else SQL_COMMANDTextBox.Text = String.Empty End If End If Try ' Windream instanziieren '_windreamPM = New ClassPMWindream() 'Windream initialisieren (Connection, Session, ... aufbauen) '_windreamPM.Create_Session() Catch ex As Exception LOGGER.Error(ex) MsgBox("Fehler bei Initialisieren von windream: " & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Achtung:") End Try cmbIndexe.Items.Clear() Dim indexe = WINDREAM.GetIndicesByObjecttype(CURRENT_OBJECTTYPE) If indexe IsNot Nothing Then For Each index As String In indexe Me.cmbIndexe.Items.Add(index) Next Me.cmbIndexe.SelectedIndex = -1 End If If CURRENT_DESIGN_TYPE = "INPUT_INDEX" Then Dim sql = String.Format("SELECT NAME FROM TBPM_PROFILE_CONTROLS WHERE PROFIL_ID = {0} AND CTRL_TYPE <> 'LBL' ORDER BY NAME", CURRENT_ProfilGUID) Dim DT As DataTable = ClassDatabase.Return_Datatable(sql, True) cmbControls.DataSource = DT cmbControls.DisplayMember = DT.Columns(0).ColumnName cmbControls.Visible = True lblControls.Visible = True btnAddControl.Visible = True Else cmbControls.Visible = False lblControls.Visible = False btnAddControl.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 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.Get_ConnectionString(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 LOG_ERRORS_ONLY = 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 'TBPM_PROFILE_FINAL_INDEXINGTableAdapter.cmdUpdateSQL(cmbConnection.SelectedValue, SQL_COMMANDTextBox.Text, Environment.UserName, CURRENT_INDEX_ID) lblSaveFinalIndex.Visible = True lblSaveFinalIndex.Text = "SQL für finalen Index wurde erfolgreich gespeichert! " & Now.ToString Me.SQLCommand = SQL_COMMANDTextBox.Text Me.ConnectionId = cmbConnection.SelectedValue ElseIf CURRENT_DESIGN_TYPE = "INPUT_INDEX" Then Dim command = SQL_COMMANDTextBox.Text command = command.Replace("'", "''") Dim upd As String = String.Format("UPDATE TBPM_PROFILE_CONTROLS SET CONNECTION_ID = {0} , SQL_UEBERPRUEFUNG = '{1}' WHERE GUID = {2}", cmbConnection.SelectedValue, command, CURRENT_CONTROL_ID) If ClassDatabase.Execute_non_Query(upd, True) Then lblSaveFinalIndex.Visible = True lblSaveFinalIndex.Text = "SQL für Indexdisplay wurde erfolgreich gespeichert! " & Now.ToString Else lblSaveFinalIndex.Visible = False End If Me.SQLCommand = SQL_COMMANDTextBox.Text End If 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 value As String = clsPatterns.WrapPatternValue(clsPatterns.PATTERN_WMI, cmbIndexe.Text) InsertAtSelection(value) 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 End Class