Einstieg in MySQL .
Foren um Projekt
öffentlich
Mitglieder
Grundlagen
DC -Home
Projekt Home
Schnellkurs SQL
API Einführung
Installation Linux
Eine Empfehlung der Redaktion
|
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
|
|