AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wie filtern in TClientDataSet ?

Ein Thema von madina · begonnen am 17. Jun 2008 · letzter Beitrag vom 19. Jun 2008
Antwort Antwort
madina

Registriert seit: 1. Nov 2005
153 Beiträge
 
#1

Wie filtern in TClientDataSet ?

  Alt 17. Jun 2008, 08:00
Hallo,

ich habe ein TCDS mit 2 String Felder sStadt und sLand.
ich will wie folgt filtern und es klappt nicht an der else zweig ???????????


Delphi-Quellcode:
var s : string;
    cds: TClientDataSet;

cds.Filter:= 'sLand=Deutschland';
cds.Filtered:= true;
s:= 'Berlin';

while cds.eof=false do
  begin
    if cds.locate(sStadt, 'Berlin', ...) then
      begin
        if (MessageBox('wollen Sie ändern' ..., Yes)) then
          begin
            cds.edit;
              cds['sStadt']:= 'Hamburg'
            cds.post;
          end
        else begin // neu Filter setzen ohne die städte im MessageBox Zweig-Nein ??????????????????
               s:= s+cds['sStadt'];
               cds.Filter := 'sLand=Deutschland and sStadt <> s'; //'sLand=Deutschland and sStadt <> (Berlin, München, ..)
               s:= s+',';
               cds.Filtered:= true;
             end;
      end
  end;
mfg
  Mit Zitat antworten Zitat
raiguen
(Gast)

n/a Beiträge
 
#2

Re: Wie filtern in TClientDataSet ?

  Alt 17. Jun 2008, 09:25
Moin
Mich wundert, dass das cds sich nicht über den Filter(string) beschwert, weil so wie der da steht, werden Deutschland und Berlin als Felder interpretiert und nicht als Stringwerte...
Wenn ich mich irre, dann müsste der FilterString so aufgebaut sein:
cds.Filter:= '(sLand=''Deutschland'') and (sStadt=''Berlin'')'; ACHTUNG!: '' entspricht 2mal Shift-# und NICHT Shift-2 !! Vereinfacht kann man den Filterstring auch mithilfe der Format()-Funktion gestalten, da spart man sich die Hochkomma-Orgie:
cds.Filter:= Format('(sLand=%s) and (sStadt=%s)', ['Deutschland', 'Berlin']); Entsprechend dem oben gesagten kann das hier
Zitat:
cds.Filter := 'sLand=Deutschland and sStadt <> s';
so auch nicht funktionieren... aber so:cds.Filter := Format('(sLand=%s) and (sStadt <> %s)', ['Deutschland', s]); getippt und nicht getestet
  Mit Zitat antworten Zitat
madina

Registriert seit: 1. Nov 2005
153 Beiträge
 
#3

Re: Wie filtern in TClientDataSet ?

  Alt 18. Jun 2008, 07:34
Hallo,

1. leider klappt diese Zeile nicht:
cds.Filter:= Format('(sLand=%s) and (sStadt <> %s)', ['Deutschland', s]); 2. machen wir es einfach, wie kann ich Filtern:
ist OK:
cds.Filter:= 'sStadt<>'+Quotedstr('Berlin')+' or stadt<>'+Quotedstr('Hamburg'); soll NOK:
cds.Filter:= 'sStadt<>'+Quotedstr('Berlin, 'Hamburg', ...);
  Mit Zitat antworten Zitat
raiguen
(Gast)

n/a Beiträge
 
#4

Re: Wie filtern in TClientDataSet ?

  Alt 18. Jun 2008, 08:48
arrghh... sorry, ich dussel hab bei der ersten Variante mit der Format()-Funktion nicht richtig nachgedacht...da fehlen ja trotzdem die Quotes für den Filterwert...

Wenn du auf Datensätze filtern möchtest, in denen die Städte Berlin und Hamburg NICHT enthalten sind, musst du die Filterbedingung mit AND verknüpfen:cds.Filter:= 'sStadt<>'+Quotedstr('Berlin')+' AND sStadt<>'+Quotedstr('Hamburg');
  Mit Zitat antworten Zitat
madina

Registriert seit: 1. Nov 2005
153 Beiträge
 
#5

Re: Wie filtern in TClientDataSet ?

  Alt 18. Jun 2008, 08:57
Hallo,

so lautet meine Frage:

wie kann ich diese Filterung ohne OR oder AND formulieren d.h nicht so

cds.Filter:= 'sStadt<>'+Quotedstr('Berlin')+' or stadt<>'+Quotedstr('Hamburg'); sondern etwa so:

Delphi-Quellcode:
s: string;

s:= 'Berlin, Hamburg, ...';
cds.Filter:= 'sStadt<>'+Quotedstr(s);
schreiben variable.

mfg
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Wie filtern in TClientDataSet ?

  Alt 18. Jun 2008, 09:08
Willst Du mehrere Städte ausschließen? Das wird so nicht so einfach gehen, ich würde den Umweg über eine Stringliste nehmen.
Delphi-Quellcode:
sl := TStringList.Create;
s := '';
try
  sl.Add('Berlin');
  sl.Add('Hamburg');
  sl.Add('München');
  ...
  for i := 0 to Pred(sl.Count) do
    s := s + QuotedStr(sl[i]) + ',';
  Delete(s,Length(s),1);
  cds.Filter:= 'sStadt NOT IN('+s+')';
finally
  sl.Free;
end;
So in der Art (ungetestet).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
madina

Registriert seit: 1. Nov 2005
153 Beiträge
 
#7

Re: Wie filtern in TClientDataSet ?

  Alt 19. Jun 2008, 09:11
Hallo,

vielen Dank es funktioniert.

Ich hätte gerne gewußt wie ich folgende Source mit dem FORMAT() schreiben kann:

Delphi-Quellcode:
sl := TStringList.Create;
s := '';
try
  sl.Add('Berlin');
  sl.Add('Hamburg');
  sl.Add('München');
  ...
  for i := 0 to Pred(sl.Count) do
    s := s + QuotedStr(sl[i]) + ',';
  Delete(s,Length(s),1);
  cds.Filter:= 'sStadt NOT IN('+s+')';
finally
  sl.Free;
end;
.

mfg
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Wie filtern in TClientDataSet ?

  Alt 19. Jun 2008, 09:23
cds.Filter:= Format('sStadt NOT IN(%s)',[s]); Wobei der Format-Befehl hier keine wesentliche Erleichterung bringt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  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 05:31 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