TaskFlow/app/DD_PM_WINDREAM/frmSQL_DESIGNER.vb
2018-03-08 16:25:09 +01:00

232 lines
10 KiB
VB.net

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.TBPM_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, TBPM_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
End Class