[gelöst] sqlite3

Wie auf MySql und den ganzen Rest zugreifen ...

[gelöst] sqlite3

Beitragvon yoda » Di 2. Feb 2016, 18:00

Hi,

bei meinen ersten Gehversuchen mit sqlite3 bekomme da eine Fehlermeldung. Wahrscheinlich sehe ich den Baum vor lauter Bäumen nicht.

gambas code
With db
.Type = "sqlite3"
.Host = dbpfad
.Name = dbname
.Open
End With


q = "CREATE TABLE IF NOT EXISTS `user` ( "
q &= " 'id' int(5) NOT NULL auto_increment, "
q &= " `vname` varchar(25) NOT NULL default '',"
q &= " `nname` varchar(25) NOT NULL default '',"
q &= " `ort` varchar(30) NOT NULL default '',"
q &= " `str` varchar(30) NOT NULL default '',"
q &= " `plz` varchar(15) NOT NULL default '',"
q &= " `telp` varchar(20) NOT NULL default '',"
q &= " `telg` varchar(20) NOT NULL default '',"
q &= " `mobil` varchar(20) NOT NULL default '',"
q &= " `emil` varchar(20) NOT NULL default '',"
q &= " `geb` varchar(15) NOT NULL default '',"
q &= " `statu` varchar(20) NOT NULL default '',"
q &= " `funkti` varchar(20) NOT NULL default '',"
q &= " `eintritt` varchar(20) NOT NULL default '',"
q &= " `austritt` varchar(20) NOT NULL default '',"
q &= " `bank` varchar(30) NOT NULL default '',"
q &= " `iban` varchar(100) NOT NULL default '',"
q &= " `bild` varchar(100) NOT NULL default '',"
q &= " `bemerk` text NOT NULL,"
q &= ""

q &= " PRIMARY KEY( `id`) ) AUTO_INCREMENT = 1 "

db.Exec(q)



flotte Grüße
yoda
Site Admin
 
Beiträge: 423
Registriert: Mo 2. Jan 2006, 22:35
Wohnort: bei Göttinge

Re: sqlite3

Beitragvon tux_ » Do 4. Feb 2016, 15:32

Du solltest gar nicht so viel mit expliziten SQL-Anfragen arbeiten. Die Datenbank-Unterstuetzung in Gambas bietet dir Methoden und Eigenschaften an, um Tabellen zu erstellen. Wenn du diese Methoden und Eigenschaften verwendest, funktioniert dein Code sogar unabhaengig davon welches DBMS du verwendest. Ein geeignetes Beispiel dafuer ist das Projekt PictureDatabase, das seit Urzeiten bei Gambas dabei ist. Du findest es derzeit auf der Software-Farm (vom Start-Bildschirm aus > Software-Farm > Examples). Dort zeigt dir ModuleDatabase:OpenDatabase() wie man eine Datenbank in Gambas anlegen kann, ohne sich mit SQL herumzuschlagen.

Ansonsten koennte es sein, dass am Ende von q ein Semikolon fehlt? Ich weisz gerade nicht, ob Gambas das vielleicht noch automatisch anfuegt oder nicht. Welche Fehlermeldung bekommst du denn ueberhaupt?
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!
tux_
Site Admin
 
Beiträge: 941
Registriert: Di 11. Nov 2008, 20:05

Re: sqlite3

Beitragvon 4tionov » Do 4. Feb 2016, 18:20

Die Fehlermeldung wäre nett. [falsch]Auf die Schnelle sehe ich Hochkommas bei 'id' und das Komma nach dem letzten NOT NULL dürfte falsch sein[/falsch]. Außerdem sind die ganzen Backticks nicht nötig (normalerweise nur bei Mysql und wenn Sonderzeichen oder SQL-Befehle im/als Identifier enthalten sind – das möchte man eh vermeiden). Dann könntest du ein

gambas code
Debug q


machen, um den SQL-Befehl auszuspucken. Den kannst du dann kopieren und auf der Kommandozeile direkt an SQLite verfüttern.

Im Gegensatz zu _tux halte ich nicht viel davon, im Umgang mit Datenbanken die "Magie" von Gambas zu benutzen, außer man weiß was man tut. Grundlegendes SQL ist schnell gelernt und man ist damit viel mächtiger, außerdem weiß man genau was passiert, weil man näher an der DB ist.

Das gewünschte Tabellenschema ist schon völlig daneben. Die Spalte tel z.B. mag man nicht in user haben, denn eine Person kann viele Telefonnummern haben und man braucht daher eine eigene Tabelle telefon (mit den Spalten userid, art, nummer). Du musst dich also noch mit Normalisierung beschäftigen.
Zuletzt geändert von 4tionov am Do 4. Feb 2016, 19:39, insgesamt 2-mal geändert.
Alles Gute,

4tionov
4tionov
Foriker
 
Beiträge: 90
Registriert: So 18. Mai 2014, 22:40

Re: sqlite3

Beitragvon 4tionov » Do 4. Feb 2016, 19:30

Habe mal kurz geschaut, so geht es:

sql code
CREATE TABLE user (id integer PRIMARY KEY autoincrement, vname varchar(25) NOT NULL default '');


Es gibt kein int(5), sonder nur integer als Datentyp.

Die weiteren Spalten kannst du ja selbst anhängen. Testen kannst du ganz leicht auf der Shell so:

bash code
io@io-X200  » cd /tmp                                                                                                                                                                           1 ↵
io@io-X200 /tmp » sqlite3 testdb
SQLite version 3.8.2 2013-12-06 14:53:30
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TABLE user (id integer PRIMARY KEY autoincrement, vname varchar(25) NOT NULL default '');
sqlite> .quit
io@io-X200 /tmp »


So und wenn der SQL-Befehl in einer Testdb klappt, dann kannst du ihn in Gambas einpacken. Aber besser ist es, ihn in ein Textfile zu schreiben und auf der Shell:

bash code
sqlite3 testdb < in.sql


zu machen. Das kannst du auch Gambas tun lassen.
Alles Gute,

4tionov
4tionov
Foriker
 
Beiträge: 90
Registriert: So 18. Mai 2014, 22:40

Re: sqlite3

Beitragvon yoda » Fr 5. Feb 2016, 09:59

Moin,

ich habe es jetzt so gemacht.

gambas code
q = "CREATE TABLE  IF NOT EXISTS `user`( "
q &= " 'id' INTEGER PRIMARY KEY AUTOINCREMENT, "
q &= " `anr` varchar(10) NOT NULL default '',"
q &= " `vname` varchar(25) NOT NULL default '',"
q &= " `nname` varchar(25) NOT NULL default '',"
q &= " `ort` varchar(30) NOT NULL default '',"
q &= " `str` varchar(30) NOT NULL default '',"
q &= " `plz` varchar(15) NOT NULL default '',"
q &= " `telp` varchar(20) NOT NULL default '',"
q &= " `telg` varchar(20) NOT NULL default '',"
q &= " `mobil` varchar(20) NOT NULL default '',"
q &= " `emil` varchar(20) NOT NULL default '',"
q &= " `geb` varchar(15) NOT NULL default '',"
q &= " `statu` varchar(20) NOT NULL default '',"
q &= " `funkti` varchar(20) NOT NULL default '',"
q &= " `eintritt` varchar(20) NOT NULL default '',"
q &= " `austritt` varchar(20) NOT NULL default '',"
q &= " `bank` varchar(30) NOT NULL default '',"
q &= " `iban` varchar(100) NOT NULL default '',"
q &= " `bild` varchar(100) NOT NULL default '',"
q &= " `bemerk` text NOT NULL"
q &= ""

q &= " ) "


flotte grüße
yoda
Site Admin
 
Beiträge: 423
Registriert: Mo 2. Jan 2006, 22:35
Wohnort: bei Göttinge


Zurück zu Datenbankzugriff

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast