![]() |
Datenbank: Firebird • Version: 2.5.2 • Zugriff über: ADO
ADO Problem mit SQL DISTINCT und DBEdit
Hallo an alle Forenmitglieder,
ich bin seit heute neu angemeldet und muss sagen, dass euer Forum eine große Hilfe ist! Nun habe ich ein Problem, das ich trotz intensivem Googeln seit Tagen nicht lösen konnte: Ich habe eine Datenbank zur Speicherung von Projekttätigkeiten. Dazu werden Projektnummer, Projektbezeichnung, Zeiten und Mitarbeiter gespeichert. Ich nutze den Befehl DISTINCT um zu Filtern an welchen Projekten ein Mitarbeiter involviert ist: SELECT DISTINCT PROJEKTNR FORM ARBEITEN WHERE MITAREBEITER = 'NAME' Funktioniert auch. Nun mein Problem: Da ich Datensätze auf der Maske mit DBEdit anzeige, erhalte ich nach der Select immer Fehler "Das Feld 'Projektbezeichnung' wurde nicht gefunden". Der Grund liegt daran, dass nach dem Filtern mit DISTINCT die Datenmenge nur noch eine Spalte mit PROJEKTNR hat, die anderen Spalten der Datensätze in den DBEdit-Feldern sich nach der Abfrage aktualisieren möchten und nicht angezeigt werden können (weil nicht da). Habe eine ganze Zeit dafür benötigt um den Feher zu finden und zu verstehen, warum das Programm immer meldete, dass Felder nicht gefunden wurden, auf die ich gar nicht zugreife... Hat jemand das gleiche Problem schon einmal gehabt? Ich fände es sehr aufwändig, wenn ich für alle Datenfelder mit Exceptions die Meldung abfangen müsste bzw. Abfragen einbauen müsste, wie z.B. if DataSet.FindField ('Projektbezeichnung')<> Nil then ... Eine Lösung wäre das DISTINCT mit anschließender Ausgabe aller Felder der Ergebnismenge. Das habe ich aber trotz intensivem Suchen nicht gefunden. SELECT DISTINCT Feld1, Feld2, Feld3 ... FeldN FROM ARBEITEN wäre falsch, denn es liefert das DISTINCT über alle Felder! Ich hoffe, dass mir jemand weiter helfen kann und dass es nicht schon ein Thema mit der gleichen Frage gibt (hab keins gefunden). Grüße Jörg |
AW: ADO Problem mit SQL DISTINCT und DBEdit
Zeig doch mal deine gesamte Tabellenstruktur. Es riecht ein wenig nach fehlender Normalisierung ;)
|
AW: ADO Problem mit SQL DISTINCT und DBEdit
Hallo Sir Rufo,
danke für die rasche Antwort. Hmmm, fehlende Normalisierung? Die Datenbank besteht bereits und ist produktiv im Einsatz. Die Sturktur sieht wie folgt aus: CREATE TABLE "ARBEITEN" ( "ID" INT64 NOT NULL, "DATUM" DATE, "MITARBEITER" VARCHAR(30) CHARACTER SET ISO8859_1, "PROJEKTNR" VARCHAR(14) CHARACTER SET ISO8859_1, "PROJEKTBEZ" VARCHAR(80) CHARACTER SET ISO8859_1, "TAETIGKEIT" VARCHAR(80) CHARACTER SET ISO8859_1, "STARTZEIT" VARCHAR(5) CHARACTER SET ISO8859_1, "ENDZEIT" VARCHAR(5) CHARACTER SET ISO8859_1, "ZEIT" FLOAT, "STUNDENSATZ" FLOAT, "AUFWAND" FLOAT, PRIMARY KEY ("ID") ); In der Tabelle suche ich dann für einen Mitarbeiter die angefassen Projekte ... also SELECT DISTINCT PROJEKTNR FROM ARBEITEN WHERE MITARBEITER = 'NAME'. Hoffe du kannst mir weiter helfen... LG Jörg |
AW: ADO Problem mit SQL DISTINCT und DBEdit
Dann ist es klar. Wenn du nur projektnr abfragst kommt auch keine Projektbezeichnung zurück:
Code:
Und ja, die Tabelle ist nicht normalisiert.
SELECT DISTINCT PROJEKTNR, PROJEKTBEZ FROM ARBEITEN WHERE MITARBEITER = 'NAME'.
Die Projektbezeichnung ist hier unnötig und ist vermutlich auch in der Projekttabelle auch vorhanden. |
AW: ADO Problem mit SQL DISTINCT und DBEdit
Ja, klar ist mir das eigentlich auch und die Normalisierung verstehe ich jetzt auch, was du meinst.
Aber das Problem ist nicht gelöst. Ich habe ja im Programm eine Maske, in der ziemlich alle Felder angezeigt werden. SELECT DISTINCT FELD1, FELD2 ... würde ein DISTINCT über alle Felder machen, was dann zu einer falschen Abfrage führen würde (zumindest nicht die, die ich wollte). Mit
Code:
kommen die Felder PROJEKTNR und PROJEKTBEZ raus, die anderen natürlich auch wieder nicht. Die Update-Events meiner DBEdit-Felder die dann in der Ergebnismenge nicht mehr vertreten sind, führen dann zum Fehler ...
SELECT DISTINCT PROJEKTNR, PROJEKTBEZ FROM ARBEITEN WHERE MITARBEITER = 'NAME'
Hmm, ich müsste vorher die Events abschalten? Geht das nicht einfacher? Gibt es keinen DISTINCT, der neben der Ergebnismenge auch noch die Datenfelder (so wie SELECT * FROM ... WHERE... liefert? Grüße Jörg |
AW: ADO Problem mit SQL DISTINCT und DBEdit
Zitat:
Was willst du den wirklich in deinem Formular sehen? Evtl. ist es nötig das du 2 Formulare hast. Einen für die Eingabe, einen für Auswertungstätigkeiten (Liste aller Zeitbuchungen einer Person, diese Liste ist eine Liste (Baum, falls nach Projekten gruppiert werden soll) |
AW: ADO Problem mit SQL DISTINCT und DBEdit
Eventuell wird hier auch nach GROUP BY gesucht ;)
|
AW: ADO Problem mit SQL DISTINCT und DBEdit
:-D
Hmm. Hatte ich eigentlich auch schon mal gefunden, aber irgend wie nicht weiter gekommen. Probier ich nochmal... DANKE fürs Erste! Werde mich zurück melden, wenns klappt oder auch nicht... wenn's das war, dann :oops: |
AW: ADO Problem mit SQL DISTINCT und DBEdit
DISTINCT und das editieren von Daten beißen sich!
Sollte es z.B. zwei Personen mit dem Namen "Fischer" geben und die Abfrage lautet
Code:
Dann bleibt die Frage welcher der zwei vorhandenen Datensätze soll den editiert werden.
Select distinct Name from Tabelle
Ein vernünftiges Pärchen wäre
Code:
Select NameID,Name from Tabelle
Code:
Gruß
Update Tabelle Set Name='Irgendwas' where NameID=123456
K-H |
AW: ADO Problem mit SQL DISTINCT und DBEdit
Das kommt mir so vor, als ob hier schlicht die selber Query für die DB Edits auch für andere Zwecke verwendet wird, also ungefähr:
- erstmal alle dbedits füllen - dann weitere Aufgaben mit der selben Query (gleiche Instanz, anderer SQL.text) Wenn das so ist: Einfach für alles, was nichts mit den DBEdits zu tun hat, separate Queries verwenden. Kommt etwas darauf an, ob Du die Queries auf die Form gezogen hast oder dynamisch erzeugst. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 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