Italia
SDK-Helfer/ Tools

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

 

Herby
Hallo an alle und besonders an Roland.

Anbei ein Demoprogramm per der Rückgabewerte bei "slExec", das gleichzeitig als Testprogramm per 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 possibile 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 circa 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 potuto 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 per 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 Mostra ******************************

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 circa 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
Downloadcounter34
Download
 
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 per das Gemeine Volk aus Germania sondern nur per die Bayern und Roland?

Gruss
 
08.01.2022  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

1.731 Views

Untitledvor 0 min.
ByteAttack vor 13 Tagen
Rschnett06.08.2022
Manfred Barei14.06.2022
Ernst29.05.2022
Di più...

Themeninformationen

Dieses Thema hat 3 subscriber:

funkheld (1x)
iF (1x)
Herby (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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