AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi 20 Datasets verallgemeinern
Thema durchsuchen
Ansicht
Themen-Optionen

20 Datasets verallgemeinern

Ein Thema von Hansa · begonnen am 29. Okt 2003 · letzter Beitrag vom 30. Okt 2003
Antwort Antwort
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

20 Datasets verallgemeinern

  Alt 29. Okt 2003, 21:05
Hi,

folgendes Problem: ich habe 20 Tabellen mit statistischen Daten. Diese sollen grafisch aufbereitet werden. Z.B. Umsatz-Jahresübersicht, als Grafik, wo die Monate einzeln aufgeführt werden. Im Prinzip ist das immer dasselbe, nur die Tabellen sind halt unterschiedlich. Ich könnte jetzt das ganze 20mal abkupfern, glaube aber daß es besser irgendwie über Parameter gesteuert wird. Nur wie und wo ?

Delphi-Quellcode:
procedure TForm1.btnStartClick(Sender: TObject);
var i : byte;
    m : MonatsUmsatz;
    homepath : string;
begin
  Series1.Clear;
  Series1.Title := LabeledEdit1.Text;
  Series2.Clear;
  Series2.Title := LabeledEdit2.Text;
  FirmStat.Title.Text [0] := 'Firmen - Statistik '+LabeledEdit1.Text+'/'+LabeledEdit2.Text+' in 1000 €';
  FirmStat.Visible := true;
// Button2.Visible := true;
  CASE Auswahl.ItemIndex OF
    1 : s := UmsatzListe;
    2 : s := RGliste;
    3 : s := MengenListe;
  END;
  WITH StatModul.FirmStatDS DO BEGIN
    close;
    SelectSQL.Text := 'SELECT * FROM FIRMSTAT8 WHERE JAHR ='  + LabeledEdit1.text;
    open;
    IF NOT IsEmpty THEN BEGIN
      for i:= 1 to 12 do BEGIN
        StatUmsatz (m);
        Series1.AddXY(i,m [i]);
      END;
    end
    else
      ShowMessage ('Keine Daten für '+LabeledEdit1.Text+' gefunden !');
    close;
    StatModul.FirmStatDS.SelectSQL.Text :='SELECT * FROM FIRMSTAT8 WHERE JAHR = '+ LabeledEdit2.text;
    open;
    IF NOT IsEmpty THEN BEGIN
      for i:= 1 to 12 do begin
        StatUmsatz (m);
        Series2.AddXY(i,m [i]);
      end;
    end
    else
      ShowMessage ('Keine Daten für '+LabeledEdit2.Text+' gefunden !');
  END;
  FirmStat.visible := true;
  IF clbOptionen.Checked [0] THEN
    FirmStat.Print;
  IF clbOptionen.Checked [1] THEN BEGIN
    homePath:=ExtractFilePath(ParamStr(0));
    SaveDialog1.InitialDir:=homePath;
    SaveDialog1.Title := 'Bitmap - Grafik speichern';
    SaveDialog1.FileName := 'GRAFIK.BMP';
    if SaveDialog1.Execute then
      FirmStat.SaveToBitmapFile (SaveDialog1.FileName);
  END;
  IF clbOptionen.Checked [2] THEN BEGIN
  END;
end;

Vermute, an dieser Stelle müßte man irgendwie was ändern:

'SELECT * FROM FIRMSTAT8 WHERE JAHR ='

Im Anhang ist ein Screenshot, wie das ganze aussieht. Nur soll es eben 20 Tabellen berücksichtigen. Die Grafiken an sich wären fast gleich.
Miniaturansicht angehängter Grafiken
test_335.jpg  
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#2

Re: 20 Datasets verallgemeinern

  Alt 29. Okt 2003, 21:50
Hallo Hansa,
na auch wieder mal in der Warenwirtschaft gelandet...

Du ich würde Deine Procedure als Parameter den SQL-String übergeben. Selbst mag ich keine Query-Parameter und neige dazu den SQL-String in einer seperaten Procedure Zusammenzusetzen.

'SELECT FROM ' + TABLE_STR + ' WHERE JAHR = " ' + trim(Edit.Text) + ' " ';

So kannst Du Dir auch noch den fertigen SQL-String mit Showmessage-Anzeigen lassen,
was bei Parametern immer etwas leidlich ist.

Grüße aus dem flachen Norden

// Martin






Vorsicht: hier arbeitet ein Tricoder..
Martin Schaefer
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: 20 Datasets verallgemeinern

  Alt 29. Okt 2003, 22:06
Soweit war ich auch schon, aber wo kommt dann der TABLE_STR her, bzw. wo muß der hin ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#4

Re: 20 Datasets verallgemeinern

  Alt 29. Okt 2003, 22:43
Hm ja Du schreibtst ja, dass Du 20 Tabellen hast, ich nehme an ,
das sich entscheidet welche Du nehmen mußt wenn Der Anwender seine
Wahl trifft.

Du machst den Unterscheid in der Case Strukur.
Soweit ich das bisher verstanden habe würde ich jetzt in den Case-Fallen
den Table_STR :='Tabellenname' zuweisen...

Melde mich Morgen wieder // Grüße //Martin
Martin Schaefer
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

Re: 20 Datasets verallgemeinern

  Alt 30. Okt 2003, 01:08
Wenn ich das global mache, dürfte das so schon gehen. Glaube aber nicht, daß das nötig ist. Das wiederspricht eigentlich auch dem Grundgedanken von Delphi mit Datenkapselung usw.

Ist es in der Formdeklaration mit drin, so geht es nur mit Hilfe des Repository. Dann schleppe ich aber auch viel Source Ballast mit. So was wäre u.a. sehr empfänglich für Tipfehler. Desweiteren tauchen doch noch einige Dinge auf, die berücksichtigt werden müssen. Um z.B. eine Kunden-Statistik zu erstellen, brauche ich noch auf der Form ein Feld um die Kunden-Nr. eingeben zu können. Also kann ich dazu die Vorlage aus der Kundenstatistik vergessen. Wie es aussieht wären dann die 20 Forms reduziert auf ca. 5 Repository Einträge. Das ists wohl auch nicht.

Das nächste wäre die Property 'Tag' zu benutzen. Die wollte ich mir aber für extreme Notfälle aufheben. Würde ich nur ungern machen.

Und last not least, eine eigene Form abzuleiten, die ein eigenes 'Statistik-Tag' besitzt. Das könnte man dann sogar im OI verändern. Aber u.a. durch die kluge Entscheidung von Borland, z.B. eine Unterscheidung in Runtime- und Designtime Packages und das aus 'wichtigen Lizenzgründen' , Komponenten-Expert Typen usw., ist das arg kompliziert, vor allem weil mans nicht oft braucht. Alleine dafür bräuchte ich 2 Tage, um wieder zu wissen wie das war. Mit Motzi hatte ich das mal durchgezogen, sonst ist mir keiner bekannt, der überhaupt weiß was genau gemacht werden muß. Vermute, daß es nur wegen des OI so schwierig ist.

Für den Zweck hier brauche ich den aber nicht unbedingt.

Wieso geht das nicht einfach so zu schreiben:

Delphi-Quellcode:
TYPE StatTyp = (StatTyp1,StatTyp2...);

TStatistikForm=class(TForm)
  TStatTyp : Stattyp;
  procedure bla;
...
end;
oder muß das nur irgendwo bei private, public hin ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#6

Re: 20 Datasets verallgemeinern

  Alt 30. Okt 2003, 08:18
Hallo Hansa,

wenn du den TableStr Array an mehreren Stellen benötigst, aber nur in diesem Formular, kannst du ihn die Privat Section des Objektes packen. Benötigst du ihn nur in der Prozedur, die du angezeigt hast, kannst du ihn auch in die Prozedur selbst packen:

Delphi-Quellcode:
procedure TForm1.btnStartClick(Sender: TObject);
const
   TableStr : array [1..20] of String =('FIRMSTAT8', 'DieZweiteTab', 'NochEine' ...);
var i : byte;
    m : MonatsUmsatz;
    homepath : string;
begin
Sind die Namen einfach nur durchnummeriert, tuts eine Schleife:

TabStr[i] := 'FIRMSTAT'+IntToStr(i);
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: 20 Datasets verallgemeinern

  Alt 30. Okt 2003, 10:31
Aber genau da liegt doch der Hund begraben. Nicht mal das Array brauche ich. Ein Aufzählungstyp genügt. Es geht darum, wie und wo ich den gewünschten Wert zur Laufzeit setze.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#8

Re: 20 Datasets verallgemeinern

  Alt 30. Okt 2003, 14:44
Hallo Hansa,

So ganz habe ich Dein Projekt wohl nicht im Überblick, aber mit doch reichlich Wachzustand
würde ich Dir folgendes vorschlagen

1. Du nimmst zwei Forms
2. Das Statistikform enhält keine Schaltelemente, sondern nur die Anzeigeelemente für dieStatistik
3. Das Statistikform hat eine public-Funktion ShowMe( Table_No )
Die Funktion zeigt das Formular dann an
4. Du hast ein Eingabeform, das neben/ unter das Statistikform positioniert wird
Hier kann die Statistikauswahl liegen. Wird die Kundenstatitik gewählt schaltest
Du Dein Eingabefeld für Kunden auf visible und prüfst die Eingabe


Soweit zunächst. Ja - hm - Formulare ableiten ist machbar und ich gebe zu das mit sowas meine
Projekte bestreite, aber das ist ein Thema für die Zeit zwischen den Projekten. Man muß doch da einiges an Reihenfolge einhalten und die Delphi-Versionen reagieren da wohl auch nicht alle
gleich drauf. Der Aufwand für ein Tag wär dicke


Grüße aus Hannover // Martin
Martin Schaefer
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz