Autor Beitrag
ibh_compucat
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

Win 2000, Win 8.1
D6, Ent. XE5 Ent.
BeitragVerfasst: Sa 14.08.10 19:05 
Hallo,

ich komm' mit DISTINCT nicht klar, folgendes Problem:
Ich habe eine (SQL) Tabelle mit den Feldern 'AUFTRAG', 'KARTON' und 'TEIL'. Zu einem Auftrag können mehrere Kartons gehören und in jedem Karton können mehrere Teile liegen.
Pro Teil wird ein Datensatz in der Tabelle erzeugt. Klappt alles - wunderbar.
Nun möchte ich abfragen (ADO-Query), welche Kartons zu einem bestimmten Auftrag gehören, also

??? SELECT DISTINCT AUFTRAG, KARTON FROM AUFTRAGSTABELLE ???

und als Ergebnis sehen:

Auftrag Karton
_______________

001 10000
001 10001
001 10002

ich bekomme aber:

Auftrag Karton
_______________

001 10000
001 10000
001 10000
001 10000
001 10001
001 10001
001 10001
001 10002

weil z.B. im Karton 10000 4 Teile lagen, also pro Teil (Datensatz) ein Ergebnis. Das ist doch nicht DISTINCT???

wie muß ich den SQL String umformulieren?

Gruß ibh_compucat

Moderiert von user profile iconKlabautermann: SQL-Tags hinzugefügt.

_________________
Was du nicht begreifst, kannst du nicht verlernen!
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Sa 14.08.10 20:20 
user profile iconibh_compucat hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden SQL-Anweisung
1:
SELECT DISTINCT AUFTRAG, KARTON FROM AUFTRAGSTABELLE					
Schau Dir das einmal an: support.microsoft.com/kb/181479/en-us
Vielleicht löst das Dein Problem.
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: So 15.08.10 02:55 
ausblenden SQL-Anweisung
1:
Select distinct(Karton) from Auftragstabelle where Auftrag = 001					


?

Moderiert von user profile iconKlabautermann: SQL-Tags hinzugefügt.

_________________
PROGRAMMER: A device for converting coffee into software.
ibh_compucat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

Win 2000, Win 8.1
D6, Ent. XE5 Ent.
BeitragVerfasst: So 15.08.10 12:08 
erst mal Danke für Eure Antworten.

@Gerd: ich verstehe das leider nicht so richtig, was die Microsoft-Leute so vorschlagen.

@xentar: wenn ich das eingebe:
ausblenden SQL-Anweisung
1:
2:
SELECT DISTINCT (KARTON) FROM AUFTRAGSTABELLE
WHERE AUFTRAG = 001

dann kommt eine Exeption:
Im Projekt XYZ.exe ist eine Exception der Klasse EDatabaseError aufgetreten.
Meldung: 'ADOQuery1: Das Feld 'AUFTRAG' wurde nicht gefunden'.
Prozess wurde angehalten . . . u.s.w.
Offensichtlich kann die Query nur auf solche Felder zugreifen, die vor dem 'FROM' deklariert sind.
Aber was kann ich da tun?
Wäre GROUP BY eine Möglichkeit? Ich hab natürlich schon probiert, krieg das aber auch nicht in Funktion.

Gruß ibh_compucat

Moderiert von user profile iconKlabautermann: SQL-Tags hinzugefügt.

_________________
Was du nicht begreifst, kannst du nicht verlernen!
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: So 15.08.10 12:42 
user profile iconibh_compucat hat folgendes geschrieben Zum zitierten Posting springen:
@Gerd: ich verstehe das leider nicht so richtig, was die Microsoft-Leute so vorschlagen.

Microsoft schlägt dort zwei Lösungen vor. Die einfachste dürfte wohl sein, bei ADO-Connection CursorLocation auf adUseServer zu setzen.
Probiers einfach mal aus. Ist doch nur eine Zeile Code.
ibh_compucat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

Win 2000, Win 8.1
D6, Ent. XE5 Ent.
BeitragVerfasst: So 15.08.10 13:16 
Danke an Gerd, ich habe das probiert und es funktioniert!

Aber auch die andere Möglichkeit habe ich noch einmal getestet und den Fehler gefunden.
Der SQL String muss lauten:

ausblenden SQL-Anweisung
1:
SELECT DISTINCT (KARTON), AUFTRAG FROM AUFTRAGSTABELLE WHERE AUFTRAG = 001					


dann läuft alles wie gewünscht.

Noch einmal meinen Dank an Euch beide!

Gruß ibh_compucat

Moderiert von user profile iconKlabautermann: SQL-Tags hinzugefügt.

_________________
Was du nicht begreifst, kannst du nicht verlernen!