| Autor |
Beitrag |
Killi
      
Beiträge: 299
Win*
D6 Prof
|
Verfasst: 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
      
Beiträge: 1021
Win 7, MacOS
Delphi x, VBA, PHP, ...
|
Verfasst: 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 
      
Beiträge: 299
Win*
D6 Prof
|
Verfasst: 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
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: 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 
      
Beiträge: 299
Win*
D6 Prof
|
Verfasst: 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
      
Beiträge: 27
Win 2000, Linux
D2005 Prof
|
Verfasst: 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... 
|
|
Killi 
      
Beiträge: 299
Win*
D6 Prof
|
Verfasst: 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
      
Beiträge: 27
Win 2000, Linux
D2005 Prof
|
Verfasst: 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 
      
Beiträge: 299
Win*
D6 Prof
|
Verfasst: 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!!!
|
|