German Favoritenliste

jabberwocky

Member
Licensed User
Longtime User
Hallo,

gibt es irgendwo ein Tutorial wie man eine Favoritenliste erstelllen kann?
Ich benutze HelpScrollView und würde gerne bestimmte Seite makieren lassen können und auf einer Favoritenliste angezeigt bekommen.
 

jabberwocky

Member
Licensed User
Longtime User
Ich habe nun eine Datenbank mit 3 Spalten (ID, Inhalt, Marker) erstellt. Mein Problem, mir helfen die Tutorials / Forum nicht weiter (die Suche ist leider nicht mehr so gut wie früher). Wie kann ich die test.db einlesen?
Ich möchte mittels "ID" aus der gleichen Zeile (Spalte 2) den "Inhalt" ausgeben.
Außerdem möchte ich dass man die 3. Spalte "Marker" mit einer Zahl z.B. eins oder der "ID" füllt um damit dann eine Favoritenliste auslesen zu können. Sprich wenn "Marker" = "ID".
Wäre super wenn mir jemand ein Code Beispiel geben könnte.
 
Last edited:

jabberwocky

Member
Licensed User
Longtime User
Hallo Klaus,

ja habe ich mir angeschaut. Aber irgendwie bin ich zu doof. Ich habe die inhalt.db im Files Ordner abgelegt. Für mich kommt das im Tutorial so rüber, als wenn ich erst durch die App eine (leere) Datenbank-Datei auf der SD-Karte erstelle und diese erst mit Inhalt durch die App gefüllt wird.
 

jabberwocky

Member
Licensed User
Longtime User
Ich verstehe das nicht. Was ist Falsch?
B4X:
Sub Activity_Create(FirstTime As Boolean)
  If File.ExternalWritable = False Then
  Msgbox("Kann nicht auf der SDCard schreiben","Datei")
  Else
    If FirstTime Then
        File.Copy(File.DirAssets, "idm.db", File.DirDefaultExternal, "idm.db")
        SQL1.Initialize(File.DirDefaultExternal, "idm.db", True)
    End If
  End If

Wenn ich nun in einer Activity eine SQL-Abfrage starte, kommt die Fehlermeldung, dass die Tabelle "idm" nicht existiert.
Dabei müsste lt. idm.db diese existieren:
DROP TABLE IF EXISTS "idm";
CREATE TABLE "idm"...
 

klaus

Expert
Licensed User
Longtime User
Was ist der Name der Tabelle ?
Auch wenn die Datenbank idm.cb heisst, heisst das nicht dass die Tabelle den gleichen Namen hat.
Ich schlage Dir noch folgende Änderung vor:
B4X:
If FirstTime Then
    If Not(File.Exists(File.DirDefaultExternal, "idm.db") Then
        File.Copy(File.DirAssets, "idm.db", File.DirDefaultExternal, "idm.db")
    End If
    SQL1.Initialize(File.DirDefaultExternal, "idm.db", True)
End If
Die Datenbank nur kopieren wenn sie nicht in File.DirDefaultExternal existiert.

Beste Grüsse.
 

jabberwocky

Member
Licensed User
Longtime User
Erstmal danke für die Verbesserung!
Die Tabelle heißt wie die Datenbank-Datei "idm".
Der Inhalt von idm.db ist:
B4X:
CREATE TABLE "idm" ("ID" INTEGER PRIMARY KEY  NOT NULL  UNIQUE , "Inhalt" TEXT, "Marker" INTEGER, "Bild" BLOB);
INSERT INTO "idm" VALUES(1 ...

Also müsste doch die Tabelle "idm" auch existieren. Oder ich bin komplett aufm falschen Dampfer.
 
Last edited:

klaus

Expert
Licensed User
Longtime User
Wie hast Du die Datenbank erstellt ?
Ich bekomme auch den Fehler.
Habe versucht sie mit SQLite2009Pro zu lesen, leider ohne Erfolg Datanbank verschlüsselt oder es ist keine Datenbank.
Habe in B4A versucht die Tabellennamen zu lesen auch ohne Erfolg !

Beste Grüsse.
 

jabberwocky

Member
Licensed User
Longtime User
Seltsam, ich habe es so gemacht wie hier: http://www.b4x.com/android/wiki/index.php/Datenbanken beschrieben.
Hast du vllt. eine simple Datenbankdatei, mit der ich testen kann?

Edit: Direkt aus B4A geht es. Ist nur nervig, jetzt die ganzen SQL Befehle in das passende Format zu ändern. Frage mich warum das einfach nicht mit der sql/db Datei funktionieren will.
 
Last edited:

klaus

Expert
Licensed User
Longtime User
Beiliegend die Datenbank aus dem SQLExample Programm vom User's Guide.
Das Programm, mit der Datenbank, findest Du im SourceCode Ordner der mit dem User's Guide mitkommt.
Du musst die Extension von .bas in .db umtauschen, *.db Dateien kann man nicht hochladen.

Beste Grüsse.
 

Attachments

  • persons.bas
    4 KB · Views: 235

jabberwocky

Member
Licensed User
Longtime User
So jetzt aufeinmal funktioniert es. Hab eine neue Datenbank mit dem Manager erstellt und diese gespeicherte Version genommen. Irgendwie funktioniert das mit der exportierten nicht. Keine Ahnung warum?!

Klaus ich danke dir sehr, du hast mich auf den richtigen Pfad (schon wieder :) ) gebracht!
 

jabberwocky

Member
Licensed User
Longtime User
Ok jetzt habe ich das mit der DB in der App soweit hinbekommen.
Nun weiß ich nicht so recht, wie ich die Inhalte der Favoritenliste am besten auslese.

Ich habe 3 Spalten in der Datenbank:

ID | Inhalt | Marker

Favoriten wurden in der Spalte "Marker" mit dem Wert "1" hinterlegt sonst "0".

Jetzt müsste ich mit fortlaufender "ID" schauen, ob "Marker" gleich "1" ist und lese dann jeweils aus der Spalte "Inhalt" den Text raus.
Komme da jetzt nicht weiter :(
 

klaus

Expert
Licensed User
Longtime User
Die ID Spalte solltest Du als INTEGER PRIMARY KEY definieren, da wird der ID automatisch erhöht.
Als Beispiel:
SQL1.ExecNonQuery("CREATE TABLE Favoriten (ID INTEGER PRIMARY KEY, Inhalt TEXT, Marker INTEGER)")

Das Füllen könnte so aussehen:
SQL1.ExecNonQuery2("INSERT INTO Favoriten VALUES(NULL, ?, ?)", Array As Object(Inhalt, Marker))
NULL zum automatischen erhöhen des IDs.

Die Suche in der Datenbank könnte so aussehen:
Cursor1 = SQL1.ExecQuery("SELECT * FROM Favoriten WHERE Marker = 1")

Beiliegend ein kleines Testprogramm.

Beste Grüsse.
 

Attachments

  • test.zip
    16.2 KB · Views: 230

jabberwocky

Member
Licensed User
Longtime User
Funktioniert ohne Probleme. Gibt es eine Möglichkeit die Ausgabe als Label statt Listview zu realisieren? Wenn ich das so als Label ausgebe, erscheint natürlich immer der letzte Eintrag, da die anderen überschrieben werden.
 

klaus

Expert
Licensed User
Longtime User
Gibt es eine Möglichkeit die Ausgabe als Label statt Listview zu realisieren?
Ja das ist möglich aber nicht 'ideal'.
Wenn Du nur eine Zeile anzeigen willst könntest Du einen Spinner benutzen der zeigt nur eine Zeile an erlaubt aber alle anzuzeigen und einen anderen Eintrag zu wählen.
Ich habe eine ListView benutzt weil Ich nicht weiss was Du weiter damit machen willst.

Beste Grüsse.
 

jabberwocky

Member
Licensed User
Longtime User
Ich habs jetzt so gelöst:
B4X:
    For i = 0 To Cursor1.RowCount - 1
    Cursor1.Position = i
'    ListView1.AddSingleLine(Cursor1.GetInt("ID") & " : " & Cursor1.GetString("Witz"))
    ftxt = Cursor1.GetInt("ID") & " : " & Cursor1.GetString("Witz") & CRLF & CRLF
    ftxt2 = ftxt2 & ftxt
    Next

Vielen Dank für deine Hilfe!
 
Top