Seite 1 von 2
SQLite von PB
Verfasst: 10.08.2008 12:21
von Criss
Hi zusammen,
ich bin ziemlicher Anfänger im Bereich SQLite von Purebasic und habe da mal ein paar Fragen!
- Wie kann ich ziemlich lange Strings speichern?
Ich mache das mit:
Code: Alles auswählen
DatabaseUpdate(id, "INSERT INTO " + table + " (" + keys + ") VALUES(" + values + ")")
Wenn values = "c:\file.txt" ist dann gehts, aber wenn values eine riesig lange Pfadangabe ist, dann gehts nicht mehr!
- Wenn ich mehrere Pfadangaben am selben Ort speichern möchte, wie geht das?
- Gibt es irgendwo noch bessere Examples von SQLite für PB?
Verfasst: 10.08.2008 16:29
von Bisonte
Das interessiert mich auch brennend.
Ich weiss zwar mit MySQL umzugehen, aber bei SQLLite krieg ich das nichtmal hin eine DB zu machen, einen wert reinzuschreiben und wieder auszulesen....
Verfasst: 10.08.2008 18:03
von Criss
Hallo Bisonte,
hier ist das was ich mir bis jetzt selber zusammengebaut habe!
Vielleicht hilft es Dir auch ein wenig weiter?
Code: Alles auswählen
Enumeration
#Database_0
#File_0
EndEnumeration
Structure main
file.s
user.s
pass.s
EndStructure
Global main.main
With main
\file = "db_docs.sqlite"
\user = ""
\pass = ""
EndWith
UseSQLiteDatabase()
Procedure CreateDB(file.s)
If CreateFile(#File_0, file)
CloseFile(#File_0)
Debug "Datenbank erstellt"
Else
Debug "Datenbank konnte nicht erstellt werden!"
End
EndIf
EndProcedure
Procedure OpenDB(id.l, file.s, user.s, pass.s)
If OpenDatabase(id, file, user, pass, #PB_Database_SQLite)
Debug "Datenbank geöffnet"
Else
Debug "Datenbank konnte nicht geöffnet werden!"
EndIf
EndProcedure
Procedure CloseDB(id.l)
CloseDatabase(id)
EndProcedure
Procedure CreateTable(id.l, name.s, keys.s)
If DatabaseUpdate(id, "CREATE TABLE " + name + " (ID INTEGER PRIMARY KEY, " + keys.s + ")")
Debug "Tabelle erstellt"
Else
Debug "Tabelle konnte nicht erstellt werden!"
EndIf
EndProcedure
Procedure Insert(id.l, table.s, keys.s, values.s)
If DatabaseUpdate(id, "INSERT INTO " + table + " (" + keys + ") VALUES(" + values + ")")
Debug "Datensatz wurde eingefügt"
Else
Debug "Datensatz konnte nicht werden!"
EndIf
EndProcedure
Procedure Delete(id.l, table.s, primarykey.l)
If DatabaseUpdate(id, "DELETE FROM " + table + " WHERE ID=" + Str(primarykey))
Debug "Datensatz wurde gelöscht"
Else
Debug "Datensatz konnte nicht gelöscht werden!"
EndIf
EndProcedure
Procedure Change(id.l, table.s, columnname.s, primarykey.l, string.s)
If DatabaseUpdate(id, "UPDATE " + table + " SET " + columnname + "='" + string + "' WHERE ID=" + Str(primarykey))
Debug "Datensatz wurde korrekt geändert"
Else
Debug "Datensatz konnte nicht geändert werden!"
EndIf
EndProcedure
Procedure View(id.l, table.s)
If DatabaseQuery(id, "SELECT * FROM " + table)
Debug ""
Debug "----------------------------------------"
While NextDatabaseRow(id)
For z0.l = 0 To DatabaseColumns(id) - 1
Debug DatabaseColumnName(id, z0) + " : " + GetDatabaseString(id, z0)
Next z0
Debug "----------------------------------------"
Wend
Debug ""
If z0 > 0
Debug "Datenbank abfrage war erfolgreich"
Else
Debug "Datenbank abfrage war nicht erfolgreich!"
EndIf
Else
Debug "Datenbank abfrage war nicht erfolgreich!"
EndIf
EndProcedure
Procedure ViewEntry(id.l, table.s, columnname.s, primarykey.l)
DatabaseQuery(id, "SELECT " + columnname + " FROM " + table + " WHERE ID=" + Str(primarykey))
NextDatabaseRow(id)
Debug GetDatabaseString(id, 0)
EndProcedure
CreateDB(main\file)
OpenDB(#Database_0, main\file, main\user, main\pass)
CreateTable(#Database_0, "docs", "begriffe, info, dokumente")
Insert(#Database_0, "docs", "begriffe, info, dokumente", "'Novobit AG', 'Die gesammte Lieferung von WK 43 auf 100% pruefen!', 'C:\Dokumente und Einstellungen\'")
Insert(#Database_0, "docs", "begriffe, info", "'Lintech', 'Wurde auf S1 gesetzt!'")
View(#Database_0, "docs")
Change(#Database_0, "docs", "dokumente", 2, "c:\dok.pdf")
View(#Database_0, "docs")
Delete(#Database_0, "docs", 2)
View(#Database_0, "docs")
ViewEntry(#Database_0, "docs", "info", 1)
Verfasst: 10.08.2008 23:15
von Bisonte
Ah danke... jetzt seh ich auch warum bei mir nie was zustande kam....
Ich hab immer DatabaseQuery und nicht DataBaseUpdate genommen, um reinzuschreiben....
Bei MySQL gehts aber anscheinend nicht bei SQLite...
Verfasst: 11.08.2008 09:28
von dige
Fehler Nr.1 beim speichern von Texten ist, das vergessen wird diesen
vorher zu maskieren!
Wenn dann noch SQL Code im Text ist, kann im schlimmsten Fall sogar
die Datenbank dabei gelöscht werden...
Verfasst: 11.08.2008 16:52
von Criss
Kannst Du uns da ein bisschen aufklären, was erlaubt ist und was nicht und meinst Du mit Maskierung die ' ?
Verfasst: 02.09.2008 13:09
von gnaps
Hallo,
bin PB Anfänger und habe mit dem Code oben rumgefummelt, komme
soweit auch zurecht jedoch möchte ich einen String in die DB schreiben
z.B
anrede.s=""
.
.
.
Insert(#Database_0, "docs", "anrede","anrede.s")
jedoch wir hier nichts in die DB geschrieben.
Was mach ich falsch ??
Gruß
Gnaps
Verfasst: 02.09.2008 13:11
von Bisonte
da musst du schon den code posten, damit man sieht was da falsch sein könnte...
Verfasst: 02.09.2008 13:25
von gnaps
Hallo Bistone,
Hier der abgeänderte Code
Code: Alles auswählen
Enumeration
#Database_0
#File_0
EndEnumeration
Structure main
file.s
user.s
pass.s
EndStructure
anrede.s=""
Global main.main
With main
\file = "db_docs.sqlite"
\user = ""
\pass = ""
EndWith
UseSQLiteDatabase()
Procedure CreateDB(file.s)
If CreateFile(#File_0, file)
CloseFile(#File_0)
Debug "Datenbank erstellt"
Else
Debug "Datenbank konnte nicht erstellt werden!"
End
EndIf
EndProcedure
Procedure OpenDB(id.l, file.s, user.s, pass.s)
If OpenDatabase(id, file, user, pass, #PB_Database_SQLite)
Debug "Datenbank geöffnet"
Else
Debug "Datenbank konnte nicht geöffnet werden!"
EndIf
EndProcedure
Procedure CloseDB(id.l)
CloseDatabase(id)
EndProcedure
Procedure CreateTable(id.l, name.s, keys.s)
If DatabaseUpdate(id, "CREATE TABLE " + name + " (ID INTEGER PRIMARY KEY, " + keys.s + ")")
Debug "Tabelle erstellt"
Else
Debug "Tabelle konnte nicht erstellt werden!"
EndIf
EndProcedure
Procedure Insert(id.l, table.s, keys.s, values.s)
If DatabaseUpdate(id, "INSERT INTO " + table + " (" + keys + ") VALUES(" + values + ")")
Debug "Datensatz wurde eingefügt"
Else
Debug "Datensatz konnte nicht werden!"
EndIf
EndProcedure
Procedure Delete(id.l, table.s, primarykey.l)
If DatabaseUpdate(id, "DELETE FROM " + table + " WHERE ID=" + Str(primarykey))
Debug "Datensatz wurde gelöscht"
Else
Debug "Datensatz konnte nicht gelöscht werden!"
EndIf
EndProcedure
Procedure Change(id.l, table.s, columnname.s, primarykey.l, string.s)
If DatabaseUpdate(id, "UPDATE " + table + " SET " + columnname + "='" + string + "' WHERE ID=" + Str(primarykey))
Debug "Datensatz wurde korrekt geändert"
Else
Debug "Datensatz konnte nicht geändert werden!"
EndIf
EndProcedure
Procedure View(id.l, table.s)
If DatabaseQuery(id, "SELECT * FROM " + table)
Debug ""
Debug "----------------------------------------"
While NextDatabaseRow(id)
For z0.l = 0 To DatabaseColumns(id) - 1
Debug DatabaseColumnName(id, z0) + " : " + GetDatabaseString(id, z0)
Next z0
Debug "----------------------------------------"
Wend
Debug ""
If z0 > 0
Debug "Datenbank abfrage war erfolgreich"
Else
Debug "Datenbank abfrage war nicht erfolgreich!"
EndIf
Else
Debug "Datenbank abfrage war nicht erfolgreich!"
EndIf
EndProcedure
Procedure ViewEntry(id.l, table.s, columnname.s, primarykey.l)
DatabaseQuery(id, "SELECT " + columnname + " FROM " + table + " WHERE ID=" + Str(primarykey))
NextDatabaseRow(id)
Debug GetDatabaseString(id, 0)
EndProcedure
CreateDB(main\file)
OpenDB(#Database_0, main\file, main\user, main\pass)
CreateTable(#Database_0, "docs", "anrede")
anrede.s="Herrn"
Insert(#Database_0, "docs", "anrede","anrede.s")
View(#Database_0, "docs")
Change(#Database_0, "docs", "anrede", 1, "'Frau'")
View(#Database_0, "docs")
Delete(#Database_0, "docs", 2)
View(#Database_0, "docs")
ViewEntry(#Database_0, "docs", "info", 1)
closeDB(#Database_0)
Debug "Datenbank geschlossen"
End
Gruß
Gnaps
Verfasst: 02.09.2008 13:36
von Bisonte
Irgendwie ist da die SQL Syntax verkehrt.
Du hast zwar ein Table das docs heist, aber keine "keys" angelegt...