AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Problem Auslesen von MySQL und Ausgabe in ListViews

Problem Auslesen von MySQL und Ausgabe in ListViews

Ein Thema von Vienesko · begonnen am 25. Aug 2017 · letzter Beitrag vom 28. Aug 2017
Antwort Antwort
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.436 Beiträge
 
Delphi 12 Athens
 
#1

AW: Problem Auslesen von MySQL und Ausgabe in ListViews

  Alt 27. Aug 2017, 06:15
Moin...

@nahpets:
Zitat:
Die Routine würd' ich noch ein bisserl allgemeiner machen
Ich bin kein Freund der absoluten Abstraktion. Ein wenig ist ja gut...

In deinem Beispiel:
Delphi-Quellcode:
procedure DataSetToListView(ds : TDataSet; lv : TListView);
var
  i : Integer;
  iCount : Integer;
  isActive : Boolean;
  Item : TListItem;
begin
  lv.Items.Clear;
  // Ist die Datenmenge offen?
  // Wenn nein, öffnen wir sie,
  // ansonsten gehen wird zum ersten Datensatz.
  isActive := ds.Active;
  if not isActive then ds.Open else ds.First; // Man könnte sich auch noch den aktuellen Satz merken.
  iCount := ds.Fields.Count - 1;
  while not ds.EoF do begin
    Item := lv.Items.Add;
    Item.Caption := ds.Fields[0].AsString;
    for i := 1 to iCount do Item.SubItems.Add(ds.Fields[i].AsString);
    ds.Next;
  end;
  // Haben wir die Datenmenge selbst geöffnet, schließen wir sie auch wieder.
  if not isActive then ds.Close else ds.First; // oder zum ggfls. gemerkten Satz zurückgehen.
end;
...hast du etwas nicht berücksichtigt:
1. Spaltennamen. Da die Klartextnamen der Spalten im DataSet nicht vorhanden sind, mußt du die anders "lagern"
2. Die Reihenfolge der Spalten ist von der Reihenfolge der Spalten in der DB abhängig. Für mich ein NoGo.

Letztendlich kann man diese Probleme auch lösen. Das erzeugt imho mehr Aufwand als der klassische Weg und verstößt damit gegen das KISS Prinzip.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Problem Auslesen von MySQL und Ausgabe in ListViews

  Alt 27. Aug 2017, 09:33
2. Die Reihenfolge der Spalten ist von der Reihenfolge der Spalten in der DB abhängig. Für mich ein NoGo.
Vertan?

Die Reihenfolge wir durch das Select-Statement bestimmt. Und hier kannst Du auch gleich die Feldnamen "sprechender" gestalten. z.b.
"select ID, Firstname as Vorname, Familyname as Familienname ..." Was bei mehrsprachigen Anwendungen allerdings ein NoGo ist.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

AW: Problem Auslesen von MySQL und Ausgabe in ListViews

  Alt 27. Aug 2017, 09:43
@haentschman
Naja, war halt nur ein Beispiel für: Wenn es sehr unabhängig sein soll.

Spaltennamen stehen im DataSet schon drin: DataSet.Fields[FeldNr].FieldName Wenn ich die brauche, komm ich da auch problemlos dran.

Und die Spaltennamen sind nicht von der Reihenfolge in der DB abhängig, sondern von der Reihenfolge im SQL. Hier kann ich sie also durchaus ganz klar, so wie in Deinem Beispiel, bestimmen. Eine "Zufallsreihenfolge" erhalte ich nur bei einem select * from Tabelle .

Für mich ist es ein NoGo, wenn in der Anzeige die Spaltenreihenfolge fest vorgegeben ist. Die soll der Anwender, wenn möglich, selbst bestimmen können. Seine persönliche Konfiguration wird beim Programmende gespeichert und beim Neustart wieder hergestellt.

Zugegeben: Bisher bin ich noch nicht auf die Idee gekommen, Daten aus 'ner Datenbank in 'nem Listview darzustellen, da nehme ich lieber ein Grid, aber das ist sicherlich eine persönliche Ansicht. Je nach Aufgabe mag es sehr unterschiedliche, sinnvolle und praktikable Lösungsmöglichkeiten für die Darstellung der Daten geben.

@p80286
Da bei mir für gewöhnlich SQL-Statements nicht fest verdrahtet in der Anwendung stehen, sondern in 'ner Datenbanktabelle (um darüber auch eine Datenbankunabhängigkeit einfacher realisieren zu können), habe ich mit Deinem Vorschlag sogar die recht einfache Möglichkeit, sprachunabhängig zu sein, indem ich die Spaltennamen eben so, wie Du es vorschlägst, an die Anzeigesprache anzupassen.

Was dann allerdings nicht geht, ist: Im Programm die Spalten über FieldByName anzusprechen, das geht dann gewaltig schief

Aber da Anzeige und sonstige Datenzugriffe getrennt sind, ist das kein unlösbares Problem.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.436 Beiträge
 
Delphi 12 Athens
 
#4

AW: Problem Auslesen von MySQL und Ausgabe in ListViews

  Alt 27. Aug 2017, 10:09
Hallöle...

Zitat:
Die Reihenfolge wir durch das Select-Statement bestimmt.
...aber ja doch. Ein Versprecher muß sein.
Trotzdem muß ich nicht beim "Design" des SQL darübernachdenken in welcher Reihenfolge die Daten angezeigt werden. Das hat das Statement nicht zu interessieren.
Und wie machst du das wenn nicht ALLE Felder angezeigt werden sollen...aber trotzdem mit geladen werden sollen? Hilfsfelder etc.?
Zitat:
Familyname as Familienname
Zitat:
Was bei mehrsprachigen Anwendungen allerdings ein NoGo ist.
Ich stehe nach wie vor dazu, das das SQL nicht die Visualisierung wiederspiegeln soll. Wenn ein Datenbankfuzzi nur die SQL optimiert und von deiner Visualisierung nichts weiß...gute Nacht Marie.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

AW: Problem Auslesen von MySQL und Ausgabe in ListViews

  Alt 27. Aug 2017, 10:39
Für die Anzeige lade ich nur die Daten, die für die Anzeige benötigt werden.

Ich käme nie auf die Idee Daten zu laden und davon dann nur eine Teilmenge anzuzeigen.

Die anzuzeigenden Daten haben bei mir nichts mit den sonstigen Daten, die im Programmablauf benötigt werden, zu tuen.

Ein Select * gibt es für mich bei Anzeigedaten nicht, da ich ja dann immer von der Tabellenstruktur in der Datenbank abhängig bin. Bei 'ner Umstrukturierung kann ich mit 'nem FieldByName und Select * immer scheitern.

Wenn auf der Datenbank was geändert wird, kann ich im SQL immer mit Spaltenname as SoSollErBeiMirHeißen reagieren, mit dem * hab ich diese Möglichkeit nicht.

Gehe mal davon aus, dass wir sehr unterschiedliche Ansatzweisen haben, beide haben ihre Berechtigung, die "ultimativ beste Lösung" gibt es meiner Meinung nach nicht. Sollten wir die hier finden wollen, weichen wir arg vom Thema ab. Daher: Lassen wir es gut sein. Es gibt mehrere Vorschläge, die die Ursprungsfrage beantworten. Welcher davon im konkreten Fall die sinnvollere und / oder bessere ist, möge der Fragesteller für sich entscheiden.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.436 Beiträge
 
Delphi 12 Athens
 
#6

AW: Problem Auslesen von MySQL und Ausgabe in ListViews

  Alt 27. Aug 2017, 10:42
Zitat:
möge der Fragesteller für sich entscheiden.
...so ist es.
  Mit Zitat antworten Zitat
Antwort Antwort

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:48 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