allô à alle et besonders à Roland.
Anbei un Demoprogramm pour qui Rückgabewerte chez "slExec", cela gleichzeitig comme Testprogramm pour qui Grundlagen de SQLite dient. und dir dabei à Rückgabewerte chez einem slExec - Befehl. ici wird seulement chez Select le nombre qui trouvé Datensätze retour sonst toujours 0 (chez Fehlern Abbruch) Ist es ici possible aussi chez allen anderen Befehlen (Insert,Delete,Update,Count) une Wert trop liefern ou bien vielleich gibt es cela déjà et je sais es pas ?
steht chez SQLite : <Die Nombre de de SQLExec bearbeiteten Datensätze ist cela Ergebnis qui Funktion et wird aussi dans &SQLCount zurückgeliefert. Trat un faute sur, wird -1 retour.> ca billet mais seulement sur qui ODBC-Schnittstelle trop marcher (habe je mais pas).
ca wäre optimal cela chez Fehlern -1 venez et ensuite aussi $SQLError gesetzt wird, sonst plan le nombre. Dadurch könnten ensuite fehlerhafte Befehle abgefangen volonté sans Programmabbruch. Besonders intéressant ist cela chez einem TRIGGER et RAISE wohin bestimme Ereignisse abgefragt volonté peut et ensuite aussi Meldungen erzeugt volonté (siehe Programme beu DB_Open). cela Beispiel avec vider champ pourrait on aussi dans Profan lösen, mais il y a là bestimmt encore plus Opportunités. comme Anlage Bild qui (faute)annonce de SQL "Name ist leer"
' Testprogramm pour SQLite, XProfan X4, asticot by Herby
Déclarer grid&, g&, Text&, Ende&, ins&, leer&, Del&, such&, DB&
Déclarer zwi$, zwi%, erg%, Ende%
' banque de données erzeugen, si pas vorhanden, et liaison herstellen ************
Proc DB_Open
ifnot fileexists("testdb.db")
db& = db("slCreate", "testdb.db")
Db("slExec", DB&, "CREATE TABLE données (Id INTEGER PRIMARY KEY AUTOINCREMENT, nom TEXT, date REAL)",1)
db("slExec", DB&, "INSERT INTO données (Id, nom, date) VALUES (1, 'phrase 1',JULIANDAY('NOW','LOCALTIME'))", 1)
' Trigger erstellen si Datensatz avec vider Namen eingefügt wird, allez aussi avec Delete, Update. ou bien Logdatei erstellen chez Changements ...
Db("slExec", DB&, "CREATE TRIGGER Name_leer BEFORE INSERT ON données BEGIN SELECT CASE WHEN NEW.nom = '' THEN RAISE ( ABORT, 'nom ist vide') END; END;",1)
MessageBox("Datenbank récente erstellt","Hinweis",64)
d'autre
db& = db("slInit", "testdb.db")
EndIf
ENDPROC
' alle Sätze aus banque de données lesen et dans Grid Montrer ******************************
Proc DB_Read
ClearList 0
ClearList grid&, g&
erg% = Db("slExec", DB&, "SELECT Id, nom, DATE(date), TIME(date) FROM Daten",g&)
Printx "Lesen : ",erg%
Move("HandleToList",g&)' dans Grid volonté seulement Datensätze eingetragen sans Überschriften/Spaltenbeiten, tout autor sur Grid !
Move("ListToHandle",grid&)' dans GridBox volonté qui Überschriften et Spaltenbreite de SQL gesetzt
ENDPROC
' Text dans ListBox ausgeben et sur dernier la ligne positionieren (Terminal) **********
Proc Printx
Paramètres TEXT$,Nr%
AddStrings(Text&,TEXT$ + Str$(Nr%))
Sélectionnez String(Text&,GetCount(Text&)-1,»)
ENDPROC
cls
db("slUseDLL", "sqlite3.dll")' DLL initialisieren
DB_Open
g& = create("Grid",4,0)' ici volonté données sans Kopfzeile eingetragen
Grid& = Créer("gridbox",%hwnd,"ID;0;30;Name;0;200;Datum;0;70;Zeit;0;70",0,200,20,400,200)
Text& = create("Listbox",%hwnd,0,20,20,150,200)
Del& = Créer("Button",%hwnd,"Del",200,360,60,25)
Ins& = Créer("Button",%hwnd,"Ins",300,360,60,25)
Leer& = Créer("Button",%hwnd,"Leer",400,360,60,25)
Ende& = Créer("Button",%hwnd,"Ende",500,360,60,25)
DB_Read
Randomiser
WhileNot Ende%
WaitInput
Si Clicked(Ende&)
Ende% = 1
ElseIf Clicked(Ins&)' Datensatz insérer
ZWI$ = "Test " + Str$(Tour(1000)+1)
erg% = Db("slExec", DB&, "INSERT INTO données (nom,date) VALUES (:zwi$,JULIANDAY('NOW','LOCALTIME'))",1)
Printx "Ins : ",erg%
DB_Read
Sélectionnez String(grid&,GetCount(grid&)-1,»)
ElseIf Clicked(Leer&)' Datensatz insérer avec vider Namen, bricht avec SQL-Error [19] ab, peut-être erg% mettons ($sqlerror/&sqlcount ?!?)
erg% = Db("slExec", DB&, "INSERT INTO données (nom,date) VALUES ('',JULIANDAY('NOW','LOCALTIME'))",1)
Printx "Ins vide : ",erg%
DB_Read
ElseIf Clicked(Del&)' markierten Datensatz effacer
ZWI% = GetCurSel(grid&)
Si ZWI% > -1
ZWI% = Val(GetText $(grid&,ZWI%,0))' Id aus selectierten Datensatz lesen
erg% = Db("slExec", DB&, "DELETE FROM données WHERE Id = :zwi%",1)
Printx "Del : ",erg%
DB_Read
Sélectionnez String(grid&,GetCount(grid&)-1,»)
EndIf
EndIf
Endwhile
DB("slDone", DB&)' banque de données schließen
Fin
Grüße aus München vom Herby. |