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