AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Filterproblem mit TTable
Thema durchsuchen
Ansicht
Themen-Optionen

Filterproblem mit TTable

Ein Thema von Grolle · begonnen am 7. Dez 2006 · letzter Beitrag vom 22. Aug 2007
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#1

Filterproblem mit TTable

  Alt 7. Dez 2006, 12:29
Datenbank: Ads local Server • Version: 7.1 • Zugriff über: TDataSet
Hallo,
ich möchte eine Filterung der Datenbank nach Jahreszahlen und zwar:
Sortierkriterien: 3;4;5; oder 2-5
In dem Datenbankfeld werden die Daten durch Semikolon getrennt gespeichert (3;5;6....)
Meine bisherige Lösung ist die Datenbankfelder pro Datensatz zu durchlaufen und bei
einem Treffer eine 1 bzw. eine 0 in ein Extra-DBFeld zu schreiben und darauf dann den Filter
zu verwenden. Weiß jemand da eine performantere Lösung (womöglich ohne zusätzliches DBFeld)?
Viele Grüße...

  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#2

Re: Filterproblem mit TTable

  Alt 7. Dez 2006, 12:50
würde man die frage verstehen könnte man die vielleicht helfen.

vielleicht hilft LIKE oder MATCHES?
  Mit Zitat antworten Zitat
shmia

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

Re: Filterproblem mit TTable

  Alt 7. Dez 2006, 12:51
Zitat von Grolle:
In dem Datenbankfeld werden die Daten durch Simikolon getrennt gespeichert (3;5;6....)
Fehlerhaftes Datenbankdesign.
das verstösst gegen die 1. Normalform
Zitat:
Die erste Normalform (1NF) verlangt, dass die Information in jedem Feld einer Datenbank atomar ist, das heißt eine nicht weiter zerlegbare Einzelinformation. Eine Spalte wie PLZ_ORT oder STRASSE_HAUSNR würde beispielsweise dagegen verstoßen.
Lies mal: http://support.microsoft.com/kb/209534/de
Andreas
  Mit Zitat antworten Zitat
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Filterproblem mit TTable

  Alt 7. Dez 2006, 13:00
Zitat von shmia:
Fehlerhaftes Datenbankdesign. das verstösst gegen die 1. Normalform
Ich weiss. Es ist ein Kundenwunsch!

Zitat von bttb930:
würde man die frage verstehen könnte man die vielleicht helfen.
vielleicht hilft LIKE oder MATCHES?
Was genau versteht du nicht?

//Edit: Ich habe Mist erzählt. In der Datenbank werden die Daten nicht durch
einen Semikolon getrennt gespeichert, sondern so: 012345 ...

Viele Grüße...

  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Filterproblem mit TTable

  Alt 7. Dez 2006, 22:49
Zitat:
Was genau versteht du nicht?
Nach was du filtern willst.
Markus Kinzler
  Mit Zitat antworten Zitat
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Filterproblem mit TTable

  Alt 7. Dez 2006, 22:58
Hi,
nach Jahreszahlen. Diese stehen in einem DB-Feld in dieser Form: 345 (für 2003,2004,2005)
Als Filter soll folgende Eingabe möglich sein: 245 oder 2-5
Viele Grüße....

  Mit Zitat antworten Zitat
marabu

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

Re: Filterproblem mit TTable

  Alt 8. Dez 2006, 09:08
Hallo Stefan,

wenn das Datenbankfeld immer einen Wert enthält, der durch das Weglassen beliebiger Ziffern aus der Zeichenfolge 0123456789 gebildet werden kann, dann würde ich einen pattern match mit dem Operator LIKE vorbereiten:

Delphi-Quellcode:
function MatchStr(const sFilter: String; cWild: Char = '%'): String;
var
  i: Integer;
begin
  Result := StringOfChar(cWild, 10);
  for i := 1 to Length(sFilter) do
    Result[Succ(Ord(sFilter[i]) - Ord('0'))] := sFilter[i];
  Result := CompactStr(Result, cWild);
end;
Die Funktion MatchStr('245') liefert dir dann das Pattern '%2%45%' welches du dann für deinen pattern match verwenden kannst. Der Ansatz lässt sich für Bereichsangaben ausbauen.

Grüße vom marabu
  Mit Zitat antworten Zitat
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Filterproblem mit TTable

  Alt 8. Dez 2006, 11:41
Hi Marabu,
danke für deinen Vorschlag. Mit meinem bisherigen Ansatz habe ich auch noch einige Probleme:
Delphi-Quellcode:
var
sf : TIniFile;
i : integer;
s : string;
begin
  readstring;
  Form1.AdsTable1.First;
  sf := TIniFile.create(ExtractFilePath(ParamStr(0))+'daten\checkbox.ini');
  While not Form1.AdsTable1.eof do
    begin
      s := Form1.AdsTable1.FieldByName('def3').AsString;
      for i := 0 to 9 do
        if (sf.ReadBool('Jahre',IntToStr(i),true)) and
          (Form1.AdsTable1.FieldByName('bool').AsString = '0')
          and (pos(IntToStr(i),s)>0) then
          begin
            Form1.AdsTable1.Edit;
            Form1.AdsTable1.FieldByName('bool').AsString := '1';
            Form1.AdsTable1.Post;
          end
        else
          begin
            Form1.AdsTable1.Edit;
            Form1.AdsTable1.FieldByName('bool').AsString := '0';
            Form1.AdsTable1.Post;
          end;
      Form1.AdsTable1.Next;
    end;
  Form1.AdsTable1.Filter := 'bool="1"';
  Form1.AdsTable1.Filtered := true;
  sf.Free;
end;
Die Daten kommen aus ner Ini-Datei. Aber in der for-Schleife ist irgendwo ein Fehler?!?
Wie dem auch sei, ich werde mir deine Version mal versuchen auszubauen, da sie wohl etwas
performanter ist
// Edit: Was ist denn CompactStr in deinem Code?
Viele Grüße....

  Mit Zitat antworten Zitat
marabu

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

Re: Filterproblem mit TTable

  Alt 8. Dez 2006, 12:56
Sorry, hier ein Nachschlag:

Delphi-Quellcode:
function CompactStr(const s: String; c: Char = ' '): String;
var
  i, iDel: Integer;
begin
  Result := s;
  iDel := 0;
  for i := 1 to Length(s) do
    if (i > 1) and (s[i] = c) and (s[Pred(i)] = c)
      then Inc(iDel)
      else Result[i - iDel] := s[i];
  SetLength(Result, Length(s) - iDel);
end;
Grüße
  Mit Zitat antworten Zitat
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Filterproblem mit TTable

  Alt 8. Dez 2006, 14:39
Hi Marabu,
danke, das klappt ganz gut. Leider habe ich jetzt gesehen, dass Ads kein LIKE
im Filter unterstützt

  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 21:14 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