Entwickler-Ecke
Datenbanken - DBGrid: Nur EIN Eintrag pro Person...!?
Killi - Di 01.07.03 12:41
Titel: DBGrid: Nur EIN Eintrag pro Person...!?
Hi!
Mein DBGrid verweist auf ne SQL-Query - die hat ne Abfrage wann ein Kunde zuletzt dagewesen ist (ich prüfe per Zeitintervall, also "where termin < DATUM), da will ich dann den LETZTEN Termin anzeigen - aber er zeigt mir 3 Termine an, ist ja klar - weil alle kleiner als das DATUM sind....wie kann ich das denn überbrücken?
Kann ich es irgendwie machen dass die DBGrid nur EINMAL diese Person anzeigt?
kiwicht - Di 01.07.03 12:45
where termin < DATUM AND kunde = "kunde" ?
oder, wenn deine Datenbank ein eindeutiges Feld enthält, z.B. ein AutoInc-Wert:
zuerst
Quelltext
1:
| SELET * FROM dbank WHERE where termin < DATUM |
dann
Quelltext
1:
| Query.Last (also zum letzten Datensatz) |
und dann
Quelltext
1:
| SELECT * FROM dbank WHERE id = query.FieldByName('id') |
Prinzip verstanden?
mfG
Moderiert von
Tino: Code-Tags hinzugefügt.
Killi - Di 01.07.03 13:06
geht wohl net so einfach - hier mal der Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| QRecall.Active:= False; QRecall.SQl.CLear; QRecall.SQl.Add('Select * from kunden, termine where (kunden.Recall = ''True'') and (termine.KID = kunden.KID) and (Erledigt = ''True'')');
QRecall.SQL.Add(' and (((kunden.RecallZeit = ''1'') and (termine.Datum < ''' + DateToStr(Jahr1) + '''))'); QRecall.SQl.Add(' or ((kunden.RecallZeit = ''2'') and (termine.Datum < ''' + DateToStr(Jahr2) + '''))) order by kunden.Nachname ASC, kunden.Vorname ASC, termine.Datum DESC');
QRecall.Active:= True;
if QRecall.RecordCount <> 0 then begin DBgrid1.Visible:= True; end else begin DBgrid1.Visible:= False; end; |
Ich hab also 1mal ne Kunden-DB und einmal ne DB mit Terminen - where Kunde = Kunde hab ich ja....deshalb werden auch immer soviele gleich angezeigt - weil sie mehr Termine haben...
UGrohne - Di 01.07.03 13:12
Versuch mal hinter den SQL-Code noch LIMIT 1,1 dahinterzuhängen, ich kenn die genau Syntax nimmer, aber mit LIMIT müsste es gehen.... wenns so net geht, einfach mal in SQL-Referenz schauen....
Killi - Mi 02.07.03 12:13
Hab nachgeschaut - ich versteh dass so, dass wenn ich Limit 1,1 dazuschreibe dann nur der 1.Eintrag aus der DB kommt....1.Frage: EGAL wo ich es hinschreibe, es wird nicht angenommen in meiner Abfrage (die seht ihr ja weiter oben)! 2. Frage: der 1.Eintrag also....hm....überprüft er dann nicht nur den 1. Eintrag? Wenn ja ist das ja eh Schwachsinn...
DaDoc - Mi 02.07.03 12:25
...auch wenns ein wenig "wild" aussieht:
Schnappe Dir mal den DBExplorer und probier mal folgendes aus:
Quelltext
1: 2: 3: 4: 5: 6: 7:
| select K.Nachname, K.Vorname, Max(T.Datum) as LastDatum from Kunden K join Termine T on (T.KID = K.KID) where (K.Recall = True) and (Erledigt = True) and (((K.RecallZeit = 1) and (Datum < '30.06.2003')) or ((K.RecallZeit = 2) and (Datum < '25.06.2003'))) group by K.Nachname, K.Vorname order by K.Nachname, K.Vorname |
Die beiden Datumsangaben muß Du natürlich mit Deinen eigenen Angaben ersetzen... :wink:
Killi - Mi 02.07.03 14:26
Ja des funktioniert ja wunderbarschdens!!!! DANKE!!!!!!!!!!!
Aber wozu sollte ich da n DBExplorer nehmen? 1. hab ich den anscheinend nicht und 2. nehm ich immernoch n DBGrid zum anzeigen...
DaDoc - Mi 02.07.03 14:38
| Killi hat folgendes geschrieben: |
| ...Aber wozu sollte ich da n DBExplorer nehmen? 1. hab ich den anscheinend nicht und ... |
Hmm...sollte eigentlich im "Bin"-Verzeichnis von Delphi sein (dbexplor.exe). Den nehm ich meistens für "den-mal-eben-SQL-schnell-test-auf-meine-Daten"...
Killi - Mi 09.07.03 11:10
Hi!
Hab jetzt alles wunderbar benutzt - aber jetzt kamen noch Felder dazu (ein Memo-Feld, heißt in der Datenbank recallText.Text)....hier der Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| QDruck.SQl.Add('Select kunden.Karteikarten_nr, kunden.Nachname, kunden.Vorname, kunden.Straße, kunden.Nummer, kunden.PLZ, kunden.Ort,'); QDruck.SQL.Add(' recallText.Anrede, recallText.Text,'); QDruck.SQl.Add(' Max(termine.Datum) as MaxTermin from kunden, termine, recallText where (kunden.Recall = ''True'') and (termine.KID = kunden.KID) and (Erledigt = ''True'')'); QDruck.SQl.Add(' and (Kunden.RID = recallText.RID)'); .... QDruck.SQl.Add(' group by kunden.Karteikarten_nr, kunden.Nachname, kunden.Vorname, kunden.Straße, kunden.Nummer, kunden.PLZ, kunden.Ort, '); QDruck.SQl.Add(' recallText.Anrede, recallText.Text order by kunden.Nachname ASC, kunden.Vorname ASC, termine.MaxTermin DESC'); |
Moderiert von
Tino: Delphi-Tags hinzugefügt.
jetzt sagt er mir dass in group by keine BLOB Memos drinstehen dürfen....nehm ichs raus, meint er ich solls reinamchen weil ers braucht...TOLL! Ich brauch das Feld aber unbedingt!!!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!