Gambas: Datenbank
Zurück zu Gambas
Vorsicht ! In diesem Abschnitt ist noch einiges in Arbeit !!
Datenbankprogrammierung nur mit Gambas
[Bearbeiten]Für das Anlegen einer simplen Adress- und Telefonnummerdatenbank brauchen Sie kein mysql. Probieren Sie es einfach Schritt für Schritt ohne mysql.
Fangen wir mit einer ganz simplen Tabelle an
1 Eins 2 Zwei
Sie soll abzuspeichern und zu verändern und zu verlängern sein. Sonst brauchen wir erst einmal keine weiteren Funktionen.
Das Ganze kann man als Stringarray machen und in einer Textarea darstellen.
Siehe Gambas: Arrays
Beispiel:
Sie brauchen eine Form eine Textarea und 2 Commandbuttons um das Programm in Gang zu bringen.
' Gambas class file PUBLIC SUB Form_Open() Textarea1.Text = "1,Eins" Textarea1.Text = Textarea1.Text & "2,Zwei" END PUBLIC SUB Button2_Click() Dialog.SaveFile() File.Save(Dialog.Path, TextArea1.Text) 'Geben Sie db.txt als Dateinamen ein CATCH IF ERROR THEN RETURN END PUBLIC SUB Button1_Click() DIM sLine AS String sLine = File.Load("db.txt") 'Die Datei muss existieren, 'sonst kann sie nicht geladen werden. textarea1.Text = sLine END
Fügen Sie jetzt noch ein paar Tabellen Einträge dazu und speichern Sie wieder ab:
3,Drei 4,Vier 5,Fünf
Markieren Sie diese 3 weiteren datensätze und kopieren Sie sie mit Strg + C in den Zwischenspeicher. Mit Strg + V geben Sie sie wieder in Ihrer Textarea aus und speichern Sie ab.
Löschen Sie die Textarea und Laden Sie die Datenbank erneut. Siehe da, Ihre Minitabelle ist noch vorhanden.
Das ganze schaut immer noch wie eine Textdatei aus, aber auch eine richtige Tabelle wird zunächst als hintereinanderfolgende Datei abgespeichert. In unserer Minitabelle sind die einzelnen Datenfelder mit Kommas getrennt, die einzelnen Reihen ( = Datensätze) werden durch ein Return ( = Chr(10)) getrennt.
CSV Datei
[Bearbeiten]Vielleicht wollen Sie obige einfache Zahlentabelle in ein Standard CSV Datenbankformat umwandeln, wie es zb Excel oder Openoffice als Importmöglichkeit nutzt.
Das CSV-Dateiformat wird oft benutzt, um Daten zwischen unterschiedlichen Computerprogrammen auszutauschen (es ist also ein Austauschformat). Die Verwendung des Formates in den von Microsoft Excel verwendeten Formen hat sich als Pseudostandard etabliert.
Das CSV Excel Format schaut so aus:
"1","Eins" "2","Zwei"
D.h. im Gegensatz zu unsere Darstellung sind die Eingaben in die Datenfelder noch mit einem Anführungszeichen versehen. Man muß jetzt nur aufpassen , das im Datenfeld selbst kein Anführungszeichen und kein Komma vorkommt, denn diese 2 Zeichen braucht man für die Tabellenstruktur.
Eine CSV-Datei ist eine Text-Datei, die tabellarisch strukturierte Daten enthält und vorrangig zum Datenaustausch verwendet wird. Das Kürzel CSV steht dabei für Character Separated Values oder Comma Separated Values, weil die einzelnen Werte durch ein spezielles Trennzeichen - in vielen Fällen das Komma - getrennt werden. Einzelne Datensätze werden in der Regel durch einen Zeilenumbruch (bei Windows: CR LF = carriage return, line feed; bei Unix: nur LF; bei Mac OS: nur CR) getrennt. Das CSV-Format ist unabhängig von Zeichencodierung, Byte-Reihenfolge und Zeilenumbruchszeichen.
CSV-Dateien tragen auch oft die Dateiendung .txt statt .csv und können auch in jedem Texteditor erstellt und bearbeitet werden.
Versuchen wir die CSV - Umwandlung zu programmieren: Dazu brauchen wir einen neuen Commandbutton den wir CSV nennen und folgenden Code:
PUBLIC SUB Button3_Click() text AS String liste AS String[] posten AS String reihe AS String text = textarea1.Text liste = Split(text,Chr(10)) textarea1.Text = "" FOR EACH posten IN liste IF posten = "" THEN reihe = "" ELSE reihe = Chr(34) & posten & Chr(34) & Chr(10) END IF textarea1.Text = textarea1.Text & reihe NEXT
Das schaut schon ganz schön aus. Vor allem wird die leere Zeile am Schluss nicht mit Anführungszeichen versehen. Aber leider finden sich keine Anführungszeichen um die Kommas. Das Programm muss also noch verbessert werden:
Der String posten muss nach Kommas durchsucht werden und dann das Komma durch "," ersetzt werden. das geht am besten mit dem Replace Befehl in Gambas. Schauen Sie mit der Hilfetaste F1 und dem Alphabetischen Verzeichnis der Befehle nach, wie er verwendet wird.
Für unsere Anwendung ersetzen wir noch die Anführungszeichen durch chr(34).
PUBLIC SUB Button3_Click() text AS String liste AS String[] posten AS String reihe AS String text = textarea1.Text liste = Split(text,Chr(10)) textarea1.Text = "" FOR EACH posten IN liste IF posten = "" THEN reihe = "" ELSE reihe = Chr(34) & Replace$(posten, ",", Chr(34) & "," & Chr(34)) & Chr(34) & Chr(10) END IF textarea1.Text = textarea1.Text & reihe NEXT
Probieren Sie es aus. Speichern Sie Ihre Minitabelle beispielsweise als db1.csv ab und versuchen Sie einmal , die Tabelle in Openoffice als Tabelle in der Tabellenkalkulation zu importieren. Klappt es ??
Verändern Sie die Tabelle in Open Office, speichern Sie diese wieder als CSV - Excel datei ab und versuchen Sie die Datei wieder in Ihr Programm zu holen, Klappt es ?
Das erscheint als überflüssige Spielerei, aber wer schon einmal versucht hat alte Datenbanken zu retten, der weiß wie wichtig Standarddatenformate und wie wichtig- Import und Exportmöglichkeiten sind.
Datenbankprogrammierung mit Gambas und MySQL
[Bearbeiten]Vorarbeiten Mysql
[Bearbeiten]Im Gegensatz zu MS Access ist Mysql zwar die Standarddatenbank im Linuxbereich, aber noch nicht ganz so leicht zu bedienen wie Access. Trotzdem ist Mysql sehr gut, da sie open source ist, sehr weit verbreitet ist und stabil läuft. Auch scheinen die Dateiformate nicht willkürlich verändert zu werden, wie dies bei MS Access ohne ersichtlichen Grund öfter der Fall war.
Sie sollten sich also etwas mit Mysql vertraut machen, bevor sie mit Gambas auf Mysql losgehen. Ansonsten werden Sie von Access denied Fehlern schnell frustriert sein.
Wenn Sie nicht wissen was eine Datenbank ist schauen Sie sich einmal folgende Seite an:
http://www.madeasy.de/2/datbank.htm
Die Einrichtung von mysql ist heute unter Linux kein allzu großes Problem mehr, da alle aktuellen Standarddistributionen die wichtigsten mysql Pakete enthalten.
Can't connect to local MySQL server through socket ...
[Bearbeiten]Wenn man Mysql unter Linux in Gang bringen will, nervt einen folgende Fehlermeldung immer wieder.
Can't connect to local MySQL server through socket ...
Was ist der Grund für diese Fehlermeldung? Meistens liegt das Problem bereits beim Starten von Linux. Der mysql daemon wird nicht gestartet. Um den Fehler zu beheben, müssen Sie in Ihren Runleveleditor gehen. Dort aktivieren Sie Mysql, so dass die Datenbank bereits beim Booten mitgestartet wird.
Unter Suse starten Sie am besten YAST mit dem Rootpasswort. Dann geben Sie folgendes ein:
YAST - SYSTEM/RUNLEVEL-EDITOR/ Dienste
oder
systemctl start mysql
und aktivieren mysql, falls es nicht schon aktiv ist.
Mysql von der Konsole
[Bearbeiten]Nach der Installation starten Sie ihr mysql von der Konsole mit:
/etc/init.d/mysql start
Es erscheint die Meldung: failed ( nicht erfolgreich) oder
Starting service MySQL done ( erfolgreich)
Ich kann auf meinem Rechner mysql nur mit root Rechten starten.
Stoppen können Sie mysql mit:
/etc/init.d/mysql stop
Meldung:
Shutting down service mysql done
Starten Sie mysql erneut und geben Sie dann ein
mysql
Meldung:
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 to server version: 4.0.18 Type 'help;' or '\h' for help. Type '\c' to clear the buffer mysql>
Schauen Sie sich den mysql status an und geben Sie status ein:
mysql> status
Meldung:
-------------- mysql Ver 12.22 Distrib 4.0.18, for suse-linux (i686) Connection id: 2 Current database: Current user: root@localhost SSL: Not in use Current pager: less Using outfile: Server version: 4.0.18 Protocol version: 10 Connection: Localhost via UNIX socket Client characterset: latin1 Server characterset: latin1 UNIX socket: /var/lib/mysql/mysql.sock Uptime: 3 min 37 sec Threads: 1 Questions: 3 Slow queries: 0 Opens: 6 Flush tables: 1 Open tables: 0 Queries per second avg: 0.014
Wichtig für Gambas sind hier die current database ( noch keine geladen), der current user und die connection.
Haben Sie bereits ein Mysqlpasswort vergeben kommen Sie in mysql nur mit
mysql -p
und dann der Eingabe des Passwortes hinein. Dieses Passwort hat nichts mit dem Linux Passwort zu tun und wird außerdem vom mysql noch verschlüsselt, steht also nicht im Klartext zur Verfügung. Merken Sie es sich gut, Sie brauchen es auch für Gambas und mysql.
Schauen Sie sich dann einmal die vorhandenen Datenbanken an zb die Testdatenbank test und geben Sie ein:
USE test;
Meldung:
mysql> USE test; Database changed
Lassen Sie sich nicht durch die Meldung: Database changed irritieren.
Lassen Sie sich nun die vorhandenen Tabellen in mysql anzeigen, aber vergessen Sie nicht den Strichpunkt hinter Ihrer Eingabe sonst wird mysql zickig.
SHOW TABLES;
Da auf meinem Rechner schon einiges in Test zu finden ist erscheint folgende Meldung:
+-----------------+ | Tables_in_test | +-----------------+ | NewTable | | __RekallObjects | | gewuerz | | t1 | | t2 | | test | +-----------------+ 6 rows in set (0.00 sec)
Jetzt kann man sich die einzelne Tabelle beispielsweise gewuerz anschauen:
SELECT * FROM gewuerz;
Und ich erhalte eine wunderbare Gewürztabelle: mysql> SELECT * FROM gewuerz;
+----+-----------+-------+----------+-------+---------+ | nr | name | preis | waehrung | menge | einheit | +----+-----------+-------+----------+-------+---------+ | 1 | anis | 4.6 | EUR | 6.8 | kg | | 2 | pfeffer | 5 | euro | 2 | 4 | | 3 | safran | 5 | e | 3 | 3 | | 4 | salz | 4 | e | 4 | 4 | | 5 | curry | 5 | e | 5 | 5 | | 6 | knoblauch | 5 | e | 5 | 5 | +----+-----------+-------+----------+-------+---------+ 6 rows in set (0.02 sec)
Versuchen Sie sich doch auch so eine schöne Gewuerztabelle anzulegen.
Zur weiteren mysql Syntax empfehle ich folgende sehr hilfreiche Website:
http://www.selflinux.org/selflinux/html/mysql.html - Link leider defekt :-( Am besten vollziehen Sie das dortige Kunden Beispiel nach.
Arbeiten mit dem Datenbankmanager von Gambas
[Bearbeiten]Der Datenbankmanager von Gambas ist gut geeignet, um sehr schnell und übersichtlich mysql Datenbanken darzustellen, neu anzulegen und zu bearbeiten.
Sie finden Ihn im Projektfenster unter dem Menüpunkt Werkzeuge und Datenbank-Manager.
Wenn Sie ihn starten fragt er Sie nach einem kryptischen Password , daß sie eingeben müssen, auch wenn Sie sonst mysql noch als root und ohne Passwort nutzen.
Geben Sie hier einfach Return ein , gibt es eine Fehlermeldung: Please enter at least 8 characters auf Deutsch: Sie sollten ein Passwort mit mindestens 8 Buchstaben nutzen.
Haben Sie diese Passworthürde erfolgreich gemeistert , erscheinen alle Datenbankserver in einer Treeviewansicht.
Bei mir funktioniert nur der Eintrag root@localhost(mysql). Klicken Sie auf diesen , dann zeigen sich alle dort erreichbaren Datenbanken zb auch test. Klicken Sie auf eine der Datenbanken, dann zeigen sich die dortigen Tabellen. Klicken Sie auf eine Tabelle , dann können Sie diese nun im rechten Bildschirm in der Struktur ändern , neue Indizes setzen und auch neue Daten eingeben.
Probieren Sie alles aus und speichern Sie ihre Änderungen durch einen Klick auf das Diskettensymbol ab.
MySQL Nutzerrechte
[Bearbeiten]MySQL, Apache und phpMyAdmin
[Bearbeiten]Zur Darstellung von MySQL Datenbanken haben sich die Programme Apache als Webserver und phpMyAdmin als Zugriffsoberfläche sehr bewährt. Versuchen Sie diese beiden Programme auf ihrem Rechner zu installieren. Machen Sie sich dann etwas mit phpMyAdmin vertraut.
Es erleichtert die Fehlersuche enorm, wenn man eine schnelle weitere Zugriffsmöglichkeit auf die MySQL Datenbanken in Form des phpMyAdmin hat.
Datenbankprogrammierung mit Gambas und SQLite
[Bearbeiten]Nicht immer ist es notwendig, für eine kleine Datenbanklösung einen kompletten Server aufzusetzen. SQLite bietet die Möglichkeit mittels der notwendigen Treiber, welche für Gambas zur Verfügung stehen, eine DB in einer Datei ohne Server zu erzeugen.
Eine SQLite Datenbank kann man mittels den Konsolenprogramm sqlite, nach Installation der notwendigen Treiber, mit Knoda oder natürlich auch mit dem gambaseigenen Datenbankmanager erstellen.
Eine genauere Beschreibung der Datenbank findet man unter http://de.wikipedia.org/wiki/Sqlite .
Eingebunden wird die Datenbank durch die Variablen .Type und .Name der Connection, wobei für .Type "sqlite" und für .Name der absolute Pfad zur Datenbankdatei steht. Die Benutzerrechte richten sich nach den Dateirechten.
Erstellen einer Datenbankverbindung
[Bearbeiten]Beispiel für ein Datenbank-Connect. Hierbei muss die gb.db Komponente in das Projekt mit eingebunden werden:
PRIVATE $hConn AS Connection PUBLIC SUB GoConnect() DIM sName AS String TRY $hConn.Close sName = "DatenbankName" WITH $hConn .Type = "mysql" .Host = "DatenbankServer" .Login = "Datenbank-Benutzerkennnung" .Password = "Datenbank-Benutzerpasswort" END WITH $hConn.Name = sName $hConn.Open CATCH Message.Error(Error.Text) END PUBLIC SUB Form_Open() $hConn = NEW Connection GoConnect END PUBLIC SUB Form_Close() $hConn.Close END
Verfügbare Datenbanken anzeigen
[Bearbeiten]Es wird eine Datenbankverbindung mit der unter dem jeweiligen Datenbanksystem immer vorhandenen Standarddatenbank (postgresql: 'template1'; mysql: 'mysql' ...) hergestellt und die Anzahl und durch Abfrage der 'Collection' 'Databases' die dem angemeldetem Benutzer zur Verfügung stehenden Datenbanken angezeigt. Dazu wird als Datenbankname eine leere Zeichenkette angegeben. Der '.Type' ist entsprechend dem Datenbanktyp zu setzen.
Z.B. als Procedure in einem Modul:
PRIVATE Datenbankverbindung AS Connection PRIVATE Datenbankname AS String PROCEDURE ListeDatenbanken () DIM Element AS Variant Datenbankverbindung = NEW Connection WITH Datenbankverbindung .Type = "postgresql" .Host = "Rechnername" .Login = "Benutzername" .Password = "Schutzwort" .Name = "" END WITH Datenbankverbindung.Open PRINT "Anzahl Datenbanken: " & DB.Databases.Count FOR EACH Element IN DB.Databases Print "Datenbankname: " & Element.Name NEXT Datenbankverbindung.Close END
Links
[Bearbeiten]- http://software.newsforge.com/software/04/11/30/1653243.shtml?tid=72&tid=132
- Beispiel einer Gambas mysql Anwendung
- http://www.postgresql.de/ Datenbanksystem PostgreSQL
- http://dev.mysql.com/doc/refman/5.1/de/index.html Handbuch Datenbanksystem MySQL