AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Rein "Informative" Spalte in DBGrid einfügen
Thema durchsuchen
Ansicht
Themen-Optionen

Rein "Informative" Spalte in DBGrid einfügen

Ein Thema von Headbucket · begonnen am 11. Feb 2015 · letzter Beitrag vom 12. Feb 2015
Antwort Antwort
Headbucket

Registriert seit: 12. Dez 2013
Ort: Dresden
172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Rein "Informative" Spalte in DBGrid einfügen

  Alt 11. Feb 2015, 12:29
Datenbank: MSSQL • Version: 12.0.2000.8 • Zugriff über: Delphi (ADO)
Hallo,

auf die Gefahr hin, dass ich mich mit der Frage total zum Deppen mache, muss ich sie nun trotzdem stellen. Bis vor einer Woche hatte ich jedoch noch nie etwas mit Datenbanken zu tun.

Um mein Problem zu erklären folgendes Beispiel:
Ich habe zwei Tabellen. Eine Protokolltabelle und eine Dateitabelle. In der Dateitabelle befinden sich Dateien, welche stets einem Eintrag in der Protokolltabelle zugewiesen werden können. Es können auch mehrere Dateien einem Protokolleintrag zugeordnet werden.

Nun habe ich ein DBGrid, welches mit einer TDataSource verbunden ist, welche wiederrum mit einem TADOQuery verbunden ist. Soweit - sogut.
Mit dem Query rufe ich nun einige Spalten der Protokolltabelle über SELECT auf. Nun möchte ich jedoch auch in einer zusätzlichen Spalte anzeigen, wieviel Dateien dieser Protokolleintrag enthält. Diese Spalte ist natürlich rein informativ und darf auch nicht editiert werden, wobei die anderen Zelle natürlich editiert werden dürfen.

Eine weitere Spalte kann ich natürlich problemlos mit
Delphi-Quellcode:
DBGrid.Columns.Add;
DBGrid.Columns[DBGrid.Columns.Count - 1].FieldName := 'Anzahl';
hinzufügen. Ich weiß nun aber leider nicht, wie ich die Anzahl in die Spalte "Anzahl" bekomme. Eine separate Abfrage ist ja auch kein Problem:
Code:
SELECT Count(fID) as 'Anzahl' FROM tFiles WHERE fExtID = '23'
Mit dieser Abfrage erhalte ich die Anzahl der Dateien für den Protokolleintrag mit der ID "23".
Meine Abfrage für die Protokolleinträge:
Code:
SELECT fDies, fUnd, fDas FROM tProtokoll WHERE tProtokoll.fOffen = '1'
Meine Hoffnung war, dass ich diese beiden Abfragen nun irgendwie zusammenpacken kann. Wenn es aber einen Weg gibt, die Anzahl manuell in die Spalten zu schreiben, dass wäre das auch eine Lösung für mich.

Ich habe bereits folgendes versucht:
Code:
SELECT fDies, fUnd, fDas, Count(fID) as 'Anzahl' FROM tProtokoll WHERE tProtokoll.fOffen = '1'
Jedoch kann ich für das "Count(fID)" ja dann keinen Filter festlegen. Das geht ja irgendwie nicht. Wenn ich keinen Filter festlege (was ja aber auch unsinnig ist) erhalte ich außerdem folgende Fehlermeldung: "Die tProtokoll.fID-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist"

Grüße und schonmal besten Dank
Headbucket

Geändert von Headbucket (11. Feb 2015 um 12:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Rein "Informative" Spalte in DBGrid einfügen

  Alt 11. Feb 2015, 12:36
Kannst Du mal die Tabellenstruktur näher erläutern samt Fremdschlüssel?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Headbucket

Registriert seit: 12. Dez 2013
Ort: Dresden
172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Rein "Informative" Spalte in DBGrid einfügen

  Alt 11. Feb 2015, 12:52
Ich hoffe jetzt wird es anschaulicher:

Sitzungstabelle: (Primärschlüssel ist fID)
fIDfDatum
A10.02.2015
B11.02.2015
C12.02.2015

Protokolltabelle: (Primärschlüssel ist fID, Fremdschlüssel ist fSitzung für Sitzungstabelle)
fIDfSitzungfInhalt
P1APlanung
P2AHausbau
P3BPferdezucht

Dateitabelle: (Primärschlüssel ist fID, Fremdschlüssel ist fExtID für Protokolltabelle)
fIDfExtIDfDatei
F1P20x356GZGZg768345HGJH
F2P20x356GZGZg768345HGJH
F3P20x356GZGZg768345HGJH
F4P30x356GZGZg768345HGJH

Ich möchte nun z.B. von der Sitzung A das Protokoll sehen und als zusätzliche Spalte soll mir angezeigt werden, wieviel Dateien der jeweilige Protokolleintrag enthält.
InhaltAnzahl der Dateien
Planung0
Hausbau3

Klingt eigentlich recht simpel, wenn man es mal so aufschreibt. Aber ich bekomme es leider nicht hin. Das Problem ist halt die Verknüpfung mit dem DBGrid... . Man soll nach Möglichkeit dann "Planung" und "Hausbau" auch editieren können. Es macht aber natürlich keinen Sinn die zweite Spalte mit der Anzahl der Dateien zu bearbeiten. Die ist rein informativ.

Grüße

Geändert von Headbucket (11. Feb 2015 um 12:57 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Rein "Informative" Spalte in DBGrid einfügen

  Alt 11. Feb 2015, 12:57
Z.B. so:

SQL-Code:
select
  p.fInhalt,
  (SELECT Count(d.fID) FROM tFiles d WHERE d.fExtID = p.fID ) as 'Anzahl'
from
  tProtokoll p;
(getippt und nicht gestestet)
Markus Kinzler
  Mit Zitat antworten Zitat
Headbucket

Registriert seit: 12. Dez 2013
Ort: Dresden
172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Rein "Informative" Spalte in DBGrid einfügen

  Alt 11. Feb 2015, 13:14
Ich wusste, dass es eine Deppenfrage war >.<
Ich hatte bereits nach "Unterabfragen" gesucht, jedoch sind diese dort stets nur ganz am Ende bei der Filterung erklärt (nach WHERE).
Das man auch zwischen SELECT und FROM Unterabfragen einbauen kann, wusste ich nicht.

Vielen Dank!
Es funktioniert bestens.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#6

AW: Rein "Informative" Spalte in DBGrid einfügen

  Alt 12. Feb 2015, 06:44
Alternativ noch

SQL-Code:
select
  p.fInhalt,
  count (*) as 'Anzahl'
from
  tProtokoll p
  left join tFiles d on d.fExtID = p.fID
Welches Du nimmst, ist Geschmackssache, obwohl diese Version schneller sein könnte.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Rein "Informative" Spalte in DBGrid einfügen

  Alt 12. Feb 2015, 06:59
Fehlt da nicht noch die Gruppierung nach p.fInhalt?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:43 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