SQLite von PB

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Hier mal was, was ich grad gebaut hab :

Code: Alles auswählen

UseSQLiteDatabase()

Global DBErr.s="" ,DB.l

Procedure SQ_DBError()
  If DatabaseError()
    Debug DatabaseError()
  EndIf
EndProcedure

Procedure SQ_DBCreate(Filename.s)

  Protected Nr.l
  
  Nr = CreateFile(#PB_Any,Filename)
  
  If Nr
  
    CloseFile(Nr)
    DBErr = "DB '"+Filename+"' wurde erstellt."  
  
  Else
  
    DBErr = "DB '"+Filename+"' konnte nicht erstellt werden."
  
  EndIf

EndProcedure

Procedure SQ_DBOpen(Filename.s,User.s="",Pass.s="")

  DB = OpenDatabase(#PB_Any, Filename, User, Pass, #PB_Database_SQLite)

  If DB = 0
    
    DBErr = "DB '"+Filename+"' konnte nicht geöffnet werden."

  Else
  
    DBErr = "DB '"+Filename+"' wurde geöffnet."

  EndIf 

  SQ_DBError()
  
EndProcedure

Procedure SQ_DBClose()

  If DB
  
    CloseDatabase(DB)
    DBErr = "DB geschlossen."
    
  Else
  
    DBErr = "DB konnte nicht geschlossen werden, da nicht geöffnet !"
  
  EndIf
  
  SQ_DBError()

EndProcedure

Procedure SQ_DBCreateTable(Tabelle.s,Felder.s)

  If DB
  
    If DatabaseUpdate(DB, "Create Table "+Tabelle+" ("+Felder+")")
      
      DBErr = "Tabelle : '"+Tabelle+"' angelegt."
    
    Else
    
      DBErr = "Tabelle : '"+Tabelle+"' konnte nicht angelegt werden."
    
    EndIf
    
  Else
  
    DBErr = "Datenbank nicht geöffnet."
  
  EndIf
  
  SQ_DBError()
  
EndProcedure

Procedure SQ_DBQuery(SQL.s)

  If DB
  
    If DatabaseUpdate(DB, SQL) 
      DBErr = "Ok."
    Else
      DBErr = "SQL = '"+sql+"' hat nicht funktioniert."
    EndIf
    
  Else
  
    DBErr = "DB nicht geöffnet."
    
  EndIf

  SQ_DBError()

EndProcedure

Procedure SQ_DBView(Tabelle.s)

  If DB
  
    If DatabaseQuery(DB, "SELECT * FROM " + Tabelle)
    
      Debug "Datenansicht :"
      Debug "----------------------------------------"
    
      While NextDatabaseRow(DB)
        
        For i = 0 To DatabaseColumns(DB) - 1
          Debug DatabaseColumnName(DB, i) + " : " + GetDatabaseString(DB, i)
        Next i
      
        Debug "----------------------------------------"
    
      Wend
    
      Debug ""
    
      DBErr = "Ok."
      
    Else
    
      DBErr = "Datenbank abfrage war nicht erfolgreich!"
    
    EndIf
  
    DBErr = "DB nicht geöffnet."
    
  EndIf
  
  SQ_DBError()
    
EndProcedure


;#### Datenbank Beispiel (nicht perfekt aber funktional)

;#### DB anlegen
SQ_DBCreate("c:\000.db")
Debug DBErr

;#### DB oeffnen
SQ_DBOpen("c:\000.db")
Debug DBErr

;#### Ein Table namens Daten und Felder Namens Feld1 und Feld2 werden angelegt
SQ_DBCreateTable("Daten","Feld1 ,Feld2")
Debug DBErr

;#### Es werden Daten in die Tables und Felder eingespeist
For i = 0 To 10
SQ_DBQuery("INSERT INTO Daten Values ( 'Nr."+Str(i)+"', "+Str(i)+")")
Next i
Debug DBErr

;#### Daten werden ausgelesen
SQ_DBView("Daten")
;#### DB Schliessen
SQ_DBClose()
Debug DBErr

;#### Die Procedure SQ_DBError meldet den originalen DB Fehlercode,
;#### nützlich, wenn Fehler in der SQL Syntax sind.
;#### 
;#### Die Variable DBErr meldet den selbstgemachten Fehlercode
;#### ist vielleicht doppelt gemoppelt, aber nützlich ;) für mich zumindest
;#### 
;#### Im groben sind die Prozeduren aus dem Verständnis von Kiffi's Codes 
;#### zusammengebastelt. Besten Dank dafür an Kiffi ;)
Ich glaube, dass deine Insert Prozedure wegen dem
"ID INTEGER PRIMARY KEY" bei der Erstellung der Tables nicht funktioniert. Aber da ist Kiffi der Spezialist, denk ich ;)
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
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Nun hab ich das gefunden warum es nicht funktioniert....

Code: Alles auswählen

;#### Funktioniert nicht : Insert(#Database_0, "docs", "anrede","anrede.s")
Insert(#Database_0, "docs", "anrede" ,"'Herrn'") ;;#### Funktioniert

;#### Der SQL String würde so aussehen :
;#### "INSERT INTO docs (anrede) VALUES(Herrn)"

;#### Ist falsch da der SQL String aussehn muss 
;#### "INSERT INTO docs (anrede) VALUES('Herrn')"
;#### Die Hochkommata bei Textangaben sind wichtig
 
View(#Database_0, "docs")

;#### Funktioniert nicht : Change(#Database_0, "docs", "anrede", 1, "'Frau'")
Change(#Database_0, "docs", "anrede", 1, "Frau") ;#### Funktioniert

;#### und das funktioniert nicht weil "'Frau'" in der Procedure Change()
;#### zu "''Frau''" gemacht wird. Bei der Übergabe dürfen hier also keine Hochkommata stehen
;#### Da sie in der Prozedure schon gemacht werden
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

Du schreibst:

Code: Alles auswählen

;#### Funktioniert nicht : Insert(#Database_0, "docs", "anrede","anrede.s")
Insert(#Database_0, "docs", "anrede" ,"'Herrn'") ;;#### Funktioniert 
das weis ich. Ich will aber nicht "Herrn o. Frau o. Firma" im Programmcode schreiben, sondern eine String-Variable in in die DB schreiben.
Ich habe ein Eingabeformular in dem ich mit anrede.s die Anrede
abfrage, also muss ich auch anrede.s in die DB schreiben.

Wie geht das ??

Gruß Gnaps
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Das heisst du möchtest den Inhalt des Strings "anrede.s" in die Datenbank schreiben.

das wäre dann

Code: Alles auswählen

Insert(#Database_0, "docs", "anrede" ,"'"+anrede.s+"'")
wenn ich dich richtig verstanden habe...

Achja Bisonte ist mein Name ;)
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 »

Ok, hat gefunkt. War die Lösung.

Besten Dank Bisonte.

Sorry wegen dem falschen Namen

Gruß
Gnaps
Antworten