Startseite › Foren › Deutsches LiveCode-Forum › Data › Antwort auf: Data
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