Einstieg in MySQL .

Foren um Projekt
öffentlich
Mitglieder


Grundlagen
DC -Home
Projekt Home
Schnellkurs SQL

API Einführung

Installation Linux



Eine Empfehlung der Redaktion

Logo

Einführung MySQL-Client 

für Delphi und Kylix

Dokumentation zur Testanwendung TMySQLClient

Die Testanwendung basiert auf einer Mainform und einem Anmeldedialog, die beide zu Beginn im Speicher erzeugt werden.

Application.CreateForm(TF_Main, F_Main);        Application.CreateForm(TFmySQLAuthDialog, FmySQLAuthDialog);

Nach Programmstart zeigt sich ein Register (PageControl) mit 5 Tabsheets, auf der verschiedene Funktionen der Client-Unit getestet werden können.

Im Entwurfsmodus siehst Du oben außerdem zweimal (!) das MySQL-Symbol für die Clients. Zwei deswegen, weil im Testprogramm einmal mit einem thread-basierten Client gearbeitet wird, und nochmal in einem nicht-hreadbasierten. Erstgenannte haben den Vorteil, dass während des Abarbeitens der Anfrage an den MySQL-Server das Programm weiterarbeiten kann, also der Nutzer z.B. weitere Daten eingeben kann. Bei letztgenannteren wartet die Anwendung, bis der Client zurückkommt.

Tabsheet 1: Connect

Nach Eingabe einer Server-Adresse (z.B. 192.168.0.1 oder 127.0.0.1 für localhost) erscheint der Anmeldedialog und fordert zur Eingabe von Nutzername und Password auf. Bei nicht sicher eingerichteten MySQL-Servern (ja,ja, sowas solls   geben) benutzt Du root und lässt das Kennwort weg. Hast Du Deinen Server bereits abgesichert oder nutzt einen fremden Server zum Testen, setzt Du das jeweilige Passwort und den richtigen Anmeldenamen ein. Groß und Kleinschreibung beachten!!! Kriegst Du keinen Connect hin, versuch extern mit einem anderen Tool (z.B. das hervorragende MySQL-Front von Ansgard Becker). Wenn es dort auch nicht klappt, sind vermutlich Deine Anmeldeinfos (Nutzer/Password) oder beides falsch.

Das Testprogramm informiert Dich durch eine rote oder grüne Ausschrift, ob Du connected bist und somit erfolgreich warst.

Tabsheet 2: Create/Use Database

Im Nicht-geThreadeden Client wird eine Datenbank neu angelegt und per use-befehl zur Nutzung ausgewählt (ab diesem Befehl beziehen sich alle Befehle, die nicht explizit einer bestimmten Datenbank zugeordnet werden, auf die Testdatenbank)

Beachte: Erst mit Aufruf des Execute-Befehls werden die Befehle wirklich an MySQL abgesetzt!

Utility.PrepareCreateDatabase('tmysqltestdb','Create Database');    Utility.PrepareSelectDatabase('tmysqltestdb','Use Database');    Query.Prepare(PChar(M_CreateDatabase.Lines[2]),'Create Table');
Execute;
 

Diese Abfragen finden deshalb non-threaded statt, weil die Auswahl der Datenbank per use natürlich voraussetzt, dass sie vorher angelegt wurde: bei threaded wäre das u.U. nicht gewährleistet, weil der zweite Thread je nach Rechnerlast vor dem ersten zurückkommen könnte.

Anschließend wird auch im ge-thread-eden Client die Testdatenbank vorausgewählt und der Befehl an den Server abgeschickt.

 with mySQLClientThreaded do
 
begin
   
Utility.PrepareSelectDatabase('tmysqltestdb','Use Database');
    Execute;
 end;

Tabsheet 3: Populate Datenbase

Jetzt kommt Leben auf die Festplatte! Das Testprogramm added mal schnell 2048 Datensätze mit zufälligem Inhalt (vorher wird der Inhalt der Testdatenbank gelöscht). Je nach dem, ob du den haken per processmessage setzt oder nicht, führt die Anwendung ein application,processmessage nach jedem zugefügten Datensatz aus, was einerseits natürlich die Ausführung verlangsamt, zum anderen aber die Stabilität des Systems erhöht, weil auch andere Programmteile Gelegenheit bekommen, mal Befehle zu verarbeiten (zB Bildschirmaktualisierung).

Tabsheet 4: Query Database

Hier wird demonstriert, wie sich die eingefügten daten später wieder auslesen lassen. achte auf die "Rückkehrmethoden" query-X-finished! Hier werden die Ergebnisdaten der Abfrage je einer Listbox hinzugefügt: 

LB_Query3.Items.Add(Query.Data(i,0)+': '+Query.Data(i,1));

Query.Data(DatenSatzNr, FeldNr) liefert also die eigentlichen Daten in Stringform zurück.

Tabsheet 5: Remove all

Hier geht der Test seinem Ende entgegen: Die zufällig erzeugten Daten werden wieder gelöscht, anschließend die ganze Tabelle und zum Schluß die Datenbank. Wichtig auch hier:

ohne Threads arbeiten! Fehler sind vorprogrammiert, wenn man eine Datenbank zu löschen versucht, in der noch Tabellen ruhen: also schrittweises abarbeiten ist angesagt, folglich kommt nur non-threaded in Frage:

with mySQLClientNonThreaded do
begin
  
Modify.PrepareDelete('testtable','','Delete All');
   Modify.PrepareDropTable('testtable','Drop Table');
   Utility.PrepareDropDatabase('tmysqltestdb','Drop Database');
   Execute;  //erst jetzt alles zum server!!
end;

Ich hoffe, damit einen ersten Einblick in die Funktion der Clients gegeben zu haben: Fortsetzung folgt, Fragen bitte ins Forum!

 

Autor: Hjalmar Loh


Letzte Änderung 01.06.2003