Antwort auf: Data

Startseite Foren Deutsches LiveCode-Forum Data Antwort auf: Data

#14865
Klaus Major
Administrator

    Hi Herby,

    OHA! Wer keine Arbeit hat, macht sich welche! 😎

    Ich nehme mal an Dein erste Spalte im Datagrid heisst „Begriff“ („medizin“? Einheitliche Namensgebung HAT schon seine Vorteile! 😉 )

    Hier ein paar grundlegende Datanbankfakten:

    repeat with x = 1 to xdsg -- Anzahl der Datensätze
      put "SELECT Begriff, Beschreibung, ID FROM DBMedizin WHERE ID = " &x into xsel

    Wenn Du ALLE Datensätze haben willst, lass einfach das WHERE… weg!
    Ja, ich weiß, aber lies erst den nächsten Absatz 🙂
    put revDataFromQuery(tab,return,xsql,xsel) into xerg
    Offensichtlich ist Dir die Bedeutung der beiden ersten Parameter TAB, CR nicht bekannt, bitte immer mal im Dictionary nachlesen für weitergehende Infos!

    Sie bedeuten: Liefer mir die gewünschten Daten im folgenden Format:
    Inhalt der Datenbankfelder per TAB getrennt, ein Datensatz PRO ZEILE (= per CR getrennt)

    Also Das hier macht genau das, was Du umständlich geskriptet hast, allerdings ohne die leere Zeile am Ende:

    ...
    put revOpenDatabase("sqlite",xpfd, , , , ) into xsql
    put "SELECT Begriff, Beschreibung, ID FROM DBMedizin" into xsel
    put revDataFromQuery(tab,return,xsql,xsel) into xerg
    put textDecode(xerg,"UTF-8") into xerg 
    revCloseDatabase xsql
    set the dgtext of group "DataM" to xerg
    ...

    Du kannst auch die Datenbank selber sortieren lassen, die ist schneller als LC:
    put "SELECT Begriff, Beschreibung, ID FROM DBMedizin ORDER BY Begriff" into xsel

    Da bei ca. 2550 Datensätze der Anwender lange braucht um von A (z.B.) nach K zu scrollen, würde ich gerne das Alphabet zum Anklicken am Rande anzeigen, damit er einfach „K“ anklicken kann und das DataGrid mit „K“ weitermacht. Ich könnte natürlich auch das DataGrid einfach mit allen K-Begriffen laden, aber ich möchte gerne A-Z im DataGrid haben und zwischen den Buchstaben hin- und herspringen. (ohne neu zu laden)

    Der Zugriff auf lokale SQLite Datenbanken ist affenartig schnell, daher würde ich dennoch zu Letzterem raten!

    Bedenke, Dein Skript macht mehr als 2500 Datenbankabfragen und Du bearbeitst auch noch jedes Ergebnis! Du kannst ja mal Dein Skript gegen meines „timen“.

    Ich empfehle, daß Du zuerst alles mit A lädst und eine Funktion oder Handler erstellst, der Dir die Daten mit den gewünschten Anfgangsbuchstaben liefert. Das wird schneller sein, als die gewüsnchte Zeile zu suchen und dahin zu scrollen!
    Sowas hier vielleicht:

    ## Über gib den gewünschten Anfangsbuchstaben oder * für ALLE datensätze
    ## Das SQL Zauberwort hierfür heisst -> LIKE
    command datensaetze_die_beginnen_mit demBuchstaben
    
       ## SQL für ALLE Datensätze
       put "SELECT Begriff, Beschreibung, ID FROM DBMedizin" into tSQL
    
      if demBuchstaben <> "*" then
       ## Bedingung an SQL anfügen
       put " WHERE Begriff LIKE" && q2(demBuchstaben & "%") after tSQL
      end if
    
      put revOpenDatabase("sqlite",xpfd, , , , ) into xsql
      put revDataFromQuery(tab,return,xsql,tSQL) into xerg
      if xerg = EMPTY then
        answer "Keine Datensätez mit" && demBuchstaben" && vorhanden!"
      else
       put textDecode(xerg,"UTF-8") into xerg  -- Umlaute umwandeln
       set the dgtext of group "DataM" to xerg
      end if
      revCloseDatabase xsql
    end datensaetze_die_beginnen_mit

    Beispiel, User klickt auf D in Deinem Index an der Seite:

    on mouseup
       datensaetze_die_beginnen_mit "D"
    end mouseup 

    Probiere das mal aus und freue Dich darüber, wie flott das geht! 🙂

    Gruß

    Klaus