Autor Beitrag
Killi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 299

Win*
D6 Prof
BeitragVerfasst: Di 01.07.03 12:41 
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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: 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
ausblenden Quelltext
1:
SELET * FROM dbank WHERE where termin < DATUM					

dann
ausblenden Quelltext
1:
Query.Last (also zum letzten Datensatz)					

und dann
ausblenden Quelltext
1:
SELECT * FROM dbank WHERE id = query.FieldByName('id')					

Prinzip verstanden?

mfG

Moderiert von user profile iconTino: Code-Tags hinzugefügt.
Killi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 299

Win*
D6 Prof
BeitragVerfasst: Di 01.07.03 13:06 
geht wohl net so einfach - hier mal der Code:
ausblenden 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;

     // Wenn gefunden
     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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 299

Win*
D6 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27

Win 2000, Linux
D2005 Prof
BeitragVerfasst: Mi 02.07.03 12:25 
...auch wenns ein wenig "wild" aussieht:
Schnappe Dir mal den DBExplorer und probier mal folgendes aus:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 299

Win*
D6 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27

Win 2000, Linux
D2005 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 299

Win*
D6 Prof
BeitragVerfasst: 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:
ausblenden 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 user profile iconTino: 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!!!