Benutzer-Werkzeuge

Webseiten-Werkzeuge


k21:k21.3:k21.3.5:start

21.3.5 Projekt – Konsolen-Client 'mysql'

Auch in diesem Projekt werden die Themen 'Prozess-Steuerung' und 'Prozess-Daten' im Zusammenhang mit dem Einsatz der Instruktionen SHELL und EXEC aufgegriffen. Es wird die Basis für eine GUI für den interaktiven Konsolen-Client 'mysql' vorgestellt.

GUI1

Abbildung 21.3.5.1: Basis-GUI für das Konsolen-Programm 'mysql'

Sie können das Projekt in vielfältiger Weise zu Ihrer GUI für den Konsolen-Client 'mysql' ausbauen, die sich an den zu bearbeitenden Aufgaben sowie an den eigenen Vorstellungen orientiert. Folgende Erweiterungen wären denkbar:

  • Anmelde-Formular (DB-Server, DB-User, DB-User-Passwort)
  • Auswahl aller relevanten Datenbanken und der zu dieser Datenbank gehörenden Tabellen
  • Ausgabe der angefragten Daten in unterschiedlichen Formaten → XML, HTML
  • BackUp-Funktionen (Konsolen-Programm 'mysqldump')
  • DB-Reports
  • Daten-Export und Daten-Import (csv-Dateien)

In diesem Projekt können Sie nicht nur den Konsolen-Client 'mysql' einsetzen, sondern auch die Konsolen-Clients 'sqlite3' für SQLite3 oder 'psql' für Postgres-Datenbanken, sofern Sie diese Clients installiert haben.

SQLite3

Abbildung 21.3.5.2: Basis-GUI für das Konsolen-Programm 'sqlite3'

In den folgenden Abschnitten wird der Konsolen-Client 'mysql' eingesetzt:

GUI

Abbildung 21.3.5.3: GUI nach dem Start des Clients 'mysql'

Nach dem Start des externen Programms 'mysql' sehen Sie den Namen des externen DB-Clients und die PID des gestarteten Prozesses sowie den Begrüßungstext des Datenbank-Clients in der Ausgabe-Komponente. Danach arbeiten Sie wie in einer normalen Konsole – mit dem Unterschied, dass Sie jetzt alle Ausgaben mit dem Gambas-Programm unter den o.a. Aspekten von Programm-Erweiterungen bearbeiten können:

GUI4

Abbildung 21.3.5.4: Anzeige einer Abfrage – Client 'mysql'

Einige Besonderheiten kennzeichnen das vorgestellte Projekt:

  • Das Projekt verwendet eine neue Komponente. Die neue Komponente heißt HistoryBox und wird in der Klasse HistoryBox zur Verfügung gestellt.
  • Das Projekt nutzt die neue Komponente, denn diese verfügt als Erweiterung der Komponente TextBox über eine sogenannte History.
  • Sie können in der HistoryBox die Pfeiltasten benutzen, um wie in einer Konsole nach bereits eingegebenen Eingaben zu suchen.
  • Die Klassen HistoryBox, History und _HistoryOptions wurden von Tobias Boege entwickelt. Sie wurden in der Phase der Erprobung des vorgestellten Projektes getestet.


HistoryBox

Wie bei allen Komponenten üblich, wurde auch der HistoryBox von den Autoren ein Icon spendiert, das Sie in der IDE im Fenster Eigenschaften unter 'Form' sehen. Das Icon muss im Projektverzeichnis in einem unsichtbaren Ordner .hidden/control als Bild vom Typ 'png' eingefügt werden, damit es in der IDE im virtuellen Ordner 'Projekt' zu sehen ist.

  • Alle Komponenten – außer der TextArea für die Ausgabe der Daten – wurden in einem Container HBox platziert, die auch ein nicht sichtbares Panel zwischen der Komponente PictureBox und den anderen Komponenten enthält. Die Weite des Panels passt sich dynamisch an die Fenstergröße an und hält so alle Komponenten am rechten Rand.
  • Die Ausnahme bildet die PictureBox, die permanent am linken Rand positioniert bleibt. Als Bilder werden je nach Prozesszustand unterschiedlich farbige Bilder eingefügt, die den Eindruck einer farbigen LED erzeugen. Die LED signalisiert den Zustand des gestarteten Prozesses:

GUI5

Abbildung 21.3.5.5: Der DB-Client wurde beendet

Es gibt einige Programme – wie die vorgestellten DB-Clients – die ihre Fehlerausgaben permanent auf die Standard-Ausgabe umlenken. Somit entfällt bei diesen Programmen diese Prozedur:

Public Sub myProcess_Error(sFehler As String)
' …
End ' myProcess_Error(..)

Der Quelltext wird vollständig angegeben:

' Gambas class file
 
Private $hProcess As Process
 
' Private sDBClientName As String = "sqlite3"
' Private sStartParameter As String = ""
Private sDBClientName As String = "mysql"
Private sStartParameter As String = "-f -n -vvv -u root -pYourMySQLPassword4SQLRoot"
 
Public Sub Form_Open()
  FMain.Center
  FMain.Resizable = True
  FMain.Arrangement = Arrange.Vertical
  txaOutput.Expand = True
  txaOutput.Clear
  HBoxSpacing.Height = 8
  HBox.Spacing = True
  HBox.Height = 24
  pDynamicPanel.Expand = True
 
  txbHistoryEingabe.Foreground = Color.Gray
  txbHistoryEingabe.Alignment = Align.Center
  txbHistoryEingabe.Text = "*** SQL-Anweisung eingeben und mit ENTER-Taste aktivieren ***" 
  txbHistoryEingabe.ReadOnly = True
  txbHistoryEingabe.History = New History(50)
 
  SetLEDColor("orange")
 
End ' Form_Open()
 
Public Sub btnProcessStart_Click()
 ProcessStart()
 FMain.Text = "Datenbank-Client " & Upper(sDBClientName) & "   :   PID = " &  $hProcess.Id
 txbHistoryEingabe.Alignment = Align.Normal
End ' btnProcessStart
 
Public Sub btnTextAreaClear_Click()
  txaOutput.Clear
  txbHistoryEingabe.SetFocus
End ' btnTextAreaClear
 
Public Sub btnClose_Click()
  FMain.Close
End ' btnClose_Click()
 
'*******************************************************************************************
 
Public Sub ProcessStart()
   Dim sCommand As String
 
  txbHistoryEingabe.Foreground = Color.Black
  txbHistoryEingabe.Clear
  txaOutput.Clear
 
  sCommand = sDBClientName & Chr(32) & sStartParameter
  $hProcess = Shell sCommand For Input Output As "myProcess"
 
  txaOutput.Insert(gb.NewLine)
  txbHistoryEingabe.ReadOnly = False
  txbHistoryEingabe.SetFocus  
  btnProcessStart.Enabled = False
  SetLEDColor("green")
 
End ' ProcessStart()
 
Public Sub myProcess_Read()
  Dim sPuffer As String
 
  txaOutput.Insert(gb.NewLine)
  sPuffer = ""
  Read #$hProcess, sPuffer, Lof($hProcess)
 
  Select sDBClientName  
  Case "mysql"
    sPuffer = Replace(sPuffer, "mysql>", "System-User: " & User.Name & " # >" & gb.NewLine)
  Case "sqlite3"
    sPuffer = Replace(sPuffer, "sqlite>", gb.NewLine & "System-User: " & User.Name & \ 
                      " # >" & gb.NewLine)
  End Select 
  txaOutput.Insert(sPuffer & gb.NewLine)
 
End ' hProcess_Read()
 
' Public Sub myProcess_Error(sFehler As String)
'   Diese Prozedur kann entfallen, da Fehler-Ausgaben sowohl beim MySQL-Client
'   als auch beim SQLite3-Client intern auf die Standard-Ausgabe umgelenkt werden!
' End ' myProcess_Error(..)
 
Public Sub myProcess_Kill()
  txaOutput.Insert(gb.NewLine)
  txaOutput.Foreground = Color.Red
  txaOutput.Insert("Rückgabewert vom Programm '" & sDBClientName & "' =  " \ 
                    & $hProcess.Value & gb.NewLine)  
  Select Case $hProcess.State
  Case 0
   txaOutput.Insert("Prozess (PID = " & $hProcess.Id & ") wurde normal beendet." & gb.NewLine)
  Case 1
   txaOutput.Insert("Prozess (PID = " & $hProcess.Id & ") wurde gestoppt!" & gb.NewLine)
  Case 2
   txaOutput.Insert("Prozess (PID = " & $hProcess.Id & ") wurde beendet!" & gb.NewLine)
  End Select ' $hProcess.State  
  SetLEDColor("red")
End ' myProcess_Kill()
 
Public Sub WriteToMyProcess(sInput As String)  
   If $hProcess Then
      If $hProcess.State = $hProcess.Running Then
         Print #$hProcess, sInput  
      Endif ' Running ?
   Endif ' Process started ?
End ' WriteToMyProcess(sInput As String)
 
Public Sub txbHistoryEingabe_Activate()
  If txbHistoryEingabe.Text = "" Then Return
' txbHistoryEingabe.Text = Trim(txbHistoryEingabe.Text)  ---> Das erledigt die History-Box selbst
  WriteToMyProcess(txbHistoryEingabe.Text)
' txbHistoryEingabe.Clear   ---> Das erledigt die History-Box selbst
End ' txbHistoryEingabe_Activate()
 
Public Sub txaOutput_Change()
  txaOutput.Pos = Len(txaOutput.Text) ' ---> Sprung in die letzte Zeile
End ' txaOutput_Change()
 
Public Sub SetLEDColor(sLEDColor As String)  
   PictureBox1.Picture = Picture["LED/led_" & sLEDColor & ".svg"]  
End '  SetLEDColor(..)
 
Public Sub Form_Close()
  If $hProcess Then
     txaOutput.SetFocus
     txaOutput.Clear
     txaOutput.Insert(gb.NewLine)
     $hProcess.Kill()
     Wait 2
  Endif ' $hProcess ?
End ' Form_Close()

Download

Wir verwenden Cookies, um unser Internetangebot optimal zu gestalten. Durch weitere Nutzung dieser Webseite stimmen Sie der Verwendung von Cookies zu. Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung
k21/k21.3/k21.3.5/start.txt · Zuletzt geändert: 20.06.2016 (Externe Bearbeitung)

Seiten-Werkzeuge