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! :D

- 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...