Seite 1 von 4
SQLite und die SELECT Abfrage
Verfasst: 30.11.2010 13:55
von Velindos
Hallo Leute,
habe folgendes Problem bei der Abfrage der SQLite Datenbank:
Wenn ich die Abfrage starte mit:
[1] If DatabaseQuery(0, "SELECT * FROM Velindos WHERE Zeiger < 7")
Dann bekomme ich die Werte der Datenbank.
Ersetze ich die 7 mit einer Variablen kommen keine Werte der Datenbank, obwohl 7 eingegeben wird:
SuchBaseString = Val (GetGadgetText(#String_DBRecord))
[2] ] If DatabaseQuery(0, "SELECT * FROM Velindos WHERE Zeiger < SuchBaseString ")
Selbiges passiert auch wenn ich
SuchString$ = GetGadgetText(#String_DBRecord) verwende!
Kann mir jemand sagen warum!
Gruss … Velindos
Re: SQLite und die SELECT Abfrage
Verfasst: 30.11.2010 14:06
von ALF1965
Hey, wir sind beide noch nicht so lange dabei...
Lösung: If DatabaseQuery(0, "SELECT * FROM Velindos WHERE Zeiger < " + SuchBaseString )
So wie Du das gemacht hast, interpretiert PB "SuchBasString" als Spalte der Datenbank, nicht als Variable in Deinem Code.
Gruß Ralf
Re: SQLite und die SELECT Abfrage
Verfasst: 30.11.2010 14:34
von Velindos
Hallo Ralf,
du sagst es, fühl mich richtig wie an Anfänger.
Bei der Spalte Zeiger funktioniert die Sache. Wenn ich die Spalte auf Notiz stelle, funktioniert die Sache nicht mehr… Idee!
SuchBaseString$=GetGadgetText(#String_DBRecord)
If DatabaseQuery(0, "SELECT * FROM Velindos WHERE Notiz =" +SuchBaseString$ )
Gruss … Velindos
Re: SQLite und die SELECT Abfrage
Verfasst: 30.11.2010 14:53
von Kiffi
Strings müssen in Hochkommata eingeschlossen werden.
DatabaseQuery(0, "SELECT * FROM Velindos WHERE Notiz =
'" +SuchBaseString$ + "
'")
Und bevor die nächste Frage kommt: Befinden sich in SuchBaseString$ ebenfalls Hochkommata, so müssen sie dupliziert werden.
SuchBaseString$ = GetGadgetText(#String_DBRecord)
SuchBaseString$ = ReplaceString(SuchBaseString$, "
'", "
''")
DatabaseQuery(0, "SELECT * FROM Velindos WHERE Notiz =
'" +SuchBaseString$ + "
'")
(ist aber in Access genauso)
Grüße ... Kiffi
Re: SQLite und die SELECT Abfrage
Verfasst: 30.11.2010 15:07
von Velindos
Hallo Kiffi!
nicht mein bester Tag, hatte gestern frei, muss erst meine Wolken sammeln.
Danke für die rasche und ausführliche Antwort!!!
Gruss ... Velindos
Re: SQLite und die SELECT Abfrage
Verfasst: 30.11.2010 16:20
von ALF1965
Kiffi hat eh mehr Ahnung als ich. Mir hat er eben meine Woche gerettet... auch in Sachen SQLITE.
Re: SQLite und die SELECT Abfrage
Verfasst: 01.12.2010 10:36
von Velindos
Hallo,
Habe mir eine SQL Datenbank angelegt mit der Tabelle Notiz und mit den Spalten
(ID(Integer, Aufsteigend), Stichwort(Text), Notiz(Text), Pfad(Text), Bild(Blob))
In meinen Window möchte ich nun die Werte der Datenbank anzeigen und blättern. Hierfür habe ich mir Button (mit Anfang, Ende, Vor, Zurück, Neu, Delete) angelegt.
StringGadget(#String_ID, 200, 105, 30, 20, "ID")
StringGadget(#String_Stichwort, 195, 135, 255, 20, "Stichwort")
StringGadget(#String_Notiz, 195, 170, 255, 20, "Notiz")
StringGadget(#String_Pfad, 195, 385, 255, 20, "Pfad")
ImageGadget(#Image_Bild, 195, 220, 255, 155, Bild, #PB_Image_Border)
Wie verbinde ich meine Gadget mit den Inhalten der Datenbank?
Gruss … Velindos
Re: SQLite und die SELECT Abfrage
Verfasst: 01.12.2010 10:42
von Kiffi
Velindos hat geschrieben:Wie verbinde ich meine Gadget mit den Inhalten der Datenbank?
im Gegensatz zu Access oder VB(6) hast Du in PB keine Möglichkeit, Gadgets
an Datenbankfelder zu binden. Du musst also das Auslesen der Werte aus der
Datenbank, das Eintragen in die Gadgets und das Aktualisieren in die Datenbank
bei Änderungen der Werte in den Gadgets selber programmieren.
Grüße ... Kiffi
Re: SQLite und die SELECT Abfrage
Verfasst: 01.12.2010 11:10
von Velindos
Hallo,
habe mir bereits eine Prozedur geschrieben. Mein Problem ist, die Strings kann ich auf Array geben, jedoch wie mache ich das mit dem Bild?
Procedure DatenbankAnzeigen()
#DatenFILE=0
a=0
Debug DatabaseFile$
If OpenDatabase(#DatenFILE, DatabaseFile$, "", "",#PB_Database_SQLite )
If DatabaseQuery(#DatenFILE, "SELECT * FROM Notiz")
While NextDatabaseRow(#DatenFILE) ; alle Einträge durchlaufen
ID$(a)=GetDatabaseString(0,0)
StringGadget(#String_ID, 200, 105, 30, 20, ID$(a))
Stichwort$(a)=GetDatabaseString(0,1)
StringGadget(#String_Stichwort, 195, 135, 255, 20, Stichwort$(a))
Notiz$(a)= GetDatabaseString(0,2)
StringGadget(#String_Notiz, 195, 170, 255, 20, Notiz$(a))
Pfad$(a)= GetDatabaseString(0,3)
StringGadget(#String_Pfad, 195, 385, 255, 20, Pfad$(a))
;Image= GetDatabaseString(0,4)
;ImageGadget(#Image_Bild, 195, 220, 255, 155, Image, #PB_Image_Border)
Debug a
Debug ID$(a)
Debug Stichwort$(a)
Debug Notiz$(a)
Debug Pfad$(a)
a=a+1
Debug a
Wend
EndIf
FinishDatabaseQuery(#DatenFILE)
EndIf
EndProcedure
Gruss … Velindos
Re: SQLite und die SELECT Abfrage
Verfasst: 01.12.2010 12:24
von Kiffi
@Velindos:
Du solltest vorher mal Deinen Code ein wenig sauberer gestalten. Mir ist schon länger
aufgefallen, dass Du mit mehreren überdimensionierten Arrays arbeitest. Das ist nicht
nur speicherbelastend sondern auch fehleranfällig. Außerdem musst Du immer eine
Counter-Variable mit Dir rumschleppen.
Hier mein Vorschlag: Arbeite mit einer strukturierten LinkedList. Dann hast Du alles an
Ort und Stelle und musst Dich nicht mit x Arrays herumschlagen.
Code: Alles auswählen
Structure sData
ID.s
Stichwort.s
Notiz.s
Pfad.s
EndStructure
Global NewList MyDataList.sData()
Procedure LadeDatenAusDatenbank(DatabaseFile.s)
Protected DB
DB = OpenDatabase(#PB_Any, DatabaseFile, "", "",#PB_Database_SQLite)
If DB
If DatabaseQuery(DB, "SELECT * FROM Notiz")
While NextDatabaseRow(DB) ; alle Einträge durchlaufen
AddElement(MyDataList())
MyDataList()\ID = GetDatabaseString(0,0)
MyDataList()\Stichwort = GetDatabaseString(0,1)
MyDataList()\Notiz = GetDatabaseString(0,2)
MyDataList()\Pfad = GetDatabaseString(0,3)
Wend
FinishDatabaseQuery(DB)
EndIf
CloseDatabase(DB)
EndIf
EndProcedure
Abgesehen davon ist das Erstellen der Gadgets in Deiner Datenbankschleife
falsch platziert. Lieber so:
Code: Alles auswählen
LadeDatenAusDatenbank(MeineDatenbank)
[...]
OpenWindow(...)
[...]
; Ersten Datensatz anzeigen
FirstElement(MyDataList())
StringGadget(#String_ID, 200, 105, 30, 20, MyDataList()\ID)
StringGadget(#String_Stichwort, 195, 135, 255, 20, MyDataList()\Stichwort)
StringGadget(#String_Notiz, 195, 170, 255, 20, MyDataList()\Notiz)
StringGadget(#String_Pfad, 195, 385, 255, 20, MyDataList()\Pfad)
[...]
oder so:
Code: Alles auswählen
[...]
OpenWindow(...)
[...]
StringGadget(#String_ID, 200, 105, 30, 20, "")
StringGadget(#String_Stichwort, 195, 135, 255, 20, "")
StringGadget(#String_Notiz, 195, 170, 255, 20, "")
StringGadget(#String_Pfad, 195, 385, 255, 20, "")
[...]
LadeDatenAusDatenbank(MeineDatenbank)
[...]
; Ersten Datensatz anzeigen
FirstElement(MyDataList())
SetGadgetText(#String_ID, MyDataList()\ID)
SetGadgetText(#String_Stichwort, MyDataList()\Stichwort)
SetGadgetText(#String_Notiz, MyDataList()\Notiz)
SetGadgetText(#String_Pfad, MyDataList()\Pfad)
Grüße ... Kiffi