Imports System.Text.RegularExpressions Imports Oracle.ManagedDataAccess.Client Public Class frmSQL_DESIGNER Private _windreamPM As ClassPMWindream Private Sub TBPM_PROFILE_FINAL_INDEXINGBindingNavigatorSaveItem_Click(sender As Object, e As EventArgs) Validate() TBPM_PROFILE_FINAL_INDEXINGBindingSource.EndEdit() 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 TBPM_CONNECTIONTableAdapter.Connection.ConnectionString = MyConnectionString TBPM_CONNECTIONTableAdapter.Fill(DD_DMSLiteDataSet.TBDD_CONNECTION) TBPM_PROFILE_FINAL_INDEXINGTableAdapter.Connection.ConnectionString = MyConnectionString 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_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 Try ' Windream instanziieren _windreamPM = New ClassPMWindream() 'Windream initialisieren (Connection, Session, ... aufbauen) _windreamPM.Init() Catch ex As Exception MsgBox("Fehler bei Initialisieren von windream: " & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Achtung:") End Try cmbIndexe.Items.Clear() Dim indexe = _windreamPM.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 MsgBox("Unexpected Error while loading form: " & ex.Message, MsgBoxStyle.Critical) End Try End Sub 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 Value() As String Get Return SQL_COMMANDTextBox.Text End Get Set(value As String) SQL_COMMANDTextBox.Text = value End Set End Property 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 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 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.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 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 Button1_Click(sender As Object, e As EventArgs) Handles btnAddIndex.Click If cmbIndexe.SelectedIndex <> -1 Then Dim val As String = "[%" & cmbIndexe.Text & "]" Dim altePosition As Integer = Me.SQL_COMMANDTextBox.SelectionStart() Me.SQL_COMMANDTextBox.Text = Me.SQL_COMMANDTextBox.Text.Insert(altePosition, val) Me.SQL_COMMANDTextBox.SelectionStart = altePosition + val.Length End If End Sub Private Sub btnSaveSQLCommand_Click(sender As Object, e As EventArgs) Handles btnSaveSQLCommand.Click If CURRENT_DESIGN_TYPE = "FINAL_INDEX" Then 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 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.Value = 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 val As String = "[%" & cmbControls.Text & "]" Dim altePosition As Integer = Me.SQL_COMMANDTextBox.SelectionStart() Me.SQL_COMMANDTextBox.Text = Me.SQL_COMMANDTextBox.Text.Insert(altePosition, val) Me.SQL_COMMANDTextBox.SelectionStart = altePosition + val.Length End If End Sub Private Sub btnShowConnections_Click(sender As Object, e As EventArgs) Handles btnShowConnections.Click frmConnection.ShowDialog() End Sub End Class