Deutsch English
Alphabetischer Index
Array-Funktionen
CGI-Funktionen
Datentypen
Datums/Uhrzeit-Funktionen
Debugging
Operatoren
Ramtext-Funktionen
Selektion
Socket-Funktionen
Sonstige-Funktionen
Sprachelemente
Statistik-Funktionen
Stream-Funktionen
String-Funktionen
System-Funktionen
Tabellen-Funktionen
  • access()
  • andmarks()
  • autofield()
  • autorecno()
  • blobsize()
  • blobtype()
  • cleardat()
  • closedb()
  • copyblob()
  • copymemo()
  • dbdir()
  • dbname()
  • dbno()
  • dbrights()
  • deldb()
  • delindex()
  • delmark()
  • delmarkedrecords()
  • delmarks()
  • delrec()
  • editoff()
  • editon()
  • embedblob()
  • exists()
  • fields()
  • filemode()
  • fileno()
  • filesize()
  • findandmark()
  • findauto()
  • findrec()
  • firstmark()
  • firstrec()
  • flushdb()
  • fsum()
  • genindex()
  • getcode()
  • getdef()
  • getfield()
  • getmarks()
  • getmode()
  • getpw()
  • getrec()
  • getrfield()
  • getstructure()
  • gettype()
  • incrfield()
  • inddef()
  • indname()
  • indno()
  • ismark()
  • label()
  • labelno()
  • lastrec()
  • link()
  • linkblob()
  • linkinfo()
  • lock()
  • makedb()
  • markdoubles()
  • markindex()
  • markpattern()
  • maxfile()
  • maxlabel()
  • memolen()
  • memostr()
  • newtable()
  • nextmark()
  • nextrec()
  • nmarks()
  • opendb()
  • prevrec()
  • primfile()
  • primtable()
  • putmarks()
  • putrec()
  • readmemo()
  • readrec()
  • recno()
  • recno()
  • recnr()
  • regenall()
  • regenind()
  • relation()
  • rendb()
  • reopendb()
  • revmarks()
  • setalias()
  • setauto()
  • setfield()
  • setfields()
  • setfilter()
  • setmark()
  • setmarks()
  • setrecord()
  • setrfield()
  • sortmark()
  • treeinfo()
  • unlock()
  • writerec()
    Text-Funktionen
    Volltext-Funktionen
    Zahlen-Funktionen
    Home    Überblick    Suche    Impressum    Kontakt    Mitglieder
    Themenkomplex Tabellen-Funktionen
    Funktion getmarks()
    Kurz speichert eine Markierungsliste
    Syntax GETMARKS(db : INTEGER; VAR marks) : INTEGER
    Parameter db : Tabellenhandle von OpenDB
    marks : MARKS | INTEGER[] | REAL[] | TBITS[]
    Ergebnis 0 : Operation erfolgreich
    sonst : Fehlercode (44 falscher Typ)
    Siehe auch:
    putmarks() genindex() getmarksauto() putmarksauto()
    Beschreibung In manchen Fällen kommt es vor, dass man die Markierungsliste zwischenpeichern muss, weil z.B. kurzfristig eine weitere Selektion auf die Tabelle vorgenommen werden muss. Zu diesem Zweck bietet EASY die Funktionen »getmarks« und »putmarks«. Diese Funktionen können mit unterschiedlichen Argumenten aufgerufen werden:
    VAR marks : MARKS
    getmarks(db,marks) // sichert die Markierungsliste von db in marks
    putmarks(db,marks) // speichert die gesicherte Markierungsliste zurück
    
    Hinweis: putmarks überschreibt die aktuelle Markierungsliste von db. Der Datentyp MARKS kann nur mit diesen beiden Funktionen verwendet werden. Der große Vorteil, eine Variable vom Typ MARKS einzusetzen, besteht darin, dass * nur der wirklich benötigte Speicherplatz verwendet wird * die Sortierung innerhalb der Markierungslist erhalten bleibt Die Markierungsliste kann aber auch auf in einem INTEGER oder REAL-Array gespeichert werden. Hier muss der Programmierer dafür sorgen, dass das REAL-Array genügend Elemente enthält, um die gesamte Liste speichern zu können:
    VAR marks : INTEGER[]
    ...
    initarray(marks[nmarks(db)])
    getmarks(db,marks)
    putmarks(db,marks)
    
    Nach »getmarks(db,marks)« liegen in »marks« die physikalischen Satznummern der Markierungsliste vor. Hier eine Prozedur, in der die Markierungsiste in einer externen Textdatei gespeichert wird:
    PROCEDURE SaveMarks(db : INTEGER);
    VAR text,i : INTEGER;
    VAR marks : INTEGER[];
      initarray(marks[nmarks(db)]);
      getmarks(db,marks);
      IF text:=rewrite('marks_save') THEN
        nloop(i,high(1,marks)-1,writeln(text,marks[i]));
        close(text)
      END
    ENDPROC
    
    Auch der Einsatz von »getmarks« und »putmarks« mit einem REAL-Array ist ordnungserhaltend. Der Vorteil liegt darin, dass die Satznummern unmittelbar greif- und manipulierbar vorliegen. Schließlich gibt es noch die Möglichkeit, eine Variable vom Type TBITS zu verwenden. Um richtig zu arbeiten, muss dieses Feld so dimensioniert werden, dass es die gesamte Tabelle abbilden kann:
    VAR marks : TBITS[]
    ...
    initarray(marks[filesize(db)])
    getmarks(db,marks)
    putmarks(db,marks)
    
    Hier gilt nach »getmarks(db,marks)«, dass * marks[x]=1 wenn der Datensatz mit der Satznummer x in der Markierungsiste ist * marks[x]=0 andernfalls »marks« ist somit ein Abbild der Teilmenge der Tabelle, die durch die Markierungsliste festgelegt ist. Und wie bei jeder Menge, geht hier die Ordnung verloren! Der Vorteil der Verwendung von TBITS liegt vor allem darin, dass mit den Funktionen * bitand(b_feld1,b_feld2) * bitor(b_feld1,b_feld2) * bitandnot(b_feld1,b_feld2) die wichtigsten Mengenoperationen sehr effizient durchgeführt werden können. Alle drei Funktionen liefern liefern die Cardinalität (Anzahl der Einsen) von »b_feld_1« nach der jeweiligen Operation. bitand: b_feld1 := b_feld1 geschnitten mit b_feld2 bitor: b_feld1 := b_feld1 vereinigt mit b_feld2 bitandnot: b_feld1 := b_feld1 geschnitten mit dem Komliment von b_feld2 (Mengendifferenz) Die Arbeit mit dem Datentyp TBITS ist so effizient, dass beispielsweise die Volltextsuche grundsätzlich darauf zurückgreift (»markbits«). Man wird sie immer dann einsetzen, wenn mehrere - logisch verknüpfte - Selektionen auf eine Tabelle ausgeführt werden.

    tdbengine chat
    irc.tdbengine.org
    #tdbengine

       Copyright © 2003-2004 tdb Software Service GmbH
       Alle rechte vorbehalten. / All rights reserved
       Letzte Änderung: 21.10.2004
    {Fehler für :execmacro{execmacro="sessionspy"}