Zur Navigation

Web SQL nutzen

1 Kokarde

Woow, Danke!

Muss mal sehen, ob ich das überhaupt schnalle :)
Bin ja hier totaler Anfänger ...

Hab jetzt mit Web SQL bereits eine DB und eine Tabelle erzeugt.

<script>
           
      
var db = openDatabase('MUNITION', '1.0', 'Munitionsübersicht', 2 * 1024 * 1024);
      
db.transaction(function (tx) {
    
tx.executeSql('CREATE TABLE KISTE (id, kaliber, hersteller, anzahl)');
    
    alert("Die Tabelle KISTE mit den Spalten ID, KALIBER, HERSTELLER und ANZAHL wurde erstellt.");
    
});
      
</script>

Auch das Löschen klappt.

<script>
      
                
var name = "KISTE";      
      
var db = openDatabase('MUNITION', '1.0', 'Munitionsübersicht', 2 * 1024 * 1024);
      
      alert("Die folgende Tabelle wird glöscht: " + name);
      
db.transaction(function (tx) {
    
    tx.executeSql('DROP TABLE KISTE');
    
    
});
      
</script>


Ich denke, wenn ich jetzt noch heraus finde, wie ich in diesen Select nun auch noch das Wort "KISTE" in eine Variable umwandle, so dass dieses Wort zuvor definiert werden kann und flexibel bleibt, dann wäre ich zu 98% fertig :))

tx.executeSql('SELECT * FROM KISTE')

tx.executeSql('DROP TABLE KISTE');

KISTE ist eigentlich kein fester Wert und sollte sich ändern können.

Vermutlich so:

 tx.executeSql('SELECT * FROM ' + KISTE + ''

Das zuvor erfragte Problem habe ich bereits gelöst.
Hier hatte ich einen Denkfehler.

Sieht dann so aus:

// Connect auf Datenbank 
      
var db = openDatabase('MUNITION', '1.0', 'Munitionsübersicht', 2 * 1024 * 1024);
      
// Hineinschreiben in die Tabelle      
      
db.transaction(function (tx) {
    
   tx.executeSql('INSERT INTO KISTE (id, kaliber, hersteller, anzahl) VALUES (?, ?, ?, ?)',[timestamp,kaliber,hersteller,stueckzahl]);
  

So kann ich die Werte per Formular übergeben und hinein schreiben lassen.
Funzt wunderbar :)

Ich bin echt dankbar, durch die Hilfe und die Erkenntnisse hier bin ich sehr weit gekommen. Und ich denke, Web SQL ist die Lösung. Der Rest nur noch Feinschliff!

Ich werde berichten wenn es zu 99,99% fertig ist *lach*

16.09.2016 12:25 | geändert: 16.09.2016 13:01

2 Jörg Kruse

Ich denke, wenn ich jetzt noch heraus finde, wie ich in diesen Select nun auch noch das Wort "KISTE" in eine Variable umwandle, so dass dieses Wort zuvor definiert werden kann und flexibel bleibt, dann wäre ich zu 98% fertig :))

tx.executeSql('SELECT * FROM KISTE')

tx.executeSql('DROP TABLE KISTE');

KISTE ist eigentlich kein fester Wert und sollte sich ändern können.

Mit + kannst du den SQL-String zusammenfügen:

var tabelle = 'KISTE';

tx.executeSql('SELECT * FROM ' + tabelle);

tx.executeSql('DROP TABLE ' + tabelle);

16.09.2016 12:36 | geändert: 16.09.2016 12:38

3 Kokarde

Huch, jetzt haben sich mein Edit und deine Antwort überschnitten ... SORRY ...

Genau! Das + und das zusätzliche Hochkomme waren die Lösung :))

16.09.2016 13:03

4 Kokarde

Hallöchen

Ich hoffe Du hattest ein gutes Weekend.
Wieder ein DANK für das schnelle Feedback.
Ich hatte es bereits ansatzweise so umgesetzt.

Das mit der Variablen habe ich nur schlecht erklärt.
Hier hatte ich bereits wie folgt umgesetzt:

var KISTE = "KISTE2";

KISTE2 kommt aus dem Formular und wird zur Variablen KISTE die ich dann weiter nutzen möchte.

Durch Deine Hilfe ist der Block nun fertig und funktioniert! *geilomat*

 db.transaction(function (tx) {

                tx.executeSql('SELECT * FROM ' + KISTE, [], function (tx, results) {
               var len = results.rows.length, i;
               msg = "<p><b>Summe Einträge: " + len + "</b></p>";
               document.querySelector('#status').innerHTML +=  msg;

Ich Dummerchen hatte hinter dem Wort KISTE noch ein Hochkomma.
Nach dem Löschen von diesem Hochkomma war alles gut :)
Wäre mir ohne Dein Tipp nicht aufgefallen!

Nun klappt die Übergabe des Formularwertes zur Auflistungsdatei und die Auflistung wird gezogen und angezeigt :)

Ich bin auf der Zielgeraden.

Als nächstes habe ich mir vorgenommen die Liste, die angezeigt wird, so zu erweitern, dass ich hinter die angezeigten Kisten so eine Art "edit" Button lege und somit dann auf jede Kiste direkt gesprungen werden kann, damit ich mir den Inhalt der Kiste ansehen kann.

Mal sehen wie ich das hinbiege :)

Einen guten Wochenstart wünsche ich!

Anbei hier die aktuelle Listenerzeugung, für ALLE die sich das auch mal ähnlich bauen wollen. Nicht wundern, das Wort KISTE wird hier natürlich nicht einfach banal gesetzt, wie oben beschrieben, sondern vom Formular geholt, dazu wird im Formular die ID "formkiste" genutzt und nicht einfach KISTE2. Später werde ich noch alles einmal komplett posten:

<body>
    
    
    <div class="container">
	
      <script>
          
               // Setzen der Variablen url und hinschreiben des aktuellen Strings der per GET vom Formular kommt 
      
    var url = window.location.href; 

     // zerschneiden der Stringübergabe vom Formular, ggf. für jedes Feld im Formular nötig! 
    
    var KISTE = /formkiste=([^&]+)/.exec(url)[1]; 
            
          alert("Es wird angezeigt: " + KISTE)

         var db = openDatabase('MUNITION', '1.0', 'Munitionsübersicht', 2 * 1024 * 1024);
          
             db.transaction(function (tx) {

                tx.executeSql('SELECT * FROM ' + KISTE, [], function (tx, results) {
               var len = results.rows.length, i;
               msg = "<p><b>Summe Einträge: " + len + "</b></p>";
               document.querySelector('#status').innerHTML +=  msg;
					
               for (i = 0; i < len; i++){
                  msg = "<p>" + "<b>Hersteller:</b>" + results.rows.item(i).hersteller + " " + "<b>Kaliber:</b>" + results.rows.item(i).kaliber + " " + "<b>Anzahl:</b>" +results.rows.item(i).anzahl + "</p>";
                  document.querySelector('#status').innerHTML +=  msg;
               }
            }, null);
         });
			
      
      </script>
    
     <a href="clear.html">Clearing DB >></a><br>
    
    <a href="create.html">Neue Kiste erstellen >></a><br>
    
    <hr>
    
    <div id="status" name="status">Status Message</div>
               
        
            </div>

</body>

21.09.2016 09:45

5 Kokarde

Fuck, ich muss echt noch viel lernen.

Scheinbar klappt der INSERT nicht.
Vermutlich habe ich das falsch zusammengestellt, oder?

 
tx.executeSql('CREATE TABLE' + KISTE + '(id, kaliber, hersteller, anzahl)');

Muss man da an den Hochkomma was ändern?

Es soll die Variable KISTE (also eine neue Tabelle), die bereits korrekt aus dem Formular ankommt, mit den Spalten "id, kaliber, hersteller, anzahl" in der Datenbank angelegt werden.

Wenn ich es direkt schreibe, also so

tx.executeSql('CREATE TABLE KISTE3 (id, kaliber, hersteller, anzahl)');

dann klappt es!

EDIT:

Lösung des Problems =

tx.executeSql('CREATE TABLE ' + MUNITIONSKISTE + ' (id, kaliber, hersteller, anzahl)');

21.09.2016 12:28 | geändert: 21.09.2016 12:44

6 Jörg Kruse

Ja, beim Zusammenfügen des SQL-Strings muss man darauf achten, dass zwischen SQL-Befehlen und Bezeichnern die trennenden Leerzeichen nicht fehlen.

21.09.2016 13:37

7 Kokarde

*grrrrrr*

Ja verdammt noch mal ... ich finde keinen Befehl um mir die Tabellen der Datenbank anzeigen zu lassen. Sowas wie SHOW TABLES etc. geht nicht, es kommt keine Ausgabe. Über Google finde ich immer nur Create Table, Drop Table ... aber sonst nix .. oder ich bin halt zu blöd dafür :)

Hast Du eine Idee?

db.transaction(function(tx) {
    tx.executeSql('SHOW TABLES FROM MUNITION', [], function(tx, results) {
      var len = results.rows.length;
      var i;
      for(i=0; i<len; i++) {
        //Set values coming from the database
        alert(results.rows.item(i));
      }
    });
  });

21.09.2016 14:49

9 Kokarde

Hi, ja das hatte ich gesehen, scheitere aber an der Anwendung :(

Bei mir kommt keine Ausgabe und der Debugger sagt es fehlt ein ")".
Wobei ich eher denke, es sind zu viele Klammern.

db.transaction(
    
    function(tx) {
    tx.executeSql('SELECT tbl_name, sql from sqlite_master WHERE type = 'table''), [], 
        
        function(tx, results) {
      var len = results.rows.length;
      var i;
      for(i=0; i<len; i++) {
        //Set values coming from the database
        alert(results.rows.item(i));
      }
        
    }
    
    );
  });

21.09.2016 15:26

10 Jörg Kruse

Der SQL-Befehl wird ja schon mit dem ersten ' beendet, d.h. direkt nach dem "type = ", und ist deswegen unvollständig. Du kannst statt der äußeren Hochkommata doppelte Anführungszeichen verwenden:

    tx.executeSql("SELECT tbl_name, sql from sqlite_master WHERE type = 'table'"), [],

... oder du maskierst die inneren Hochkommata:

    tx.executeSql('SELECT tbl_name, sql from sqlite_master WHERE type = \'table\''), [],

21.09.2016 16:12 | geändert: 21.09.2016 16:13