VS2008 Dataset Query und Group BY

30/09/2008 - 14:57 von Lars Eggert | Report spam
Hallo NG,

habe da maln Problem.
In einem DataSet befinden sich DataTables mit TableAdaptern und Queries
drin.
So z.B. eine Tabelle, in der z.B. in Column 4 (kundenum) die Kundennummer
eines Kunden steht und in Column5 (tradernum) die Kundennummer eines
Hàndlers.
Somit sollte es ja problemlos möglich sein, alle Kunden eines Hàndlers zu
filtern und zwar per GROUP BY.

Also Query gebaut mit folgendem SQL Statement

SELECT kundenum
FROM meinetabelle
WHERE (tradernum = @tradernum)
GROUP BY kundenum
ORDER BY kundenum

Führe ich im Query Builder ein Preview durch mit manueller Eingabe der
entsprechenden tradernum werden alle Daten so wie es sein soll ausgegeben.
Führe ich aber die Abfrage per Code aus
myDataSet.myDataTable myTable =
myTableAdapter.GetDataByTraderNum("00000000001");
so bekomme ich die Fehlermeldung:

System.Data.ConstrainException
Einschrànkungen konnten nicht aktiviert werden. Mindestens eine Zeile
enthàlt Werte die die Einschrànkung non-null, unique or foreign-key
verletzen

Nehme ich die GROUP BY Bedingung aus der Query raus, bleibt die
Fehlermeldung aus.

Jemand eine Idee woran das liegen könnte?
Was mich stutzig macht ist, daß eben das Preview mit genau den Daten im
Query Builder tadellos funktioniert.

Grüße und Danke

Lars
 

Lesen sie die antworten

#1 Elmar Boye
30/09/2008 - 16:10 | Warnen spam
Hallo Lars,

Lars Eggert schrieb:
In einem DataSet befinden sich DataTables mit TableAdaptern und Queries
drin.
So z.B. eine Tabelle, in der z.B. in Column 4 (kundenum) die Kundennummer
eines Kunden steht und in Column5 (tradernum) die Kundennummer eines
Hàndlers.
Somit sollte es ja problemlos möglich sein, alle Kunden eines Hàndlers zu
filtern und zwar per GROUP BY.

Also Query gebaut mit folgendem SQL Statement

SELECT kundenum
FROM meinetabelle
WHERE (tradernum = @tradernum)
GROUP BY kundenum
ORDER BY kundenum



da dürftest Du auch schreiben:
SELECT DISTINCT kundenum
FROM meinetabelle
WHERE ...

nur vermutlich brauchst Du was anderes, s. u.


Führe ich im Query Builder ein Preview durch mit manueller Eingabe der
entsprechenden tradernum werden alle Daten so wie es sein soll ausgegeben.



Beim Preview werden die Daten nicht in das DataSet mit allen Einschrànkungen
eingelesen, sondern nur eine einfache Abfrage durchgeführt und das Ergebnis
angezeigt.
Somit ist nur sichergestellt, dass die Abfrage korrekt ist,
nicht aber, ob sie allen Einschrànkungen des DataSets genügt.

Führe ich aber die Abfrage per Code aus
myDataSet.myDataTable myTable =
myTableAdapter.GetDataByTraderNum("00000000001");
so bekomme ich die Fehlermeldung:

System.Data.ConstrainException
Einschrànkungen konnten nicht aktiviert werden. Mindestens eine Zeile
enthàlt Werte die die Einschrànkung non-null, unique or foreign-key
verletzen



Was wir hier nicht wissen, aber wissen müssten:
Welche Spalten enthàlt Deine Tabelle noch und sind dort
welche bei den AllowDbNull nicht erlaubt ist?

Bestehen Beziehungen (ForeignKeyConstraints) zu anderen DataTable
Instanzen im DataSet - oben erwàhnst Du z. B. die "tradernum"?

Nehme ich die GROUP BY Bedingung aus der Query raus, bleibt die
Fehlermeldung aus.



Ist die abgefragte Spalte auch der Primàrschlüssel?

Jemand eine Idee woran das liegen könnte?



Grundsàtzlich wàre vermutlich die Abfrage anders gestellt.
Leider sind Deine Angaben da etwas vage.

Um eine DataTable "kunden" auf Basis Deiner "meinetabelle" zu füllen,
könnte die Abfrage z. B. mit EXISTS lauten

SELECT * /* Spaltenliste der DataTable kunden */
FROM kunden
WHERE EXISTS(SELECT *
FROM meinetabelle
WHERE kunden.kundenum = meinetabelle.kundenum
AND tradernum = @tradernum)

falls das im Ansatz nicht passt, müßtest Du Deine Tabellenstruktur
etwas genauer beschreiben.

Gruß Elmar

Ähnliche fragen