AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken ADO Problem mit SQL DISTINCT und DBEdit
Thema durchsuchen
Ansicht
Themen-Optionen

ADO Problem mit SQL DISTINCT und DBEdit

Offene Frage von "DeddyH"
Ein Thema von Acubens61 · begonnen am 3. Feb 2013 · letzter Beitrag vom 4. Feb 2013
Antwort Antwort
Seite 1 von 2  1 2      
Acubens61

Registriert seit: 3. Feb 2013
Ort: Darmstadt
6 Beiträge
 
Delphi XE Professional
 
#1

ADO Problem mit SQL DISTINCT und DBEdit

  Alt 3. Feb 2013, 04:09
Datenbank: Firebird • Version: 2.5.2 • Zugriff über: ADO
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
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: ADO Problem mit SQL DISTINCT und DBEdit

  Alt 3. Feb 2013, 08:02
Zeig doch mal deine gesamte Tabellenstruktur. Es riecht ein wenig nach fehlender Normalisierung
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Acubens61

Registriert seit: 3. Feb 2013
Ort: Darmstadt
6 Beiträge
 
Delphi XE Professional
 
#3

AW: ADO Problem mit SQL DISTINCT und DBEdit

  Alt 3. Feb 2013, 08:35
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: ADO Problem mit SQL DISTINCT und DBEdit

  Alt 3. Feb 2013, 08:53
Dann ist es klar. Wenn du nur projektnr abfragst kommt auch keine Projektbezeichnung zurück:

Code:
SELECT DISTINCT PROJEKTNR, PROJEKTBEZ FROM ARBEITEN WHERE MITARBEITER = 'NAME'.
Und ja, die Tabelle ist nicht normalisiert.
Die Projektbezeichnung ist hier unnötig und ist vermutlich auch in der Projekttabelle auch vorhanden.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Acubens61

Registriert seit: 3. Feb 2013
Ort: Darmstadt
6 Beiträge
 
Delphi XE Professional
 
#5

AW: ADO Problem mit SQL DISTINCT und DBEdit

  Alt 3. Feb 2013, 09:03
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:
 SELECT DISTINCT PROJEKTNR, PROJEKTBEZ FROM ARBEITEN WHERE MITARBEITER = 'NAME'
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 ...
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: ADO Problem mit SQL DISTINCT und DBEdit

  Alt 3. Feb 2013, 09:10
Gibt es keinen DISTINCT, der neben der Ergebnismenge auch noch die Datenfelder (so wie SELECT * FROM ... WHERE... liefert?
Alle anderen Felder werden auch benötigt? Dann ist aber auch kein Distinct mehr nötig/sinnvoll.

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)
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: ADO Problem mit SQL DISTINCT und DBEdit

  Alt 3. Feb 2013, 09:11
Eventuell wird hier auch nach GROUP BY gesucht
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Acubens61

Registriert seit: 3. Feb 2013
Ort: Darmstadt
6 Beiträge
 
Delphi XE Professional
 
#8

AW: ADO Problem mit SQL DISTINCT und DBEdit

  Alt 3. Feb 2013, 09:19

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
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: ADO Problem mit SQL DISTINCT und DBEdit

  Alt 3. Feb 2013, 11:38
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:
Select distinct Name from Tabelle
Dann bleibt die Frage welcher der zwei vorhandenen Datensätze soll den editiert werden.

Ein vernünftiges Pärchen wäre
Code:
Select NameID,Name from Tabelle
Code:
Update Tabelle Set Name='Irgendwas' where NameID=123456
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#10

AW: ADO Problem mit SQL DISTINCT und DBEdit

  Alt 3. Feb 2013, 11:48
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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 08:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz