Private $hConn As New Connection
Private $sNameDB As String = "databasetest"
Private $sPathDB As String = Application.Path &/ "Database"
Public Sub Main()
CheckDB
End
Private Sub CheckDB()
db.Debug = True
If Not Exist($sPathDB) Then Try Mkdir $sPathDB
With $hConn
.Close()
.Type = "sqlite3"
.Host = $sPathDB
.Open()
If Not $hConn.Databases.Exist($sNameDB) Then
.Databases.Add($sNameDB)
.Close()
.Name = $sNameDB
.Open()
.Begin()
MakeTable()
FillTable()
.Commit()
Print ("#Database successfully created!")
Else
Print ("#Existing database")
Endif
.Close()
End With
Catch
$hConn.Rollback()
Error.Raise(Error.Text & " - " & Error.Code)
End
Private Sub MakeTable()
Dim hTable As Table
' Create the Addresses table
hTable = $hConn.Tables.Add("taddr")
hTable.Fields.Add("adkey", db.Serial)
hTable.Fields.Add("adnam", db.String, 32)
hTable.Fields.Add("adsur", db.String, 32)
hTable.Fields.Add("adfem", db.Boolean)
hTable.Fields.Add("adadd", db.String, 64)
hTable.Fields.Add("adzip", db.String, 8)
hTable.Fields.Add("adcit", db.String, 32)
hTable.Fields.Add("adpro", db.String, 32)
hTable.Fields.Add("adnot", db.String,, "No note")
hTable.PrimaryKey = ["adkey"]
hTable.Update
End
Private Sub FillTable()
' Populate the address table with test records.
' I apologize for the low adherence to reality.
Dim i As Integer
Dim aStreet As String[] = ["St. ", "Ln. ", "Ave. ", "Blvd."]
Dim aZciPro As String[]
Dim aFirstName As String[] = ["Binah", "Hanna", "Selassie", "Okpara", "Agustina", "Clema", "Coyan", "Eusebio", "Diego", "Alisha", "Daphne", "Wiley", "Valentine", "Lidwina", "Roxana", "Edmund", "Hildeger", "Adrianne", "Janette", "Quentin", "Sylvain", "Francesco", "Marco", "Aldina", "Ornella", "Carmencita", "Galena", "Florentino", "Rodrigo", "Benoit", "Mario"]
Dim aLastName As String[] = ["Smith", "Johnson", "Williams", "Brown", "Martin", "Bernard", "Dubois", "Thomas", "Robert", "Richard", "Müller", "Schmidt", "Schneider", "Fischer", "Weber", "Meyer", "Gunnarsson", "García", "González", "Rodríguez", "Fernández", "López", "Martínez", "Jensen", "Nielsen", "Cohen", "Friedman", "Rossi", "Bianchi", "Minisini", "Verdone"]
Dim hResult As Result
For i = 0 To 99
aFirstName.Shuffle()
aLastName.Shuffle()
aStreet.Shuffle()
hResult = $hConn.Create("taddr")
hResult!adnam = aFirstName[0]
hResult!adsur = aLastName[0]
hResult!adfem = Female(aFirstName[0])
hResult!adadd = aStreet[0] & " " & aLastName[2] & " n. " & (i + 10)
aZciPro = Zcipro()
hResult!adzip = aZciPro[2]
hResult!adcit = aZciPro[0]
hResult!adpro = aZciPro[1]
hResult.Update
Next
End
Private Function Female(name As String) As Boolean
' Returns if female is true or false
If name Ends "a" Then
If name <> "Okpara" Then
Return True
Endif
Else If name Ends "e" Then
If name <> "Selassie" Then
Return True
Endif
Endif
Return False
End
Private Function Zcipro() As String[]
' Returns in vectors form: Zip, City, Country in Italian style ;-)
Dim ss As New String[]
Dim n As Integer[] = [1, 2, 3, 4, 5, 6, 7, 8, 9]
n.Shuffle()
Select n[0]
Case 1
ss.Push("New York")
ss.Push("New York")
ss.Push("10100")
Case 2
ss.Push("Los Angeles")
ss.Push("California")
ss.Push("32000")
Case 3
ss.Push("Chicago")
ss.Push("Illinois")
ss.Push("70100")
Case 4
ss.Push("Houston")
ss.Push("Texas")
ss.Push("24000")
Case 5
ss.Push("Phoenix")
ss.Push("Arizzona")
ss.Push("40032")
Case 6
ss.Push("Philadelphia")
ss.Push("Pennsylvania")
ss.Push("22100")
Case 7
ss.Push("San Antonio")
ss.Push("Texas")
ss.Push("24100")
Case 8
ss.Push("Jacksonville")
ss.Push("Florida")
ss.Push("50100")
Case 9
ss.Push("Denver")
ss.Push("Colorado")
ss.Push("80000")
End Select
Return ss
End
Private myordner As String
Private mydbname As String
Private $hConn As New Connection
Public Sub Form_Open()
myordner = "mienimmen"
mydbname = "mienimmen.sqlite3"
'' Verzeichnisse erstellen wenn nicht vorhanden. Crea le directory se non sono disponibili
' Es gibt bessere Möglichkeiten, dies zu tun siehe Button1_Click. Ci sono modi migliori per farlo vedi Button1_Click
If Exist("/home/" & user.Name & "/" & myordner) = False Then
Mkdir "/home/" & user.Name & "/" & myordner
Print "Verzeichniss '/home/" & user.Name & "/" & myordner & "' existiert nicht, lege Verzeichniss an."
Endif
'' Datenbank anlegen wenn nicht vorhanden Crea il database se non è disponibile
'Try $hConn.Close
' Da Sie With verwenden, können Sie sofort damit beginnen. Visto che usi With parti subito con esso
With $hConn
.Close ' Schließt jede offene Verbindung (Try ist überflüssig, die Methode behandelt den Fehler standardmäßig) Chiude un eventuale connessione aperta (Try è superfluo il metodo gestisce l'errore di default)
.Type = "sqlite3" ' ' wird im Original aus dem Form geholt.
.Host = "/home/" & user.Name & "/" & myordner ' ohne Dateiname !
' Wenn wir eine bereits vorhandene Datenbank in einen Benutzerordner kopieren, ist das eine Sache.
' In diesem Fall, dass die Datenbank, wenn sie nicht existiert, erstellt wird, können wir den Namen nicht sofort schreiben, sondern müssen testen
' Se copiamo un database già esistente in una cartella dell'utente è un conto.
' In questo caso che, se non esiste, il database viene creato, non possiamo scrivere il nome subito ma dobbiamo testare
' .Name = "" ' hier kommt nichts rein, sonst will der Treiber eine vorhandene Datei öffnen -> u.U. Fehler, Datei wurde nicht gefunden. qui non arriva nulla, altrimenti il driver vuole aprire un file esistente -> eventualmente errore, il file non è stato trovato.
' Zuerst öffnen wir die Verbindung
.Open
' Wir testen und fügen ggf. die Datenbank hinzu. Testiamo e se serve aggiungiamo il database
If Not .Databases.Exist(mydbname) Then
.Databases.Add(mydbname)
' Schließen der Verbindung. Chiudiamo la connessione
.Close
' Wir öffnen die Verbindung mit der Datenbank mydbname. Apriamo la connessione al database mydbname
.Name = mydbname
.Open
' Einleiten einer Transaktion. Iniziamo una transazione
.Begin
' Wir erstellen die Tabelle. Creiamo la tabella
machmatabellen ' le parentesi servono solo se ritorna dati in modalità funzione
' Abschluss der Transaktion. Chiudiamo la transazione
.Commit
Else
message.Info("db existiert bereits")
Endif
' Schließen der Verbindung. Chiudiamo la connessione
.Close
End With
' $hConn.Open
' If Not $hConn.Databases.Exist(mydbname) Then
' $hConn.Databases.Add(mydbname)
' Print "Datenbank '" & mydbname & "' existiert nicht, lege Datenbank an,"
' Else
' 'message.Info("db existiert bereits")
' End If
'
' ''Datenbabk Tabellen anlegen Crea le tabelle del database
' machmatabellen()
' $hConn.Close
' Wenn etwas nicht funktioniert, geben Sie alles so zurück, wie es zu Beginn der Transaktion war.
' Se qualcosa non funziona riporta tutto come era all'inizio della transazione
Catch
$hConn.Rollback()
Error.Raise(Error.Text & " - " & Error.Code)
$hConn.Close
End
Public Sub Form_Close()
$hConn.Close
End
Public Sub machmatabellen()
If db.Exec("Create TABLE If Not EXISTS `zumachen` ( 'id' INTEGER PRIMARY KEY AUTOINCREMENT ,`Name` VARCHAR( 150 ) NOT NULL ,`tag` INT NULL ,`mon` INT NULL ,`jahr` INT NULL ,`prio` int NULL ,`arbeit` VARCHAR( 200 ) NULL,`kildat` VARCHAR ( 25 ),`erledi` VARCHAR( 20 ) NULL,`killen` VARCHAR( 5 ) NULL,`extID` VARCHAR( 200 ) NULL)") Then
Print "lege Tabelle 'zumachen' an"
' Else
' Print "Tabelle 'zumachen'existiert"
End If
'' L'errore lo ottieni da catch in Form_Open
' If Error Then
' Message("MySQL Error: " & Error.Text)
' End If
End
Public Sub Button1_Click()'' Aufgabe eintragen
Dim iTag, iMon, iJahr As Integer
Dim sName, sCombo, sText, sVal As String
db.Debug = True
sName = User.Name
iTag = Day(Now)
iMon = Month(Now)
iJahr = Year(Now)
sCombo = ComboBox1.Text
sText = TextBox1.Text
sVal = "ja"
Stop
With $hConn
.Close
.Type = "sqlite3"
'.Host = "/home/" & user.Name & "/" & FMain.myordner ' ??????????????????
.Host = User.Home &/ myordner
.Name = mydbname '"" ' hier kommt nichts rein, sonst will der Treiber eine vorhandene Datei öffnen -> u.U. Fehler, Datei wurde nicht gefunden.
.Open
.Begin
' ACHTUNG: Datentypen müssen beachtet werden (z. B. keine Zeichenketten eingeben, wenn die Datenbank ganze Zahlen erwartet), Daten eingeben, wenn sie obligatorisch sind (nicht null) und Positionen.
' Auch mögliche Injektionen müssen berücksichtigt werden.
' ATTENZIONE: Occorre rispettare i tipi di dati (es. non inserire stringhe dove il database aspetta numeri interi) inserire dati dove obbligatori (not null) e le posizioni.
' Occorre inoltre tener conto delle possibili iniezioni.
.Exec("INSERT INTO zumachen (Name, tag, mon, jahr, prio, arbeit, killen) VALUES (&1, &2, &3, &4, &5, &6, &7)", sName, itag, iMon, iJahr, sCombo, sText, sVal)
.Commit
.Close
End With
' $hConn.Open
' db.Exec("insert into zumachen (tag,mon,jahr,prio,arbeit,killen) values('" & Format$(Now, "dd") & "','" & Format$(Now, "mm") & "','" & Format$(Now, "yyyy") & "','" & ComboBox1.Text & "','" & TextBox1.Text & "','ja') ")
' $hConn.Close
Catch
$hConn.Rollback()
Error.Raise(Error.Text & " - " & Error.Code)
$hConn.Close
End