SQLite über Webgadget auslesen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

SQLite über Webgadget auslesen

Beitrag von Velindos »

Hallo Leute,
möchte über das Webgadget schnell auf eine SQLite Database zugreifen und mir Daten anzeigen!
Hat damit jemand schon Erfahrung?
Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
TroaX
Beiträge: 684
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Linux Mint | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Linux Mint
Wohnort: NRW
Kontaktdaten:

Re: SQLite über Webgadget auslesen

Beitrag von TroaX »

Da gibt es 2 Möglichkeiten. Die eine ist es, mit Hilfe der WinAPI die Kommunikation zwischen Javascript und PB herzustellen. Müsste mal im Forum schauen, wie das ging. Gab einen Thread von mir dazu, wo das beantwortet wurde.

Die 2. Möglichkeit wäre es, per IndexedDB (WebSQL - http://stackoverflow.com/questions/1098 ... e-database) über JS und HTML direkt zu machen. Dazu musst du aber sicherstellen, das der IE 9 minimum installiert ist und das auch per Reg dein Programm den Engine-Zugang zur 9er bekommt.

Wenn du es unter Linux machst, müsste das Webgadget, da es auf WebKit aufsetzt direkten Zugang zu IndexedDB bzw. WebSQL haben.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Linux Mint
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Linux Mint
NAS: Fritz.Box 5690 Pro (Nur für Keepass-DB)
Coding: Purebasic, Spiderbasic, GDevelop, Javascript/Node
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: SQLite über Webgadget auslesen

Beitrag von ts-soft »

Du meinst, das WebGadget als Client, weil die Datenbankabfrage wird normallerweise auf der Server-Seite ausgeführt,
z.B. per PHP oder CGI (anders geht es ja auch gar nicht).
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
TroaX
Beiträge: 684
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Linux Mint | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Linux Mint
Wohnort: NRW
Kontaktdaten:

Re: SQLite über Webgadget auslesen

Beitrag von TroaX »

Ich verstehe es so, das er eine Anwendung schreiben will, die Daten in einer SQLite Datenbank speichert und das Webgadget als HTML GUI verwendet. Und er brauch jetzt die Kommunikation zwischen HTML/CSS/Javascript und der SQLite Datenbank.

Wenn du wie gesagt Wert auf die HTML-GUI legst, schau mal, ob du das ganze als WebApp aufsetzen kannnst (wenn es nur darum geht). Wenn du aber noch anderweitig PB nutzen musst, dann wirst du um einen API-Hack des Gadgets nicht herumkommen oder per Callback und SetGadgetAttribute arbeiten.

Der Hack ist hier beschrieben: http://forums.purebasic.com/german/view ... +erweitern

Wenn du nur Daten einlesen willst, kannst du auch mit SetGadgetAttribute den HTML-Code selbst einfügen. Geht aber nur unter Windoof. Über das Navigation-Callback kannst du die Abfragen Triggern. So bekommst du allerdings in die Datenbank nicht viel rein. Denn der Callback kann Daten nur per Get übergeben und das ist an Limitierungen gekoppelt. Diese liegen bei 2048 Zeichen, wobei diese Anzahl auch gleich die Entities mit einschließt (z.B. %20 als 3 Zeichen). Das kannst du aber so lange du im Kontext der Anwendung bleibt optimieren mit: x://a=wert&b=wert
Also nur kurze Buchstaben. Die kannst du mit der HTTP-Bibliothek dann nach und nach herauslösen. Du kannst natürlich testen, ob diese Limitierung sich auch auf das Gadget außerhalb des HTTP-Protokolls bezieht. Wenn nicht kannst du dir auch das Hacken komplett sparen. Und wenn du in XHTML 1.0 Strict bzw. XHTML 1.1 arbeitest, solltest du den HTML-Code mit der XML-Bibliothek parsen können. Dann kannst du die Daten getrost auch in einzelne Bestandteile der HTML-Seite einfügen, anstatt alles neu einzulesen.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Linux Mint
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Linux Mint
NAS: Fritz.Box 5690 Pro (Nur für Keepass-DB)
Coding: Purebasic, Spiderbasic, GDevelop, Javascript/Node
Benutzeravatar
TroaX
Beiträge: 684
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Linux Mint | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Linux Mint
Wohnort: NRW
Kontaktdaten:

Re: SQLite über Webgadget auslesen

Beitrag von TroaX »

Ich habe eben auf Limitierung getestet. Sie besteht auch beim Gadget. Also maximal 2048 Zeichen möglich.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Linux Mint
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Linux Mint
NAS: Fritz.Box 5690 Pro (Nur für Keepass-DB)
Coding: Purebasic, Spiderbasic, GDevelop, Javascript/Node
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: SQLite über Webgadget auslesen

Beitrag von Velindos »

Hallo Leute, danke für eure Hilfe,
habe hier mal ein Beispiel, was im Webgadget probleme macht! Im Chrome funktioniert die Sache, bin jetzt kein Spezialist! Dürfte auch am Firefox liegen!

Code: Alles auswählen

<!DOCTYPE html>
<html>
  <head>
    <style>
      body {
        color: #222;
        font: 14px Arial;
      }
      
      body a {
        color: #3D5C9D;
        text-decoration: none;
      }
    </style>
    <script>
      var html5rocks = {};
      html5rocks.webdb = {};
      html5rocks.webdb.db = null;
      
      html5rocks.webdb.open = function() {
        var dbSize = 5 * 1024 * 1024; // 5MB
        html5rocks.webdb.db = openDatabase("F:\Desktop\DeskTodo.db", "1.0", "Todo manager", dbSize);
      }
      
      html5rocks.webdb.createTable = function() {
        var db = html5rocks.webdb.db;
        db.transaction(function(tx) {
          tx.executeSql("CREATE TABLE IF NOT EXISTS todo(ID INTEGER PRIMARY KEY ASC, todo TEXT, added_on DATETIME)", []);
        });
      }
      
      html5rocks.webdb.addTodo = function(todoText) {
        var db = html5rocks.webdb.db;
        db.transaction(function(tx){
          var addedOn = new Date();
          tx.executeSql("INSERT INTO todo(todo, added_on) VALUES (?,?)",
              [todoText, addedOn],
              html5rocks.webdb.onSuccess,
              html5rocks.webdb.onError);
         });
      }
      
      html5rocks.webdb.onError = function(tx, e) {
        alert("There has been an error: " + e.message);
      }
      
      html5rocks.webdb.onSuccess = function(tx, r) {
        // re-render the data.
        html5rocks.webdb.getAllTodoItems(loadTodoItems);
      }
      
      
      html5rocks.webdb.getAllTodoItems = function(renderFunc) {
        var db = html5rocks.webdb.db;
        db.transaction(function(tx) {
          tx.executeSql("SELECT * FROM todo", [], renderFunc,
              html5rocks.webdb.onError);
        });
      }
      
      html5rocks.webdb.deleteTodo = function(id) {
        var db = html5rocks.webdb.db;
        db.transaction(function(tx){
          tx.executeSql("DELETE FROM todo WHERE ID=?", [id],
              html5rocks.webdb.onSuccess,
              html5rocks.webdb.onError);
          });
      }
      
      function loadTodoItems(tx, rs) {
        var rowOutput = "";
        var todoItems = document.getElementById("todoItems");
        for (var i=0; i < rs.rows.length; i++) {
          rowOutput += renderTodo(rs.rows.item(i));
        }
      
        todoItems.innerHTML = rowOutput;
      }
      
      function renderTodo(row) {
        return "<li>" + row.todo  + " [<a href='javascript:void(0);'  onclick='html5rocks.webdb.deleteTodo(" + row.ID +");'>Delete</a>]</li>";
      }
      
      function init() {
        html5rocks.webdb.open();
        html5rocks.webdb.createTable();
        html5rocks.webdb.getAllTodoItems(loadTodoItems);
      }
      
      function addTodo() {
        var todo = document.getElementById("todo");
        html5rocks.webdb.addTodo(todo.value);
        todo.value = "";
      }
    </script>
  </head>
  <body onload="init();">
    <ul id="todoItems">
    </ul>
    <form type="post" onsubmit="addTodo(); return false;">
      <input type="text" id="todo" name="todo" placeholder="What do you need to do?" style="width: 200px;" />
      <input type="submit" value="Add Todo Item"/>
    </form>
  </body>
</html>
Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
TroaX
Beiträge: 684
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Linux Mint | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Linux Mint
Wohnort: NRW
Kontaktdaten:

Re: SQLite über Webgadget auslesen

Beitrag von TroaX »

Schau mal in der Konsole nach, welcher Fehler dir der FF ausgibt. Du findest diese unter den "Web-Entwickler" Tools unter "Web-Konsole". Darüber erklärt sich das meiste schon ;-)
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Linux Mint
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Linux Mint
NAS: Fritz.Box 5690 Pro (Nur für Keepass-DB)
Coding: Purebasic, Spiderbasic, GDevelop, Javascript/Node
Antworten