AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Integer Filtern in einem DBgrid
Thema durchsuchen
Ansicht
Themen-Optionen

Integer Filtern in einem DBgrid

Ein Thema von simon790 · begonnen am 2. Apr 2008 · letzter Beitrag vom 3. Apr 2008
Antwort Antwort
simon790

Registriert seit: 6. Mär 2008
43 Beiträge
 
Delphi 7 Professional
 
#1

Integer Filtern in einem DBgrid

  Alt 2. Apr 2008, 15:24
Datenbank: Excel • Zugriff über: ADO
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:
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
Funkioniert soweit ganz gut solange ein Feld ausgewählt wird welches String Einträge enthält.
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
Es gibt 10 Arten von Menschen.
Diejenigen, die das binäre System verstehen, und die, die es nicht verstehen.
Aber ich frag mich was ist mit den anderen 8?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Integer Filtern in einem DBgrid

  Alt 2. Apr 2008, 15:49
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
  Mit Zitat antworten Zitat
simon790

Registriert seit: 6. Mär 2008
43 Beiträge
 
Delphi 7 Professional
 
#3

Re: Integer Filtern in einem DBgrid

  Alt 2. Apr 2008, 16:03
Zitat von marabu:
Allerdings musst du dann den LIKE Operator fallen lassen.
Heist das ich kann in einer IF-Verzweigunf entweder mit Like oder = suchen. Habe ich so probiert, bekomme aber eine Fehlermeldung "Typkonflikt"


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..."?
Es gibt 10 Arten von Menschen.
Diejenigen, die das binäre System verstehen, und die, die es nicht verstehen.
Aber ich frag mich was ist mit den anderen 8?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Integer Filtern in einem DBgrid

  Alt 2. Apr 2008, 16:50
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 ?
SELECT * FROM Tabelle WHERE Intfeld LIKE 42 Das kann man eigentlich nur so umschreiben:
SELECT * FROM Tabelle WHERE Intfeld = 42 Noch besser wäre natürlich ein Bereichsfilter bei numerischen Feldern:
SELECT * FROM Tabelle WHERE Intfeld >= 120 AND Intfeld <= 150
Andreas
  Mit Zitat antworten Zitat
simon790

Registriert seit: 6. Mär 2008
43 Beiträge
 
Delphi 7 Professional
 
#5

Re: Integer Filtern in einem DBgrid

  Alt 3. Apr 2008, 06:51
Zitat von shmia:
Frage doch ab, ob es sich um ein String- oder Integer-Feld handelt.
Ich weiss ja welches Feld ein Integer Feld ist und kann der Filter demenstprechend zusammenstellen:

Delphi-Quellcode:
procedure TMainForm.FilterEditChange(Sender: TObject);
begin
  with DBGrid do
  begin
    DataSource.DataSet.Filtered := Trim(FilterEdit.Text) <> '';
    if DataSource.DataSet.Filtered then
      if SelectedField.FieldName ='TELEFONthen //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;
aber mit dem Gleichheitszeichen statt dem Like Operator tuts auch nicht!
Es gibt 10 Arten von Menschen.
Diejenigen, die das binäre System verstehen, und die, die es nicht verstehen.
Aber ich frag mich was ist mit den anderen 8?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Integer Filtern in einem DBgrid

  Alt 3. Apr 2008, 06:54
-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.
Markus Kinzler
  Mit Zitat antworten Zitat
simon790

Registriert seit: 6. Mär 2008
43 Beiträge
 
Delphi 7 Professional
 
#7

Re: Integer Filtern in einem DBgrid

  Alt 3. Apr 2008, 07:28
OK, es geht jetzt wenn der komplette Ausdruck übereinstimmt zudem habe ich gerade gemerkt da es der Feldtyp Float ist und nicht integer.
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
Es gibt 10 Arten von Menschen.
Diejenigen, die das binäre System verstehen, und die, die es nicht verstehen.
Aber ich frag mich was ist mit den anderen 8?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Integer Filtern in einem DBgrid

  Alt 3. Apr 2008, 07:38
Versuch mal in der Abfrage das Feld als string zu behandeln.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz