Frage

Ich versuche, einige Datensätze aus einer TADOQuery zu filtern. Ich habe die gefilterten Eigenschaft auf true, und wenn ich die Filter auf Feld = ‚Wert‘ gesetzt, alles funktioniert gut. Ich möchte dynamisch diesen Filter bauen durch Anhängen

<space>AND field='value'

auf einen Wert immer wahr, und ich dachte, 1 = 1 würde den Trick. 1 haben = 1 als Standard-Filter Also ich würde und dann einfach anhängen AND field='value', um es als notwendig.

Dies ist jedoch nicht funktioniert. Die Fehlermeldung lautet:

  

Die Argumente sind vom falschen Typ, liegen außerhalb des zulässigen Bereichs oder stehen in Konflikt miteinander stehen.

Könnte jemand bitte sagen Sie mir, was könnte ich als vielseitig verwenden immer wahre Ausdruck für diesen Filter?

War es hilfreich?

Lösung

Ich nehme an, es ist selbstverständlich, aber es hängt von dem OLE DB-Provider, ob oder nicht das funktioniert. Wenn Sie einen Filter auf einem vorhandenen Datensatz gesetzt, endet es nach oben geht durch eine andere OLE DB-Schnittstelle (IViewFilter, wenn ich mich richtig erinnere). Also selbst wenn ein Filter arbeitet in einer WHERE-Klausel in einer SQL-Anweisung, bedeutet dies nicht zwangsläufig bedeuten, dass es als Filter funktioniert. Der Filter, den Sie festgelegt endet immer auseinander in die Komponententeile analysiert und dann an den OLE DB-Schnittstelle übergeben. Es kann sein, dass die Umsetzung des Anbieters keinen Filter der Form „konstant = konstant“ zu erwarten. Zur Umgehung des Problems können Sie versuchen, sie alle in der WHERE-Klausel der SQL-Anweisung zu setzen.

Andere Tipps

Sie haben die ‚Filtered‘ Eigenschaft auf False zu setzen, wenn Sie etwas nicht filtern, und setzen Sie ihn wahr und Ihren Zustand, wenn Sie die Suchresultates wollen gefiltert werden.

würde ich dynamisch die richtige SQL-Eigenschaft bauen, obwohl, so dass Sie immer genau wissen, was es bedeutet, senden Sie an die Datenbank (und Sie sind sicher, dass nur die Datensätze, die Sie von Ihrem Programm erhalten mögen).

1 = 1 Trick funktioniert in der where-Klausel einer Abfrage, aber nicht in der gefilterten Eigenschaft. Wenn Sie den Filter deaktivieren möchten, auf false gesetzt gefiltert und alle Datensätze zurückgegeben.

Das Problem mit Filtern ist, dass es Seite getan Client ist. Wenn Sie eine Datenbank-Engine wie SQL Server verwenden und erwarten, dass eine große Menge von Datensätzen zu Filter haben, dann besser gedient, indem Sie die SQL-Abfrage zu ändern, die der Datenbankserver nur die angeforderten Datensätze zurück ermöglichen. Denken Sie daran, schließen Sie Ihren TADOQuery zuerst, ändern Sie die SQL dann wieder zu öffnen.

Ein Trick, den ich den gesamten Datensatz zu vermeiden, verwenden Rückkehr (für große Datensätze verwendet) ist eine maximale Anzahl von Datensätzen prüfen ich angezeigt werden soll, dann die TOP SQL-Syntax verwenden, eine mehr als die Anzahl der Datensätze zurück Ich wollte Anzeige ‚n‘ ... wenn ich diese Zahl erreicht, dann benachrichtigen ich den Benutzer, dass es mehr als n-1 Datensätze zurückgegeben und die Suche / Filterkriterien anzupassen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top