¡Hola a todos y besonders a Roland.
Anbei una Demoprogramm para el Rückgabewerte en "slExec", el gleichzeitig como Testprogramm para el Grundlagen de SQLite dient. Lo va esta a Rückgabewerte en una slExec - Befehl. Hier se sólo en Select el número el gefunden Datensätze zurückgegeben sonst siempre 0 (en Fehlern Abbruch) ¿Es hier posible auch en allen otro Befehlen (Insert,Delete,Actualización,Count) una Valor a liefern oder vielleich hay el ya y yo weiß no ?
es en SQLite : <Die Anzahl el de SQLExec bearbeiteten Datensätze es el Ergebnis el Función y se auch en &SQLCount zurückgeliefert. Trat una Fehler en, se -1 zurückgegeben.> Dies schein aber sólo en ODBC-Schnittstelle a trabajo (Yo pero no).
Dies wäre optimal en el Fehlern -1 kommt y luego auch $SQLError gesetzt se, sonst eben el número. Dadurch könnten entonces fehlerhafte Befehle abgefangen voluntad sin Programmabbruch. Besonders interessant es el en una TRIGGER y RAISE wo bestimme Ereignisse abgefragt voluntad puede y luego auch Meldungen producido voluntad (siehe Programa beu DB_Open). Das Ejemplo con leeren Feld podría uno auch en Profano lösen, pero son como determinado todavía mehr Möglichkeiten. Als Anlage Bild el (Fehler)Meldung de SQL "Name es leer"
' Testprogramm para SQLite, XProfan X4, Made by Herby
Declarar grid&, g&, Text&, Ende&, ins&, leer&, Del&, such&, DB&
Declarar zwi$, zwi%, erg%, Ende%
' Datenbank erzeugen, si no disponible, y Verbindung herstellen ************
Proc DB_Open
ifnot fileexists("testdb.db")
db& = db("slCreate", "testdb.db")
Db("slExec", DB&, "CREATE TABLE Daten (Id INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT, Datum REAL)",1)
db("slExec", DB&, "INSERT INTO Daten (Id, Name, Datum) VALUES (1, 'Satz 1',JULIANDAY('NOW','LOCALTIME'))", 1)
' Trigger redactar si Datensatz con leeren Namen eingefügt se, va auch con Delete, Actualización. Oder Logdatei redactar en Los cambios ...
Db("slExec", DB&, "CREATE TRIGGER Name_leer BEFORE INSERT ON Daten BEGIN SELECT CASE WHEN NEW.Name = '' THEN RAISE ( ABORT, 'Name es leer') END; END;",1)
MessageBox("Datenbank neu erstellt","Hinweis",64)
más
db& = db("slInit", "testdb.db")
EndIf
ENDPROC
' todos Sätze de Datenbank lesen y Grid Mostrar ******************************
Proc DB_Read
ClearList 0
ClearList grid&, g&
erg% = Db("slExec", DB&, "SELECT Id, Name, DATE(Datum), TIME(Datum) FROM Daten",g&)
Printx "Lesen : ",erg%
Move("HandleToList",g&)' en Grid voluntad sólo Datensätze eingetragen sin Überschriften/Spaltenbeiten, por lo tanto encima Grid !
Move("ListToHandle",grid&)' en GridBox voluntad el Überschriften y Spaltenbreite de SQL gesetzt
ENDPROC
' Texto en ListBox ausgeben y en letzte Línea positionieren (Terminal) **********
Proc Printx
Parámetros TEXT$,Nr%
AddStrings(Text&,TEXT$ + Str$(Nr%))
Seleccione String(Text&,GetCount(Text&)-1,"")
ENDPROC
cls
db("slUseDLL", "sqlite3.dll")' DLL inicializar
DB_Open
g& = create("Grid",4,0)' hier voluntad Daten sin Kopfzeile eingetragen
Grid& = Crear("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& = Crear("Button",%hwnd,"Del",200,360,60,25)
Ins& = Crear("Button",%hwnd,"Ins",300,360,60,25)
Leer& = Crear("Button",%hwnd,"Leer",400,360,60,25)
Ende& = Crear("Button",%hwnd,"Ende",500,360,60,25)
DB_Read
Selección aleatoria
Sinestar encargado Ende%
WaitInput
If Clicked(Ende&)
Ende% = 1
ElseIf Clicked(Ins&)' Datensatz einfügen
ZWI$ = "Test " + Str$(Rnd(1000)+1)
erg% = Db("slExec", DB&, "INSERT INTO Daten (Name,Datum) VALUES (:zwi$,JULIANDAY('NOW','LOCALTIME'))",1)
Printx "Ins : ",erg%
DB_Read
Seleccione String(grid&,GetCount(grid&)-1,"")
ElseIf Clicked(Leer&)' Datensatz einfügen con leeren Namen, bricht con SQL-Error [19] de, evtl erg% conjunto ($sqlerror/&sqlcount ?!?)
erg% = Db("slExec", DB&, "INSERT INTO Daten (Name,Datum) VALUES ('',JULIANDAY('NOW','LOCALTIME'))",1)
Printx "Ins leer : ",erg%
DB_Read
ElseIf Clicked(Del&)' markierten Datensatz löschen
ZWI% = GetCurSel(grid&)
If ZWI% > -1
ZWI% = Val(GetText $(grid&,ZWI%,0))' Id de selectierten Datensatz lesen
erg% = Db("slExec", DB&, "DELETE FROM Daten WHERE Id = :zwi%",1)
Printx "Del : ",erg%
DB_Read
Seleccione String(grid&,GetCount(grid&)-1,"")
EndIf
EndIf
EndWhile
DB("slDone", DB&)' Datenbank schließen
End
Grüße de München vom Herby. |