Monorepo/Controls.SQLEditor/frmSQLEditor.vb
2021-04-26 15:21:18 +02:00

146 lines
5.1 KiB
VB.net

Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Patterns
Imports DigitalData.Modules.Language.Utils
Imports DigitalData.GUIs.Common
Imports DevExpress.XtraGrid.Views.Grid
Public Class frmSQLEditor
Public SQLString As String
Private LogConfig As LogConfig
Private SQLServer As MSSQLServer
Private CurrentPosition As String
Private Placeholders As New List(Of SqlPlaceholder)
Private Connections As New List(Of SqlConnection)
Private Patterns As ClassPatterns
Friend Class SqlPlaceholder
Public Property Placeholder As String
Public Property Replacement As String
End Class
Friend Class SqlConnection
Public Property Guid As Integer
Public Property Name As String
Public Property Description As String
Public Property Provider As String
Public Property Server As String
Public Property Database As String
Public Property Username As String
Public Property Password As String
Public Overrides Function ToString() As String
Return Name
End Function
End Class
Public Sub New(LogConfig As LogConfig, SQLServer As MSSQLServer)
MyBase.New(LogConfig)
InitializeComponent()
Me.LogConfig = LogConfig
Me.SQLServer = SQLServer
Patterns = New ClassPatterns(LogConfig)
End Sub
Private Sub frmSQLEditor_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
txtSQL.Text = SQLString
BindingSourcePlaceholder.DataSource = Placeholders
Placeholders.Clear()
Connections = Load_SQLConnections()
Dim oViews As New List(Of GridView) From {GridViewResult, GridViewPlaceholder}
Dim oGridBuilder As New GridBuilder(oViews)
oGridBuilder.
WithDefaults().
WithReadOnlyOptions(GridViewResult)
cmbConnections.Properties.Items.Clear()
For Each oConnection In Connections
cmbConnections.Properties.Items.Add(oConnection)
Next
Catch ex As Exception
ShowErrorMessage(ex)
End Try
End Sub
Private Function Load_SQLConnections()
Try
Dim oSQL As String = "SELECT * FROM TBDD_CONNECTION"
Dim oTable As DataTable = SQLServer.GetDatatable(oSQL)
Dim oConnections As New List(Of SqlConnection)
For Each oRow As DataRow In oTable.Rows
oConnections.Add(New SqlConnection With {
.Guid = NotNull(oRow.Item("GUID"), String.Empty),
.Name = NotNull(oRow.Item("BEZEICHNUNG"), String.Empty),
.Provider = NotNull(oRow.Item("SQL_PROVIDER"), String.Empty),
.Database = NotNull(oRow.Item("DATENBANK"), String.Empty),
.Description = NotNull(oRow.Item("BEMERKUNG"), String.Empty),
.Password = NotNull(oRow.Item("PASSWORD"), String.Empty),
.Server = NotNull(oRow.Item("SERVER"), String.Empty),
.Username = NotNull(oRow.Item("USERNAME"), String.Empty)
})
Next
Return oConnections
Catch ex As Exception
ShowErrorMessage(ex)
Return New List(Of SqlConnection)
End Try
End Function
Private Sub BarButtonItem1_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem1.ItemClick
SQLString = txtSQL.Text
DialogResult = DialogResult.OK
Close()
End Sub
Private Sub BarButtonItem2_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem2.ItemClick
If cmbConnections.SelectedItem Is Nothing Then
MsgBox("Bitte wählen sie einen ")
Exit Sub
End If
Try
Dim oSQL As String = txtSQL.EditValue.ToString
Dim oConnection As SqlConnection = cmbConnections.SelectedItem
Dim oConnectionString = SQLServer.GetConnectionString(oConnection.Server, oConnection.Database, oConnection.Username, oConnection.Password)
Dim oTable As DataTable = SQLServer.GetDatatableWithConnection(oSQL, oConnectionString)
GridControlResult.DataSource = oTable
Catch ex As Exception
ShowErrorMessage(ex)
End Try
End Sub
Private Sub txtSQL_EditValueChanged(sender As Object, e As EventArgs) Handles txtSQL.EditValueChanged
CurrentPosition = txtSQL.SelectionStart
Dim oValue = txtSQL.EditValue.ToString.Trim
If oValue.Length > 0 Then
GridControlPlaceholders.Enabled = True
CheckForPlaceholders(txtSQL.EditValue)
Else
GridControlPlaceholders.Enabled = False
End If
End Sub
Private Sub CheckForPlaceholders(Text As String)
Placeholders.Clear()
For Each oPattern In Patterns.GetAllPatterns(Text)
Placeholders.Add(New SqlPlaceholder With {
.Placeholder = oPattern.ToString,
.Replacement = ""
})
Next
End Sub
End Class