Announcement

Collapse
No announcement yet.

IBDataSet und Filter

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • IBDataSet und Filter

    Hallo Spezialisten!<BR>
    Kann man auf eine im IbDataSet zu Verfügung gestellten Datenmenge zur Einschränkung der Sicht einen Filter verwenden?<BR>
    Die Eigenschaft FILTERED existiert ja, und ich kann auch ein Quelltext dem FILTER einen Text zuweisen. Nur ändern tut sich nichts bei der Sicht auf die Daten.<BR>
    Ich weiß, das ich den gleichen Effekt mit 'ner WHERE-Anweisung erreichen kann. Wollte aber verhindern, das für jede Sicht ein Aufruf an den Server gesendet wird, da die Datenmenge ja auf dem Client schon zur Verfügung steht. Ist das ein Denkfehler oder eine Eigenheit von Interbase?<BR>

    Danke für Antworten.<BR>
    Gruß Gunnar

  • #2
    Hallo,

    ich bin zwar keiner dieser spezialisten hier auf der Seite, denke aber nun Ihr Problem - welches auch meins war/ist durchschaut zu haben. Ich habe nämlich schon "sehnsüchtig" auf eine Antworte zu Ihrem Beitrag gewartet und derweil weiter geforscht. Ich konnte jedoch nichts zu einem evtl. Bug bei IBDataset und Filter finden.

    Merkwürdig kam es mir vor, dass die IBTable das Filtern beherrscht IbDataset aber nicht.

    Was mag wohl passieren beim setzen der Filter Eigenschaften?

    Blieb also nur der Selbsttest. Gut das ich mich an dem im meinem Programm befindlichen SQL-Monitor (TIbSqlmonitor) erinnert habe. Dieser läßt sich per Registryeintrag aktivieren. Und so war ich über folgenden Trace erstaunt, der wohl gemerkt bei IBTable heraus kam
    <pre>
    _______________________ Log-Nr. 687 _______________________
    04.02.2003 16:12:54
    [Application: Ims]
    IBTable2: [Fetch] select "MyTable".*, RDB$DB_KEY as IBX_INTERNAL_DBKEY from "MyTable"
    where Name LIKE 'B%'
    order by "KDNR"
    </pre>

    Wo ich doch lediglich folgende Filteroption gesetzt habe.

    <pre>
    DBGrid1.DataSource.DataSet.Filter := 'Name'
    +' LIKE '
    + ''''
    + CON_TITEL_TABCTR[TabControl1.TabIndex]
    + '%'
    + '''';
    </pre>

    Bedeute dies nicht, das IBX im Hintergrund aus dem setzen eines Filters einen SQL-Befehl baut mit einer Where Klausel?

    Folgenden Trace ergibt sich bei Verwendung einer IBDataset

    <pre>
    ______________________ Log-Nr. 60 _______________________
    04.02.2003 16:31:25
    [Application: Ims]
    IBDataSet1: [Fetch] select * from MyTable
    </pre>

    Da also bei Verwendung von Filter und IBTable ohne hin eine weitere SQL Anfrange mit Where Klausel an den Server geschickt wird kann man ja auch das IBDataset verwenden und anstatt des Filters eben denn SQl Text ändern. Sollte gehen.

    Gruß Ren

    Comment


    • #3
      Hallo.<BR>Wenn durch den Filter nur eine neue Abfrage an den Server generiert wird kann ich das auch selbst erlegigen. Hatte eigentlich gedacht, das der Client die Daten vorhält und nur die 'Sicht' verändert wird.<BR>
      <BR>
      Gruß Gunna

      Comment


      • #4
        Hallo Gunnar,

        der meinung war ich zuerst auch. Aber wenn man mal überlegt es ist nur logisch das "Filter" eine neue Anfrage an den Server schickt.

        Denn wenn man eine IBTable oder IBDataset mit einem DBGrid über eine Datasource verbindet so enthält RecordCount ja nicht die tatsächliche Menge der DS sondern nur die der sichtbaren im DBGRID.

        Dies bedeutet doch, dass dem Client nicht alle Daten vorliegen, somit würde ein Filtern der Daten ja zu einem verkehrten Ergebnis Führe

        Comment

        Working...
        X