German Favoritenliste

Discussion in 'German Forum' started by jabberwocky, Aug 31, 2013.

  1. jabberwocky

    jabberwocky Member Licensed 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.
     
  2. jabberwocky

    jabberwocky Member Licensed 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: Sep 1, 2013
  3. klaus

    klaus Expert Licensed User

    Hast Du schon mal in den User's Guide reingeschaut da findest Du ein komplettes Kapitel über SQLite.

    Beste Grüsse.
     
  4. jabberwocky

    jabberwocky Member Licensed 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.
     
  5. jabberwocky

    jabberwocky Member Licensed User

    Ich verstehe das nicht. Was ist Falsch?
    Code:
    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"...
     
  6. klaus

    klaus Expert Licensed 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:
    Code:
    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 likes this.
  7. jabberwocky

    jabberwocky Member Licensed User

    Erstmal danke für die Verbesserung!
    Die Tabelle heißt wie die Datenbank-Datei "idm".
    Der Inhalt von idm.db ist:
    Code:
    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: Sep 2, 2013
  8. klaus

    klaus Expert Licensed User

    Versuche vieleicht mal File.DirDefaultExternal durch File.DirRooltExternal zu ersetzten nur zum sehen ob das funktioniert.
    Du könntest auch ein Testprojekt als zip-Datei posten dann könnte Ich mal reinschauen.

    Beste Grüsse.
     
  9. jabberwocky

    jabberwocky Member Licensed User

    Im Anhang ist ein Beispiel.
     

    Attached Files:

  10. klaus

    klaus Expert Licensed 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.
     
  11. jabberwocky

    jabberwocky Member Licensed User

  12. klaus

    klaus Expert Licensed User

    Versuche mal die Datenbank direkt in B4A zu erstellen.

    Beste Grüss.
     
    jabberwocky likes this.
  13. jabberwocky

    jabberwocky Member Licensed User

    Seltsam, ich habe es so gemacht wie hier: http://www.basic4ppc.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: Sep 2, 2013
  14. klaus

    klaus Expert Licensed 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.
     

    Attached Files:

    jabberwocky likes this.
  15. jabberwocky

    jabberwocky Member Licensed 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!
     
  16. jabberwocky

    jabberwocky Member Licensed 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 :(
     
  17. klaus

    klaus Expert Licensed 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.
     

    Attached Files:

    jabberwocky likes this.
  18. jabberwocky

    jabberwocky Member Licensed 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.
     
  19. klaus

    klaus Expert Licensed User

    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.
     
  20. jabberwocky

    jabberwocky Member Licensed User

    Ich habs jetzt so gelöst:
    Code:
    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!
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice