![]() |
Datenbank: Excel • Zugriff über: ADO
Integer Filtern in einem DBgrid
Hallo
In einem DBGrid zeige ich den Inhalt einer Exceldatei auf die ich per ADO zugreife. Dazu habe ich noch einen Filter der das zwischengeschaltete Dataset filtert.
Delphi-Quellcode:
Funkioniert soweit ganz gut solange ein Feld ausgewählt wird welches String Einträge enthält.
procedure TMainForm.FilterEditChange(Sender: TObject);
begin with DBGrid do begin DataSource.DataSet.Fields.FieldByNumber(2).SetFieldType(String); DataSource.DataSet.Filtered := Trim(FilterEdit.Text) <> ''; if DataSource.DataSet.Filtered then DataSource.DataSet.Filter := SelectedField.FieldName + ' Like ' + QuotedStr('*'+FilterEdit.Text+'*') else DataSource.DataSet.Filter := ''; end; end Sobald ich aber ein Feld öffne welches Integer-Werte (TelNr) Enthält bekomm ich die Meldung "der Filter kann nicht geöffnet werden". Gibt es eine Möglichkeit den Filter auf Integer-Felder anzuwenden? Gruss Simon |
Re: Integer Filtern in einem DBgrid
Hallo Simon,
natürlich kannst du auch nach Integer-Werten filtern. Allerdings musst du dann den LIKE Operator fallen lassen. Falls der LIKE Operator dir wichtig ist, dann musst du den Integer-Wert zuvor per CAST in einen String umwandeln. Da du CAST in einer Filter-Expression wahrscheinlich nicht verwenden darfst, musst du dann aber das Ereignis OnFilterRecord() bedienen. Grüße vom marabu |
Re: Integer Filtern in einem DBgrid
Zitat:
Da ich eigentlich auf eine ADOSQLQuery zugreife, gäbe es auch die Möglichkeit mit einem ensprechenden SQL Befehl das Feld mit den Integer-Werten als Feld mit Strings zu "Selecten"? So auf die Art "Select F2 As TELEFON ToString From..."? |
Re: Integer Filtern in einem DBgrid
Frage doch ab, ob es sich um ein String- oder Integer-Feld handelt.
Wenn es ein Integer-Feld ist, dann macht eine LIKE-Bedingung absolut keinen Sinn!! Was soll denn das Ergebnis folgender Abfrage sein ?
SQL-Code:
Das kann man eigentlich nur so umschreiben:
SELECT * FROM Tabelle WHERE Intfeld LIKE 42
SQL-Code:
Noch besser wäre natürlich ein Bereichsfilter bei numerischen Feldern:
SELECT * FROM Tabelle WHERE Intfeld = 42
SQL-Code:
SELECT * FROM Tabelle WHERE Intfeld >= 120 AND Intfeld <= 150
|
Re: Integer Filtern in einem DBgrid
Zitat:
Delphi-Quellcode:
aber mit dem Gleichheitszeichen statt dem Like Operator tuts auch nicht!
procedure TMainForm.FilterEditChange(Sender: TObject);
begin with DBGrid do begin DataSource.DataSet.Filtered := Trim(FilterEdit.Text) <> ''; if DataSource.DataSet.Filtered then if SelectedField.FieldName ='TELEFON' then //Das ist das IntegerFeld DataSource.DataSet.Filter := SelectedField.FieldName + ' = ' + QuotedStr('*'+FilterEdit.Text+'*') else // all die StringFelder DataSource.DataSet.Filter := SelectedField.FieldName + ' Like ' + QuotedStr('*'+FilterEdit.Text+'*') else DataSource.DataSet.Filter := ''; end; end; |
Re: Integer Filtern in einem DBgrid
-Bei Integern brauchst du nicht zu Quoten.
-Joker-Suche geht bei integern auch nicht. -Du fragst nicht den Feldtyp sondern dessen namen ab, der Typ wäre universeller. |
Re: Integer Filtern in einem DBgrid
OK, es geht jetzt wenn der komplette Ausdruck übereinstimmt zudem habe ich gerade gemerkt da es der Feldtyp Float ist und nicht integer. :roll:
Ja die abfrage nach dem Feldtyp ist besser, da auch noch andere Felder vorkommen können die FloatWerte enthalten.Schade ist, dass keine JokerSuche möglich ist. überlege gerade ob es sinnvol ware am anfang das Dataset durchzurasseln und die entsprechender Feldern in Strings umzuwandeln. Das Problem ist, dass das ganze ja auf ein Excelsheet zugreift und ich nicht weiss ob ich da die Datentypen so ändern kann |
Re: Integer Filtern in einem DBgrid
Versuch mal in der Abfrage das Feld als string zu behandeln.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:09 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-2025 by Thomas Breitkreuz