Deutsch
SDK-Helfer/ Tools

SQLite Rückgabe bei slExec, X4, mit Testprogamm (auch für Einsteiger)

 

Herby
Hallo an alle und besonders an Roland.

Anbei ein Demoprogramm für der Rückgabewerte bei "slExec", das gleichzeitig als Testprogramm für die Grundlagen von SQLite dient.
Es geht dabei um die Rückgabewerte bei einem slExec - Befehl. Hier wird nur bei Select die Anzahl der gefunden Datensätze zurückgegeben sonst immer 0 (bei Fehlern Abbruch)
Ist es hier möglich auch bei allen anderen Befehlen (Insert,Delete,Update,Count) einen Wert zu liefern oder vielleich gibt es das schon und ich weiß es nicht ?

steht bei SQLite :
<Die Anzahl der von SQLExec bearbeiteten Datensätze ist das Ergebnis der Funktion und wird auch in &SQLCount zurückgeliefert. Trat ein Fehler auf, wird -1 zurückgegeben.>
Dies schein aber nur über die ODBC-Schnittstelle zu funktionieren (habe ich aber nicht).

Dies wäre optimal das bei Fehlern -1 kommt und dann auch $SQLError gesetzt wird, sonst eben die Anzahl.
Dadurch könnten dann fehlerhafte Befehle abgefangen werden ohne Programmabbruch.
Besonders interessant ist das bei einem TRIGGER und RAISE wo bestimme Ereignisse abgefragt werden können und dann auch Meldungen erzeugt werden (siehe Programm beu DB_Open).
Das Beispiel mit leeren Feld könnte man auch in Profan lösen, aber es gibt da bestimmt noch mehr Möglichkeiten. Als Anlage Bild der (Fehler)Meldung von SQL "Name ist leer"


' Testprogramm für SQLite, XProfan X4, Made by Herby
Declare grid&, g&, Text&, Ende&, ins&, leer&, Del&, such&, DB&
Declare zwi$, zwi%, erg%, Ende%
' Datenbank erzeugen, falls nicht vorhanden, und 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 erstellen wenn Datensatz mit leeren Namen eingefügt wird, geht auch mit Delete, Update. Oder Logdatei erstellen bei Änderungen ...
        Db("slExec", DB&, "CREATE TRIGGER Name_leer BEFORE INSERT ON Daten BEGIN SELECT CASE WHEN NEW.Name = '' THEN RAISE ( ABORT, 'Name ist leer') END; END;",1)
        MessageBox("Datenbank neu erstellt","Hinweis",64)

    else

        db& = db("slInit", "testdb.db")

    EndIf

EndProc

' alle Sätze aus Datenbank lesen und in Grid anzeigen ******************************

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&)' in Grid werden nur Datensätze eingetragen ohne Überschriften/Spaltenbeiten, darum über Grid !
    Move("ListToHandle",grid&)' in GridBox werden die Überschriften und Spaltenbreite von SQL gesetzt

EndProc

' Text in ListBox ausgeben und auf letzte Zeile positionieren (Terminal) **********

Proc Printx

    Parameters TEXT$,Nr%
    AddString(Text&,TEXT$ + Str$(Nr%))
    SelectString(Text&,GetCount(Text&)-1,"")

EndProc

cls
db("slUseDLL", "sqlite3.dll")' DLL initialisieren
DB_Open
g& = create("Grid",4,0)' hier werden Daten ohne Kopfzeile eingetragen
Grid& = Create("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&  = Create("Button",%hwnd,"Del",200,360,60,25)
Ins&  = Create("Button",%hwnd,"Ins",300,360,60,25)
Leer& = Create("Button",%hwnd,"Leer",400,360,60,25)
Ende& = Create("Button",%hwnd,"Ende",500,360,60,25)
DB_Read
Randomize

WhileNot 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
        SelectString(grid&,GetCount(grid&)-1,"")

    ElseIf Clicked(Leer&)' Datensatz einfügen mit leeren Namen, bricht mit SQL-Error [19] ab, evtl erg% setzen ($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 aus selectierten Datensatz lesen
            erg% = Db("slExec", DB&, "DELETE FROM Daten WHERE Id = :zwi%",1)
            Printx "Del : ",erg%
            DB_Read
            SelectString(grid&,GetCount(grid&)-1,"")

        EndIf

    EndIf

EndWhile

DB("slDone", DB&)' Datenbank schließen
End

Grüße aus München vom Herby.

24 kB
Hochgeladen:24.07.2019
Ladeanzahl99
Herunterladen
 
XProfan X4
Win 10, XProfan X2/X3 jetzt X4
24.07.2019  
 



Habe das Thema mal nach SDK-Helfer/ Tools verschoben.
 
24.09.2020  
 




funkheld
Hm....was soll Roland mit dem Programm?

Also nicht für das Gemeine Volk aus Deutschland sondern nur für die Bayern und Roland?

Gruss
 
08.01.2022  
 



Unterthema: IN-MEMORY - DB  [...]  erzeugt.
 
12.04.2023  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

3.376 Betrachtungen

Unbenanntvor 0 min.
Matzbub03.02.2024
Thomas Zielinski28.06.2023
Paul Glatz22.06.2023
E.T.12.06.2023
Mehr...

Themeninformationen

Dieses Thema hat 4 Teilnehmer:

H.Brill (1x)
funkheld (1x)
iF (1x)
Herby (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie