Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Konzeptfrage: Daten "frei" selektierbar gestalten (https://www.delphipraxis.net/156816-konzeptfrage-daten-frei-selektierbar-gestalten.html)

juergen 15. Dez 2010 19:32

Konzeptfrage: Daten "frei" selektierbar gestalten
 
Hallo zusammen,

ich benötige Denkansätze von den Profis, da ich in diesem Bereich noch nichts gemacht habe.

Aufgabenstellung:
Aus einer Datenbank sollen Kundendaten "frei" selektierbar gestaltet werden.
Das Ganze wird über SQL wohl nicht gehen (bzw. wäre für mich wohl zu schwer), daher mein momentaner Plan, die Daten in eine "Haupt-Listview" einzulesen.
Pro Kunde gibt es dann ca. 15 Eigenschaften. Das wären weitere Spalten in der Haupt-Listview (Branche, Kundenzufriedenheit, Mitarbeiterstatus uvm.).
Oberhalb der Listview plane ich pro Spalte eine "kleine" Listview. In dieser Listview kann über Checkboxen eine Mehrfachauswahl vorgenommen werden.
Letztendlich gehe ich dann mit 15 Schleifendurchläufen durch die Hauptview, wobei dann die Datensätze gelöscht werden, welche nicht ausgewählt waren.
Ich hoffe ich konnte es halbwegs verständlich darstellen...:stupid:

Jetzt meine Fragen:
1. Ist dieses Konzept falsch, bzw. was könnt ihr mir alterantiv empfehlen?
2. Welche Komponente(n) könnten mir hier weiter helfen (Tempo, Zeitersparnis)?

Die Datenmenge bewegt sich zw. 3.000 - 15.000 Datensätzen.

Mit diesem Konzept werden sehr viele Stringvergleiche ausgeführt. Ist die Listview hier überhaupt geeignet?
Es kann ja sein, dass in einer von den 15 "Eigenschaftsspalte" 50 Eigenschaften angehakt wurden. Jetzt müssten alle Datensätze in dieser Spalte durchsucht werden ob eine der 50 Eigenschaften vorhanden ist, wenn nein, dann direkt den Datensatz in der Haupt-Listview löschen. Somit wird die Datenmenge immer kleiner. Trotzdem ist der Aufwand der Stringvergleiche enorm.

Da ich im Moment das Gefühl habe mich hier etwas verrannt zu haben, wäre ich für Ratschläge sehr dankbar!

Bummi 15. Dez 2010 20:52

AW: Konzeptfrage: Daten "frei" selektierbar gestalten
 
klingt eindeutig nach einer Anforderung für SQL

hans ditter 15. Dez 2010 20:57

AW: Konzeptfrage: Daten "frei" selektierbar gestalten
 
da kann ich Bummi nur zustimmen. Also so, wie du das beschreibst, für 3.000-15.000 Datensätze einen Vergleich von bis zu 50 (?) Eigenschaften abzufragen... das halte ich für eine schlechte Anwendung.

Im Prinzip ist das mit SQL gar nicht so schwierig (gibt meine ich auch einige gute Tuts):

(UNGETESTET!!)

Deine Eigenschaften, gibts du bei der SQL-Abfrage einfach unter dem WHERE Teil mit ein:
Code:
... WHERE Eigenschaft1 AND Eigenschaft2 AND Eigenschaft3 AND . . . AND EigenschaftN
lg, hans ditter

generic 15. Dez 2010 21:26

AW: Konzeptfrage: Daten "frei" selektierbar gestalten
 
Man sollte über die Anforderung nachdenken. Werden die Daten weiterverarbeitet bzw. exportiert?
Wenn nicht: ein Mensch schaut sich nicht wirklich 3000 Datensätze an.

juergen 16. Dez 2010 05:57

AW: Konzeptfrage: Daten "frei" selektierbar gestalten
 
Guten Morgen!

@generic,
ja es findet nach der Selektion ein Export statt (Serien-E-mails). Möchtest du mich in Richtung VT "stupsen"? Bis jetzt hatte ichn damit noch nicht gearbeitet.

@by Bummi & hans ditter,
ich schätze mal, dass in der Where-Bedingung für die 15 Spalten dann bis zu 90 Or-Abfragen erscheinen könnten. Nur eine bestimmte Spalte kann bis zu den erwähnten 50 Eigenschaften haben. Die restlichen 14 Spalten haben nicht soviel Auswahlmöglichkeiten.
Gerade Or-Verknüpfungen: ich kann das nicht abschätzen, wie wäre hierbei das Zeitverhalten?

Danke schon mal und einen schönen Tag!

Bummi 16. Dez 2010 07:13

AW: Konzeptfrage: Daten "frei" selektierbar gestalten
 
Du hättest Sql's die ungefähr so aussehen würden
Code:
Select * from A
where
(
Beruf in (1,5,6,7,8)
)
AND -- oder OR je nachdem was Du brauchst
(
Qualifiketion in (3,6,8,9)
)
AND
(
ORT in ('Augsburg')
)
Der Zusammenbau könnte so aussehen:
PSEUEDOCODE
Delphi-Quellcode:

Prozedure GetIntegerListe(lb:TChecklistBox;Feld:String):String;
var
 i:Integer;
begin
  Result :='';
  If lb.CheckedCount > 0 then//gibst so nicht
  begin
  For i := 0 to lb.Count - 1 do
  begin
   if lb.Checked then Result := Result +IntToStr(Integer(lb.Items.Objects[i])) +',';
  end;
  Result := #13#10'and ' + FELD + ' in (' + Copy(Result,1,length(Result) - 1) +')'
  end;
 
end;

SQL := SQL + GetIntegerListe(BerufeCheckListBox,'Beruf');
SQL := SQL + GetQuali(QualiCheckListBox,'Qualifikation');
Ich wette dass das Zeitverhalten, unabhängig von der Aufwandsminimierung bei geschätztenen 1:100 für den SQL spricht.

p80286 16. Dez 2010 11:11

AW: Konzeptfrage: Daten "frei" selektierbar gestalten
 
Also Du solltest eine "richtige" DB mit SQL nutzen. Soviel ist glaube ich klar.
Und dann solltest Du Dir ein paar Gedanken über Deine Datenstrukturen machen.
Ich habe das Gefühl Du arbeitest mit einem elektronischen Zettelkasten.

Und was die vielen "oder" angeht, da gibt Dir SQL z.B. die Möglichkeit des UNION um mehrere Abfragen miteinander zu verbinden.

Gruß
K-H

stahli 16. Dez 2010 11:52

AW: Konzeptfrage: Daten "frei" selektierbar gestalten
 
Gib mal noch ein paar Infos, wie die Daten aussehen, wo sie herkommen (Format), wie lange sie aufbewahrt werden sollen und was Du wie oft daraus ermitteln willst...

juergen 19. Dez 2010 17:22

AW: Konzeptfrage: Daten "frei" selektierbar gestalten
 
Hallo,
ich komme leider erst heute zum Antworten.
Danke an Alle für die Unterstützung!

@Bummi,
wenn du schreibst, dass das Zeitverhalten (und Aufwandsminimierung) für SQL spricht, dann ist es die Antwort die ich gesucht habe!
Ich habe eben keine Erfahrung in diesem Bereich.
Deinen Ansatz (Pseudo-Code) habe ich verstanden und habe mich damit schon angefreundet. Vielen Dank dafür! :thumb:

Die Daten sind in einer SQL-DB gespeichert, Einfluss auf die Tabellenstruktur habe ich allerdings nicht.
Ich werde mich etwas mit SQL beschäftigen müssen.

Noch einen schönen 4.Advent!


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 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