Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   ClientDataSet durchsuchen (https://www.delphipraxis.net/193565-clientdataset-durchsuchen.html)

zobien123 15. Aug 2017 18:58

ClientDataSet durchsuchen
 
Hallöchen :-D

Und zwar: Aus einer Datenbank lade ich Daten in ein ClientDataSet. Die Daten bestehen aus einem Fehler Code und danach ein bisschen Text. Z.B.: "01 Das Problem saß vor dem Bildschirm". Es gibt mehrere Codes 01, 02, 03,.... Nun möchte ich diese Kommentare anhand der Codes aussortierten und diese so später auf ein eigenes Sheet in Excel exportieren/packen. D.h. auf dem Sheet "Fehlercode 01" sind alle Fehlerkommentare/meldungen wo am Anfang der Code 01 steht, auf 02 wo am Anfang der Code 02 steht, etc...

Nun meine Frage: Wie kann ich das ClientDataSet durchsuchen und so alle mit 01 am Anfang rausfiltern? Oder gibt es eine ähnliche möglichkeit?


Hoffe ich konnte mein Problem gut genug erläutern :pale:

mkinzler 15. Aug 2017 19:08

AW: ClientDataSet durchsuchen
 
Z.B. durch Setzten eines entsprechenden Filters.

himitsu 15. Aug 2017 19:21

AW: ClientDataSet durchsuchen
 
Zitat:

Zitat von mkinzler (Beitrag 1378813)
Z.B. durch Setzten eines entsprechenden Filters.

Zitat:

Aus einer Datenbank lade ich Daten in ein ClientDataSet
Oder ein passendes WHERE bei der Abfrage verwenden. :angle:

zobien123 16. Aug 2017 08:36

AW: ClientDataSet durchsuchen
 
Guten Morgen :)

ich habe es jetzt so gemacht, dass ich das ClientDataSet mit einer Schleife durchlaufe und alle Einträge rausschmeiße, wo die ersten 2 Zeichen kein Integer Wert ist welcher größer als 0 ist.

Aber wie sortiere ich jetzt die einzelnen Codes aus? Nochmal das gleiche zu machen, wie oben erklärt, nur mit den Codes ist ja auch nicht so das gelbe vom Ei. :oops:

mikhal 16. Aug 2017 09:03

AW: ClientDataSet durchsuchen
 
Wie oben bereits geschrieben wurde: über einen Filter!

Schema:
Delphi-Quellcode:
  DataSet.Filtered := False;
  DataSet.Filter := 'Fehlercode = ' + QuotedStr('01');
  DataSet.Filtered := True;
Grüße
Mikhal

Sherlock 16. Aug 2017 09:09

AW: ClientDataSet durchsuchen
 
Die Tabelle ist nicht normalisiert. Der Filter geht ins Leere. Offenkundig sind die Meldungen samt Fehlernummer in einem Feld zu finden.

Sherlock

TigerLilly 16. Aug 2017 09:11

AW: ClientDataSet durchsuchen
 
Wie so oft gibt es mehrere Wege, die zum Ziel führen.

Variante a)
Du könntest ein berechnetes Feld anlegen + dir in diesem deinen Code so zurechtschnitzen, wie du es brauchst. Dann kannst du in der Folge gut darauf zugreifen.
Geh dann dein Clientdataset nochmal durch + zieh dir die Kombination FehlerCode=Kommentar in ein TStringList, das du am Ende sortierst. Wenn dein Kommentar CRLF enthält, ersetze die für die Verarbeitung durch \n oder sowas.

Variante b)
Mach ein neues Feld im CDS (kein berechnetes Feld!) + kopiere den Inhalt des Codefeldes dorthin. Bereinige den Code, wie du es brauchst. Dann setze einen Index auf dein neues Feld. Dann kannst du in deiner gewünschten Reihenfolge darauf zugreifen.

Variante c)
Geh das CDS durch. Hol dir aus dem Feld Code was du brauchst + zieh dir die Kombination FehlerCode=Kommentar in ein TStringList, das du am Ende sortierst.


Anstelle der StringList kannst du natürlich auch was anderes nehmen.

zobien123 16. Aug 2017 09:18

AW: ClientDataSet durchsuchen
 
Zitat:

. Der Filter geht ins Leere.
Ja mit dem Filter findet er nichts.

@TigerLilly

Vielen Dank für verschiedenen Lösungsansätzen! Werde sie mir anschauen, aus Termingründen komm ich wahrscheinlich erst heute Abend spätestens Morgen dazu :)

sko1 16. Aug 2017 11:54

AW: ClientDataSet durchsuchen
 
Sinngemäß

Select * from Tabelle where Feld like "01 $"

sollte alles finden wo der Feldinhalt mit "01 " beginnt, also alle Einträge die mit Fehlercode 01 beginnen

Ciao
Stefan

himitsu 16. Aug 2017 12:15

AW: ClientDataSet durchsuchen
 
Am Besten/Einfachsten ist es ja wohl im SQL (serverseitig mit WHERE) oder nachträglich (clientseitig mit .Filter) das zu filtern,
aber es gibt nicht nur Delphi-Referenz durchsuchenTDataSet.Filter, sondern auch Delphi-Referenz durchsuchenTDataSet.OnFilterRecord.
Bei Ersterem wird mir einen simples SQL-Statement gefiltert und bei Letzrerem per Delphi-Code. Beides zusammen ginge auch und zusätzlich noch ein WHERE :stupid:

Zitat:

Wie oben bereits geschrieben wurde: über einen Filter!
Zitat:

Ja mit dem Filter findet er nichts.
Gut, abgesehn davon, dass man für QuotedStr ausgepeitscht werden sollte, ist eine andere Sache,
aber genauso, wie beim WHERE, kann man hier auch LIKE verwenden. :roll:
http://docwiki.embarcadero.com/Libra...DataSet.Filter


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:21 Uhr.
Seite 1 von 2  1 2   

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