Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Ausgabe bei doppelten daten (https://www.delphipraxis.net/27449-ausgabe-bei-doppelten-daten.html)

Kruemel2oo2 10. Aug 2004 14:11


Ausgabe bei doppelten daten
 
Hio

ich bins mal wieder :)

Ich habe in einer Datenbank mehrere gelogte Daten wo in meinen Fall die namen mehrfach auftreten.

naja diese lass ich mir in einer stringgrid ausgeben. mit den Befehl fieldbyname('name'). Naja ich sehe da halt alle namen mehrfach wie kann ich das machen das ich nur einmal diesen namen sehe. Müsste ja anfürsich mit einer if Anweisung gehn weiß aber nicht wie die aussehen könnte.

kann mir mal bitte einer helfen?

Kruemel

Gollum 10. Aug 2004 14:27

Re: Ausgabe bei doppelten daten
 
Hallo,

Du kannst mit IndexOf feststellen, ob ein Eintrag schon in der Stringlist vorhanden ist:
Delphi-Quellcode:
  ...
  if (MyStringList.IndexOf('Irgendwas')<>-1) then MyStringList.Add('Irgendwas');
  ...
Die bessere und sinnvollere Vorgehensweise wäre, mit einer Query die Daten aus der DB auszulesen:
Delphi-Quellcode:
  with Query1 do
  begin
    Close;
    // mit DISTINCT wird die Query veranlasst, keine doppelten Inhalte anzuzeigen
    SQL.Text:='SELECT DISTINCT MeinFeld FROM MeinerTabelle';
    Open;
    while not Eof do
    begin
      MyStringList.Add(FieldByName('MeinFeld').AsString);
      Next;
    end; // while
  end; // with

Kruemel2oo2 10. Aug 2004 14:33

Re: Ausgabe bei doppelten daten
 
naja mein befehl sieht so ähnlich ja schon aus aber was heißt das DISTINCT ? daskenn ich nicht.

also meiner sieht so aus.

Delphi-Quellcode:
   with Query3 do
   begin
     i := 0;
     SQL.Clear();
     SQL.Add('Select b.Personal_id, p.ID, p.Name from kbook b, Personal p, Ist i where b.Personal_id = p.ID');
     open;
      while not Eof do
      begin

         ListePersonal.RowCount := ListePersonal.RowCount + 1;
         ListePersonal.Cells[0,i] := fieldbyname('Name').AsString;

         i := i+1;
         Next;
       end;
   end;
aber so wird halt bei mir die doppelten daten angezeigt. Und das will ich ja nicht. Ich möchte wenn der datensatz schon gibt also der name schon einmal in der stringgrid drin ist er nicht nochmal reingeschrieben wird.

Gollum 10. Aug 2004 14:42

Re: Ausgabe bei doppelten daten
 
Hallo,

Zitat:

Zitat von Access-Hilfe
DISTINCT

Verwenden Sie DISTINCT, wenn Datensätze, die in den ausgewählten Feldern mehrfach vorkommende Daten enthalten, ausgelassen werden sollen. Die Werte für alle in der Anweisung SELECT aufgeführten Felder müssen eindeutig sein, damit sie in das Ergebnis der Abfrage aufgenommen werden. Mehrere in der Tabelle "Personal" aufgeführte Angestellte können z.B. denselben Nachnamen haben. Wenn zwei Datensätze den Wert "Schmidt" im Feld "Nachname" enthalten, gibt die folgende SQL-Anweisung nur einen der Datensätze zurück:

SELECT DISTINCT Nachname FROM Personal

Wenn Sie DISTINCT nicht angeben, gibt diese Abfrage beide Datensätze mit "Schmidt" zurück.

Wenn die SELECT-Klausel mehrere Felder enthält, muß die Kombination von Werten aus allen Feldern eindeutig sein, damit ein bestimmter Datensatz in das Ergebnis aufgenommen wird.

Das Ergebnis einer Abfrage, die DISTINCT anwendet, ist nicht aktualisierbar, und von anderen Benutzern nachträglich vorgenommene Änderungen werden nicht berücksichtigt.

Die Verwendung von DISTINCT ist äquivalent zur Einstellung der Eigenschaft "KeineDuplikate" (UniqueValues) auf "Ja" im Eigenschaftenfenster der Abfrage in der Entwurfsansicht einer
Abfrage.


DISTINCTROW

Verwenden Sie DISTINCTROW, wenn Daten aus mehrfach auftretenden Datensätzen (und nicht nur aus mehrfach auftretenden Feldern) nur einmal in das Ergebnis der Abfrage
aufgenommen werden sollen. Sie können z.B. eine Abfrage erstellen, in der die Tabellen "Kunden" und "Bestellungen" über das Feld "Kunden-Nr" verknüpft werden. Die Tabelle "Kunden" enthält keine mehrfachen Einträge für das Feld "Kunden-Nr", im Gegensatz zur Tabelle "Bestellungen", in der für einige Kunden mehrere Bestellungen eingetragen sind.
Die folgende SQL-Anweisung zeigt, wie Sie mit DISTINCTROW eine Liste der Firmen erstellen können, die mindestens eine Bestellung erteilt haben, ohne Details zu den Bestellungen in die Liste aufzunehmen:

SELECT DISTINCTROW Firma
FROM Kunden INNER JOIN Bestellungen ON Kunden.[Kunden-Nr] = Bestellungen.[Kunden-Nr]
ORDER BY Firma;

Wenn Sie DISTINCTROW nicht angeben, erstellt diese Abfrage mehrere Zeilen für alle Firmen mit mehreren Bestellungen.

DISTINCTROW ist nur dann wirksam, wenn Sie Felder nicht aus allen, sondern nur aus einigen der in der Abfrage verwendeten Tabellen auswählen. DISTINCTROW wird ignoriert, wenn die Abfrage nur eine Tabelle umfaßt.

Die Verwendung von DISTINCTROW ist äquivalent zur Einstellung der Eigenschaft "EindeutigeDatensätze" (UniqueRecords) auf "Ja" (dem Standardwert) im Eigenschaftenfenster in der Entwurfsansicht einer Abfrage.


Kruemel2oo2 10. Aug 2004 14:51

Re: Ausgabe bei doppelten daten
 
hmm aha aber wenn ich nur denn Namen nicht doppelt haben möchte und dafür andere felder schon aber zum Beispiel ein Datum würde es mit distince ja nicht gehn oder sehe ich das falsch?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 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 by Thomas Breitkreuz