![]() |
Datenbank: SQL • Version: 1 • Zugriff über: ibExpert
DataSet Filtern
Hi Leute,
wie kann ich ein DbGrid Filtern, das er mir nur noch das anzeigt was ich in ein Editfeld schreibe. ich hab eine Datenbank worüber ich die Anweisung gebe
Delphi-Quellcode:
habe ich da jetzt noch was Vergessen?
TForm1.Button1Click(Sender: TObject);
var LSql : String; begin LSql := 'SELECT id, Beschreibung FROM technik WHERE beschreibung LIKE'; LSql := LSql + #39 +'%' + Edit1.Text + '%' + #39; ibdTechnik.SelectSQL.Text := LSql; ibdTechnik.Open; ich habe das DBGrid mit dem DataSource verknüpft und den DataSource mit dem DataSet so wie DataBase und Transaction. ich Hatte es auch mit dem...
Delphi-Quellcode:
...versucht.
ibdTechnik.Filtered := true;
ibdTechnik.Active := true; ibdTechnik.Locate('Beschreibung','test',[loPartialKey,loCaseInsensitive]); ibdTechnik.Filtered := true; aber da schleuderte der Compiler mir Error meldungen um die Ohren, das bei leere Datenmenge nicht abgefragt werden kann. Ich hoffe ich hab nicht umsonst ein neuen Thread geöffnet. schon mal Danke für eure Hilfe. |
AW: DataSet Filtern
Wieso Filtered auf true und dann auf true?
|
AW: DataSet Filtern
jaaaaaa, hab ich wohl über sehen, eigendtlich soll da false hin.
|
AW: DataSet Filtern
kann es sein daß Du #34 statt #39 nehmen mußt?
|
AW: DataSet Filtern
Schau mal ob es bei der Query Komponente einen OnFilter Event gibt
Dort kannst du dann entscheiden, was und wie gefiltert werden soll Wenn die Abfragemenge sehr groß ist, dann kann man es auch so programmieren, dass erst ab 3 Zeichen im Edit die Abfrage ausgeführt wird und danach arbeitet man mit dem Filter weiter. Dadurch reduziert sich die übertragene Datenmenge und auch die Anzahl der Abfragen |
AW: DataSet Filtern
Und verwende SQL-Parameter, dann muss man sich auch um den Zeichencode (#34, #39 oder wie?) keine Gedanken mehr machen.
|
AW: DataSet Filtern
Code:
Select id, bezeichnung from MeineTab where Bezeichnung like :BezLike
Delphi-Quellcode:
Für das OnFilter Event brauchst du noch eine Like Funktion
Qry.ParamByName[ 'BezLike' ] := '%' + Edit1.Text + '%';
![]() Ersetze in der Funktion * mit % und ? mit _ dann wird es SQL Like |
AW: DataSet Filtern
Außerdem fehlt in deinem InitalSQL glaube ich ein Leerzeichen hinter dem "LIKE"!
|
AW: DataSet Filtern
Vielen vielen dank für die schnellen Antworten.
gibt es da noch andere Möglichkeiten, bin in sql und db noch nicht so bewandert. Ich dachte wenn schon der sql code in IbExpert geht dann wird er ja in Delphi auch gehen. denn dort spuckt er mir ja haarklein in halbtextsuche alles aus. |
AW: DataSet Filtern
Was hast du denn bis jetzt probiert?
|
AW: DataSet Filtern
Zitat:
Wenn du nur den kleinsten Fehler machst (siehe Beitrag #8), dann kann das nicht klappen. |
AW: DataSet Filtern
ich hab als erstes den DBGrid inhalt gelöscht.
dann habe ich wie du meintest, das hinter like noch ein Leerzeichen gesetzt. Hat aber auch nichts geholfen. Hab ein dataset genommen, ist das nicht genau das gleiche wie eine Querry? Da in vielen beiträgen Querrys genommen werden. Kann ich auch befehle an die Db schicken ohne einen String aus SQL anweisungen? muss hinter...
Delphi-Quellcode:
...noch was erfolgen?
....;
....; dataSet1.SelectSQL.Text := LSql; dataSet1.Open; Habe auch das...
Delphi-Quellcode:
... gesetzt.
DataSet1.FilterOption := foCaseInsensitive,foNoPartialCompare];
mit der function OnfilterEvent komm ich net klar. Im Dataset gibt es nur onFilterRecord, hat das die gleiche Funktion? |
AW: DataSet Filtern
Um was für ein DataSet handelt es sich?
|
AW: DataSet Filtern
Ich habe irgendwie das Gefühl, das du ganz doll doppelt filterst... es existieren zwei Möglichkeiten der Filterung für dein Problem.
a) Über die DB -> SQLText verändern -> DataSet neu anfordern -> es werden gefilterte Daten übertragen b) Über das Dataset -> DS öffnen -> es werden alle Daten übertragen -> du setzt lokal einen Filter und nicht passende Entries werden nur ausgeblendet Imho verwendest du momentan eine Mischung aus beiden. Persönlich denke ich übrigens, ist bis auf Ausnahmen, grundsätzlich Variante a zu bevorzugen! |
AW: DataSet Filtern
Es ist ein TIBDataSet
|
AW: DataSet Filtern
Es ist das OnFilterRecord was ich meinte
Die Kombination macht Sinn wenn in einer sehr großen Datenmenge gefiltert werden soll Aber immer Step by Step Erst mal die Abfrage richtig zum Laufen bringen und erst dann mit dem Filter des DataSet weiterarbeiten |
AW: DataSet Filtern
ich hab jetzt nur mal zum Test mir alles datensätze ausgeben Lassen die in ID und Beschreibung vorhanden sind.
Das macht er aber auch net, ich da liegt irgendwo andwers das Problem.
Delphi-Quellcode:
LSql := 'SELECT id, beschreibung FROM technik';
ibdTechnik.SelectSQL.Text := LSql; ibdTechnik.Open; |
AW: DataSet Filtern
Zeigt er was Falsches oder Garnichts an?
|
AW: DataSet Filtern
er zeigt gar nichts an, Ein feld mit nichts drin.
|
AW: DataSet Filtern
Ist das DataSet richtig verknüpft?
|
AW: DataSet Filtern
ich habs war mal wieder DAU!
Habe vergessen mein datasource mit meinem dataset noch mal zur laufzeit zu verknüpfen
Delphi-Quellcode:
danke für eure Hilfe
LSql := 'SELECT id, beschreibung FROM technik WHERE beschreibung LIKE';
LSql := LSql + #39 +'%' + eSuch.Text + '%' + #39; ibdTechnik.SelectSQL.Text := LSql; ibdTechnik.Open; dsTechnik.DataSet := ibdTechnik; // muss neu hinzugefügt werden |
AW: DataSet Filtern
Trotzdem solltest Du SQL-Parameter verwenden ;)
|
AW: DataSet Filtern
aha. jaaa wäre wohl besser mit dem. werd mich ma umschaun
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz