SQLite von PB

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Criss
Beiträge: 126
Registriert: 21.09.2004 18:45
Kontaktdaten:

SQLite von PB

Beitrag 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?
"Zu glauben, der Mensch sei Einschränkungen unterworfen, ist die grösste Illusion von allen." Robert Allan Monroe
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag 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....
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
Criss
Beiträge: 126
Registriert: 21.09.2004 18:45
Kontaktdaten:

Beitrag 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)
"Zu glauben, der Mensch sei Einschränkungen unterworfen, ist die grösste Illusion von allen." Robert Allan Monroe
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag 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...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
dige
Beiträge: 1239
Registriert: 08.09.2004 08:53

Beitrag 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...
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
Criss
Beiträge: 126
Registriert: 21.09.2004 18:45
Kontaktdaten:

Beitrag von Criss »

Kannst Du uns da ein bisschen aufklären, was erlaubt ist und was nicht und meinst Du mit Maskierung die ' ?
"Zu glauben, der Mensch sei Einschränkungen unterworfen, ist die grösste Illusion von allen." Robert Allan Monroe
gnaps
Beiträge: 151
Registriert: 02.09.2008 13:02

Beitrag 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
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

da musst du schon den code posten, damit man sieht was da falsch sein könnte...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
gnaps
Beiträge: 151
Registriert: 02.09.2008 13:02

Beitrag 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
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Irgendwie ist da die SQL Syntax verkehrt.

Du hast zwar ein Table das docs heist, aber keine "keys" angelegt...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Antworten