Deutsch English
Alphabetischer Index
Array-Funktionen
  • bitand()
  • bitandnot()
  • bitnot()
  • bitor()
  • bitsum()
  • bittrunc()
  • clrarray()
  • 'DELSESSION'
  • getauto()
  • getmarksauto()
  • high()
  • inarray()
  • inarraypos()
  • initarray()
  • nbits()
  • putmarksauto()
  • 'SETSESSIONIDENT'
  • strsort()
    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
    Text-Funktionen
    Volltext-Funktionen
    Zahlen-Funktionen
    Home    Überblick    Suche    Impressum    Kontakt    Mitglieder
    Themenkomplex Array-Funktionen
    Funktion getauto()
    Kurz Kopiert den inr-Index in ein Array
    Syntax GetAuto(db : INTEGER; VAR an : INTEGER[];i:Integer) : INTEGER
    Parameter db : Tabellenhandle von OpenDB
    an : ARRAY[FilsIze(db)] : INTEGER zum Speichern de Autonummern.
    i : Integer 0=Index über Laufende_Nummer, >0 ist eine Indexnummer eines Index über ein Linkfeld (AChtung: noch keine Fehlerbehandlung bei Angabe eines falschen Index!)
    Ergebnis Ergebnis: -1 -> Feld zu klein dimensioniert
    sonst FileSize(db), wenn alles okay
    Siehe auch:
    bitand() bitor() bitandnot() bitnot()
    Beschreibung Die Funktion scheibt sämtliche Autonummern in das Feld "an", der Feldindex ist die physikalische Satznummer.


    Anwendung:
    Anzuzeigen sind 100.000 Datensätze seitenweise 20 Einträge pro Seite.
    Hier muß man als pro Seitenabruf die nächsten 20 Einträge anzeigen.
    Da der aktuelle Prozess vom vorherigen Prozess nichts weiss, müßte man jedesmal die Selektion auf die Datenbank erneut ausführen und anschließend noch innerhalb der Datenbank so weit die Datensätze lesen, bis man auf die anzuzeigenden Einträge stösst.
    Dies würde inakzeptable Laufzeiten bewirken und außerdem den Server noch stark belasten.

    Aus diesem Grund ist es besser, man speichert sich das Suchergebnis in Form von markierten Datensätzen in einem Array.
    Da das Array wiederum nach Beendigung des Prozesses gelöscht sein würde, speichert man sich das Array in einem Blobfeld.
    Mit EmbebBlob und CopyBlob kann man Arrays in ein Blobfeld speichern und wieder auslesen.

    Wenn man die Datensätze markiert hat kann man die Laufende_Nummer der jeweiligen Einträge über GETAUTO schneller ermitteln, als über einen Zugriff auf die Tabelle und über das Auslesen des Feldinhaltes über GetField. Dies spielt bei kleinen Datenmengen noch keine Rolle, bei mehreren 100.000 Einträgen summieren sich aber die Einzelzeiten und aus diesem Grund ist das Auslesen über GetField nicht mehr praktikabel.

    Procedure Mkl2Lfd(cSes,cTable,cBlobMkl,cBlobLfd:String;TimeStamp:Integer)
    /*
    18.11.2003
    hg
    Speichert ein TBits Array in einem Integer Array
    18/11/03hg : erweitert um TimeStamp

    */
    Var i,j,nDB : Integer
    Var nMax : Integer
    Var aTBits : TBits[]
    Var aGetAuto : Integer[]
    Var aLfd : Integer[]
    nDB := OpenDB("../database/"+cTable+".dat","",0,0)
    nMax := FileSize(nDB)
    InitArray(aTBits[nMax])
    InitArray(aGetAuto[nMax])
    GetAuto(nDB,aGetAuto)
    CloseAllDB
    Blob2TBitArray(cSes,cTable,cBlobMkl,aTBits)
    InitArray(aLfd[NBits(aTBits)-1] )

    // Ermittlung der markierten Einträge und Übertrag auf .lfd-Datei
    If NBits(aTBits)
    i:=-1
    Repeat
    If aTBits[j]=1
    aLfd[i++] := aGetAuto[j]
    End
    Until j++>nMax
    End
    TBitArray2Blob(cSes,cTable,cBlobMkl,aTBits,TimeStamp)
    IntegerArray2Blob(cSes,cTable,cBlobLfd,aLfd,TimeStamp)
    EndProc


    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"}