Autor Beitrag
LonghornUser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: Di 18.05.04 17:50 
Hallo.

Ich bin relaiv neu im Coden von Datenbanken.

Ich habe erstmal einen Table, welcher über diverse andere Komponenten (zB. DataSource) mit meiner Käufer.db verknüpft ist. Ich kann also hineinschreiben und alles dann wieder abspeichern.

Da hätte ich mal ein paar Fragen:

1.) Wie stelle ich es an, die Anzahl der Zeilen zu bekommen (runterwärts also nicht die Spalten (Fields) ) ?
2.) Des Weiteren möchte ich einen Monats-Durchschnitt der Verkäufe bekommen. Erlärung:
Ich möchte alle Verkäufe des Monats Mai (05) zusammenzählen. Das geht aber nicht s einfach, da die Spalte "Zeitpunkt" das Format tt.mm.jjjj hat (zB. 11.05.2004).
Also wie kann ich nur die Zellen zusammenzählen, die ein 05 bzw. 03 bzw. 12 an 4ter Stelle haben ? Und wie müsste ich die Jahreszahl einbauen, um die Zellen dann zu unterscheiden ? (Denn der Verkauf läuft ja schon seit mehreren Jahren)

Für jeden brauchbaren Vorschlag / Code wäre ich dankbar :)
In diesem Sinne. Danke :)

Ciao LonghornUser
Martin77
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 282

XP Prof
D6 Prof, D7 Personal, D7 Enterprise, D8 personal
BeitragVerfasst: Di 18.05.04 19:53 
LonghornUser hat folgendes geschrieben:
Hallo.

Ich bin relaiv neu im Coden von Datenbanken.

1.) Wie stelle ich es an, die Anzahl der Zeilen zu bekommen (runterwärts also nicht die Spalten (Fields) ) ?
2.) Des Weiteren möchte ich einen Monats-Durchschnitt der Verkäufe bekommen. Erlärung:
Ich möchte alle Verkäufe des Monats Mai (05) zusammenzählen. Das geht aber nicht s einfach, da die Spalte "Zeitpunkt" das Format tt.mm.jjjj hat (zB. 11.05.2004).
Also wie kann ich nur die Zellen zusammenzählen, die ein 05 bzw. 03 bzw. 12 an 4ter Stelle haben ? Und wie müsste ich die Jahreszahl einbauen, um die Zellen dann zu unterscheiden ? (Denn der Verkauf läuft ja schon seit mehreren Jahren)


1. DeinQuery.RecordCount
Sollte dir bei jeder DB Komponente die Anzahl der Zeilen mitteilen, achtung, hierbei wird das ganze Query durchlaufen/geladen und die Einträge gezählt. Ist immer die Frage ob man die Anzahl braucht, wenn du eh alle laden willst, kannste auch mit einer while not DeinQuery.eof durchlaufen und mit den Werten was machen und gleichzeitig nen internen Zähler erhöhen. Wenn dich die Werte nicht interessieren kann auch nen
ausblenden Quelltext
1:
Select Count(ID) from TABLENAME where BEDINGUNG					

helfen, soll angeblich schneller sein, habs aber nie überprüft, kam bisher noch nie auf die Idee die echten Datensätze zu zählen, soviele da sind sind halt da :)


Zu 2)
Wenn es dir um einen Monat geht:
ausblenden Quelltext
1:
Select Sum(Gewinn) from Buchungen B where B.RechDatumVon >= '01.05.2004' and B.RechDatumBis <= '31.05.2004'					


SQL Code ist ungetestet, aber ich hoffe du verstehst was ich meine, wenn du jedoch von jedem Mai" die Werte haben willst musst du dir was anderes einfallen lassen, dürfte ja auch nicht so wild werden


Gruß Martin
LonghornUser Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: Mi 19.05.04 11:49 
Danke erstmal für den ersten Tip. Der hat super funktioniert.

Martin77 hat folgendes geschrieben:

Zu 2)
Wenn es dir um einen Monat geht:
ausblenden Quelltext
1:
Select Sum(Gewinn) from Buchungen B where B.RechDatumVon >= '01.05.2004' and B.RechDatumBis <= '31.05.2004'					


SQL Code ist ungetestet, aber ich hoffe du verstehst was ich meine, wenn du jedoch von jedem Mai" die Werte haben willst musst du dir was anderes einfallen lassen, dürfte ja auch nicht so wild werden


Gruß Martin


Aber hier gibt's Probleme. Könntest du das so umschreiben, dass ich es auf mein Problem anwenden kann ? Ich habe:

Table1
Datasource1 (ist mit der DB-Datei verknüpft)
DBGrid (projeziert die DB-Datei)

Wie müsste ich es dann machen, wenn die jahreszahl nicht "2004" heißt sondern so groß ist, wie die letzte (höchste) Jahreszahl des Datensatzes ist ?
Also dass, wenn der letzte Kauf im Mai 2005 war, soll sich das Programm von selbst darauf einstellen können.
Weißt du / Wisst ihr, wie man das anstelln könnte ?
Martin77
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 282

XP Prof
D6 Prof, D7 Personal, D7 Enterprise, D8 personal
BeitragVerfasst: Mi 19.05.04 23:43 
LonghornUser hat folgendes geschrieben:


Wenn es dir um einen Monat geht:
ausblenden Quelltext
1:
Select Sum(Gewinn) from Buchungen B where B.RechDatumVon >= '01.05.2004' and B.RechDatumBis <= '31.05.2004'					


Table1
Datasource1 (ist mit der DB-Datei verknüpft)
DBGrid (projeziert die DB-Datei)

Wie müsste ich es dann machen, wenn die jahreszahl nicht "2004" heißt sondern so groß ist, wie die letzte (höchste) Jahreszahl des Datensatzes ist ?
Also dass, wenn der letzte Kauf im Mai 2005 war, soll sich das Programm von selbst darauf einstellen können.
Weißt du / Wisst ihr, wie man das anstelln könnte ?


Hab nie mit direkten DB Komponenten zu tun gehabt, also nie nen DB Grid verwendet.
Da ich nur IBO verwende weiss ich nicht ob das was ich jetzt schreibe auch mit den TDataSet Klassen klappt:

Wenn Du eine QueryKomponente auf deine Form "wirfst" dann kannste ihr meinen obrigen Quelltext zuweisen und dann die Verbindung zwischen Query und Dataset herstellen. Das DB Grid sollte dann die Informationen aus dem Query anzeigen.

Zu deiner 2. Frage:
ausblenden Quelltext
1:
Select MAX(AbrechDat) from Buchungen					

als erstes mit einem query abfeuern, dann das Ergebnis merken
ausblenden Quelltext
1:
2:
if not qryAbfrage.EOF then
  dMaxAbrechDat:= qryAbfrage.FieldByName('ABRECHDAT').asDate

Die EOF abfrage solltest du machen, weil wenn kein Datensatz in deiner Tabelle vorhanden ist, dann wäre es unklug den Umsatz des Monates zu bestimmen.
dMaxAbrechdat ist eine TDate Variable, mit dieser kannst du jetzt den Monatsanfang und das Monatsende bestimmen. Guck dir mal in der Hilfe die Datumsroutinen an, bin mir nicht sicher ob es eine BeginOfMonth und EndOfMonth Routine gibt, aber sollte es, oder ähnlich heissende.

Diese beiden Variablen kannst du dann wieder für dein Query verwenden, dadurch bekommst du dann halt jeweils für de Monat die Ergebnisse. Ob man das direkt durch SQL lösen kann ist ne andere Frage, ich denke mal mit der BDE oder sonstigen "einfachen" DB Systemen nicht so leicht. Wenn Du eigene UDF's anlegen kannst, könntest du darin die Berechnugn machen, aber ich würde es dir eher im Source raten zu machen., Falls du dann mal das DB System wechseln solltest, kannste dich darauf verlassen das diese Abfrage auch dann noch ordentlich klappen sollte.


Gruß Martin
LonghornUser Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: Mi 19.05.04 23:45 
Danke für die Antwort. Ich werd's nochmal versuchen :) Danke