Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Das große WIE, Chart aktuallisieren, Daten in textfiles (https://www.delphipraxis.net/114821-das-grosse-wie-chart-aktuallisieren-daten-textfiles.html)

Stecky2000 1. Jun 2008 09:05


Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Ich hoffe ich poste hier an der richtigen Stelle, ich fand es recht passend.

Nun, ich habe, z. T. auch mit eurer Hilfe, ein Dienstplanprogramm geschrieben.
Ich habe mit MDI-Forms gearbeitet, mit StringGrids, mit import und export über (StringGridx.Rows[i].commatext), dynamische menüs, nachträgliche Bearbeitung von StringGridzellen über ownerdraw etc..

Klar, für Euch ist das peanuts, aber ich bin kein Programmierer, da bin ich schon recht stolz drauf.

Jetzt brauche ich aber einen kleinen Schubs in die richtige Richtung.

Also...

Ich habe in meinem Proggi z. B. 80 verschiedene Dienstpläne. Insgesamt werden damit ca. 2000 MA verplant.
Ich möchte eine Chart aufbauen in der ein Gebirge (Bedarfskurve) dargestellt wird und darüber die von den 80 Dienstplänen generierte Abdeckung in einer weiteren Linie.

Sowas hab ich schon mal gemacht, sollte kein Problem sein.

Das Problem liegt eher darin, dass die Daten für diese Dienstplanabdeckung z. Z. noch in eben der 80 Textfiles mit den Dienstplandaten liegen, mit Kommas getrennt.

Ich benutze keine Datenbanken, sondern nur diese Textfiles. Das soll auch möglichst so bleiben, da in unserem Betrieb kein BDE installiert werden kann (darf).

Jetzt die Große Frage:

Was für ein Aufbau wäre sinnvoll, um die Daten für die Grafik so schnell wie möglich bei Änderung eines einzelnen Dienstplanes neu zu berechnen?

Ich habe schon überlegt eine Routine zu schreiben, die aus z. B. einem Ini-file die Namen aller Dienstpläne nimmt und diese einzeln läd um die dortigen Abdeckungswerte im 5-Minuten-Raster einzulesen und zu addieren bis alle Pläne durch sind.

Nur hab ich den Verdacht, das wird zu langsam sein ( 80 Dienstpläne á 7 Kurven(Tage) mit 288 Zeilen)...

Sonst hätte ich noch die Idee, 7 Textfiles aufzubauen, für jeden Wochentag eins, und aus jedem Plan dort die Werte rein zu schreiben. Da ich eh nur einen Tag in der Grafik anzeige, brauche ich auch nur Daten für einen Tag. Hier weis ich nicht, wie ich damit umgehen kann, für jeden Plan eine Splate zu zuweisen. Wenn ich eine Plan lösche, müsste auch die Spalte eliminiert werden.

Also, ich hoffe Ihr versteht das Problem und könnt mir einige Tipps zur Entscheidungsfindung geben.

Danke schon mal.

mkinzler 1. Jun 2008 09:32

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Von der BDE würde ich sowieso abraten. Dein Problem schreit aber nach einer Datenbank.

In einer ordentlichen Datenbankstruktur kann man dann einfach Daten aus verschiedenen Dienstplänen zusammenfassen (pro Tag, pro MA, pro Dienstplan, pro ..)

marabu 1. Jun 2008 11:32

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Moin.

Die Entscheidung zwischen Textdateien und Datenbank ist nicht von der BDE-Installation abhängig. Werden die Daten direkt in den Textdateien bereit gestellt, dann bedeutet die Umstellung auf eine Datenbank, dass ein DB-Client erstellt werden muss, der die Pflege der Daten in der Datenbank möglich macht. Ansonsten gibt es genügend DB-Lösungen, die flexible Auswertungen per SQL zulassen, ohne dass eine Installation notwendig wird.

Auch wenn es weiter Textdateien sein sollen, dürfte es eigentlich kein Performanz-Problem geben. Ich würde die Anzeige nicht im Takt erneuern, sondern nur dann, wenn eine der Eingabedateien verändert wurde. Du könntest das Verzeichnis im Dateisystem über eine Programmfunktion überwachen lassen. Das Betriebssystem benachrichtigt dich sofort, wenn eine Datei verändert wurde.

Lesestoff: Obtaining Directory Change Notifications

Mit den einzelnen Funktionen als Suchworten in der DP findest du Code-Beispiele.

Freundliche Grüße

bluesbear 3. Jun 2008 19:49

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Hallo Stecky2000,
Zitat:

Zitat von Stecky2000
(...)Klar, für Euch ist das peanuts, aber ich bin kein Programmierer, da bin ich schon recht stolz drauf.(...)

Kein Programmierer zu sein? :mrgreen:
Ok ok, sorry.
Das einlesen von Textdateien ist sauschnell. Keine Frage, so kann man das machen.

Ich würde bei der Datenmenge sehr empfehlen, auf eine Datenbank, die Abkömmlinge von TDataSet mit sich bringt, umzusteigen.
Da geht das mit dem Update von daran angeknipperten grafischen Komponenten (meist völlig) automatisch. Du würdest dir eine Menge Arbeit ersparen, sofern ich deine Frage richtig verstanden habe.

Meine persönliche Empfehlung wäre Firebird und FibPlus.

Stecky2000 4. Jun 2008 07:36

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Hallo,


sorry dass ich so lange gebraucht habe um zu antworten.
Ich habe gerade Urlaub und habe mehr Stress als wenn ich arbeiten gehe :-(

Nun, wen marabu meint, es würde keinen Einfluss auf die Performance haben, wenn ich aus Textfiles einlese, dan will ich es so versuchen.

Ich habe schon öfter unter Delphi was mit Datenbanken gemacht, mit Paradox, mit Interbase und auch schon mit Oracle. Natürlich auch mit SQL, aber, ich will ein Programm haben, welches ich ohne BDE oder sonstigen Firlefanz mit samt seiner verzeichnisstruktur irgendwo hin kopiere und es ist alles da und funktioniert.

Ich denke, ich werde dazu bestimmt die Hilfe aus diesem Forum brauchen.

Ich habe mir überlegt, die Textfiles für die Tagesganglinien in Strukturen abzulegen, die es ermöglichen, immer nur Teile der Gesamtkurven bei Veränderung neu einzulesen.

Z.B.:

7 Gesamtkurven (7 Tage)
4 x 7 Teilkurven (4 Abteilungen, 7 Tage)
Pro Abteilung 3 Teilkurven x 7 Tage (Stamm, Fremd und Sonderpersonal)

Jetzt muss ich eine Logik entwickeln, die feststellt in welchem Bercih Änderungen statgefunden haben und welche Kurven neu berechnet werden müssen.

Desweiteren brauche ich vorher ein Logik, wie einzelne Dienstpläne in den Abteilungs-Textfiles gepfelgt werden. Sprich Wie wird dort beim Erstellen eines neuen Dienstplanes eine neu Spalte angelegt und fest mit dem Namen des Dienstplanes verdrahtet und wie wird diese Spalte beim Löschen eines Dienstplanes wieder geleert und freigegeben.

Viel Arbeit.

Über Tipps zu den Abteilungsdatenpfelgen wäre ich dankbar. Zur Zeit denke ich über ini-Files nach.

EDIT: sorry habe den letzten Post nicht gesehen:

Firebird und FBPlus habe ich noch nie gehört. Kann man das ohne zusätzliche Installationen wie BDE betreiben? Ist das Freeware?

mkinzler 4. Jun 2008 07:43

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Wie gesagt gibt es andere besseres wie die BDE. Teilweise auch ohne Installation

Hansa 4. Jun 2008 08:10

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Tip von Bluesbear nicht gesehen ? Die anderen auch nicht ? Statt Textfile Ini-Files ? Ist leider dasselbe. :mrgreen:

bluesbear 4. Jun 2008 15:40

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Zitat:

Zitat von Stecky2000
Firebird und FBPlus habe ich noch nie gehört. Kann man das ohne zusätzliche Installationen wie BDE betreiben? Ist das Freeware?

Firebird ist der Open Source Nachfolger von Interbase (Freeware), und kommt in der embedded Variante ohne Installation aus. Da muß nur eine DLL mit ins Programmverzeichnis.
FIBPlus ist eine Komponentensammlung (Querys und so) um darauf zuzugreifen. Leider kostet das was.

Du könntest versuchen, mit den Delphi-Interbase Komponenten auf Firebird zuzugreifen. Mit ein paar Einschränkungen sollte das gehen.

Stecky2000 4. Jun 2008 15:51

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Danke Bluesbear!

Ich versuche das ganze für mich ohne Kosten umzusetzen, ich weis ja gar nicht, ob meine Firma überhaupt gefallen an meinem Proggi findet.

Heut zu Tage träumen alle nur von "Intelligenten" Programmen mit "Optimierungsfunktionen" und mein Tool soll ja bloß einem Fachmann in seinem Bereich, in seiner Firme, in seiner Abteilung, das Erstellen von Dienstplänen und die Beurteilung der Effizienz komfortabel ermöglichen. Die Intelligenz kommt vom User...

Tja, deshalb auch die Textfiles. Ansonsten hätte ich die BDE und Paradox nehmen könne, da gibt es dann die Installationsprobleme (keine Rechte, keine von der Firma abgenommene Software).


Zu meiner Idee mit den Ini-Files...

Ich meinte es so:

- Inhalte der Dienstpläne befinden sich in Textdateien mit Endung .dpl.
- Daten für Kurven befinden sich z. B. in Textfiles wie z. B. Montag.KUR, Dienstag.KUR etc.
- In den Kurvendateien (Montag.KUR) gehört jede Spalte einem Dienstplan, diese werden bei Neuanlage eines Dienstplanes zugewiesen.
- In einem Ini-File steht drin, welchem Dienstplan, welche Spalte im der Kurvendatei gehört.

Liege ich komplett daneben, erfinde ich da völligen Quatsch?
Wenn dem so ist und der Weg definitiv nicht an einer Datenbank vorbei geht...

Gibt es keinen Weg Paradox-.db Dateien ohne BDE zu nutzen?

bluesbear 4. Jun 2008 16:39

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Es muß ja nicht unbedingt Paradox sein. Ich habe spasseshalber ein wenig gegoogelt, vielleicht hilft dir ja das weiter:
http://www.wlsoft.de/delphi/index_0011.html

mkinzler 4. Jun 2008 18:29

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Zitat:

Ich versuche das ganze für mich ohne Kosten umzusetzen, ich weis ja gar nicht,
FireBird: OS -> Keine Kosten
IBX bei Delphi dabei -> keine Kosten
oder Zeos: OS -> Keine Kosten

Hansa 4. Jun 2008 23:01

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Zitat:

Zitat von Stecky2000
..Liege ich komplett daneben, erfinde ich da völligen Quatsch?
Wenn dem so ist und der Weg definitiv nicht an einer Datenbank vorbei geht...

Sieht fast so aus.

mkinzler 5. Jun 2008 07:23

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Zitat:

Wenn dem so ist und der Weg definitiv nicht an einer Datenbank vorbei geht...
Man kann das auch ohne machen, aber mit einer großen Mehraufwand. Da du ja schon mit Datenbanken gearbeitet hast und dich jetzt mit Textdateien rumplagst, wirst du das ja gemerkt haben

Stecky2000 5. Jun 2008 09:46

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Ist schon klar...

Nur, wenn man das ganze schon ohne DB aufgebaut hat, liegt der Mehraufwand in dem Umschreiben auf DB.

Ich glaube, ich werde es so versuchen:

Ich speichere weiterhin die Dienstpläne in Textfiles und versuche die Resultate daraus, sprich die Kurvendaten, in eine DB zu speichern.Jetzt muss ich aus Euren vielen Angeboten das beste raussuchen, sprich das wo ich am einfachsten durchblicke.

Zur Zeit gefällt mit gut die Lösung aus dem Internet-Link von Bluesbear.

Mal schauen, ob ich da durchblicke. Muss mich mal einlesen und ein paar Tests machen.

mkinzler 5. Jun 2008 09:49

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Einmal auf DB umgestellet und in Zukunft weniger Ärger, bei höherer Flexibilität.

Stecky2000 5. Jun 2008 13:44

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Also bisher sehe ich den Wald vor lauter Bäumen nicht mehr....

Ich bin jetzt doch auf Firebird umgeschwenkt.

Habe mir die 2.1 Embeded geladen und in ein Neues Projekt eingefügt, so wie es in der Embedes Anleitung steht, dabei die fbembded.dll in fbclient.dll umbenannt und auch als gds32.dll kopiert.

IM Projekt habe ich die Komponenten IBDataBase, IBTable und IBTransaction auf das Formular gelegt und einen Button angefügt mit dem Code:

[delphi]
IBDatabase1.DatabaseName := 'I:\Delphi_Tests\Firebird_IBX_Test\Test.fdb');
IBDatabase1.Params.Add('USER ''SYSDBA''');
IBDatabase1.Params.Add('PASSWORD ''masterkey''');
IBDatabase1.Params.Add('PAGE_SIZE 4096');
IBDatabase1.Params.Add('DEFAULT CHARACTER SET WIN1250');
IBDatabase1.CreateDatabase;
[delphi/]



Wenn ich den Button drücke kommt beim CreateDatabase die Fehlermeldun, dass eine Exception der Klasse EIBInterbaseError aufgetreten sei, Meldung: Dynamic SQL Error, AQL Error Code=-104, Token unknown - Line 1, Column 62, user_name.

Da ich 'user' definiert habe, kann es sein dass die Firebird 2.1 da nicht mit IBDataBase zusammen passt?

mkinzler 5. Jun 2008 13:47

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Lass mal die Quotes "" weg. Diese bedeuten was anderes

Hansa 5. Jun 2008 13:53

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Du machst mehrere Fehler auf einmal. Du willst hoffentlich kein Programm schreiben, um eine DB anzulegen ? :shock: Das geht mit IBExpert in 2 Sek. Ansonsten gibts nur mehr Ärger. Wenn sie da wäre, dann wird wieder programmiert statt das, was sich nicht dauernd ändert im OI einzustellen oder besser noch aus INI zu lesen. Dann noch die IBX. Sofern ein Projekt größere Anforderungen hat, dann sind die mit Vorsicht zu genießen. IB <> FB. Kein ISO-Zeichensatz ?

Stecky2000 5. Jun 2008 14:15

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Mal ganz langsam.. ;-)

Ich wollte mit dem Quelltext eine Datenbank anlegen und danach Tabellen einfügen.
IBExpert kenne ich nicht, sonst hätte ich mir den Code sicher gespart.

Ich habe Delphi 5 Enterprise oder Client/server.

Desweiteren habe ich bereits gelesen, das IBX mit Firebird bei größeren Dingen probleme bereiten könnte. Ich hoffe, meine Sache ist nichts großes, es sei denn Ihr sagt mir was anderes.

Letztendlich will ich ja nur Daten in Tabellen eintragen, addieren und lesen.

Ich bin ja nun erst am Testen, gar nicht an meinem eigentlichen Programm.
Wenn IBX so problematisch ist, wäre Zeos noch eine Alternative.

mkinzler 5. Jun 2008 14:21

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Für deinern Fall sollte IBX reichen. IBExpert ist ein Admin-Tool, von welchem es auch eine kostenlose Variante gibt

Hansa 5. Jun 2008 14:26

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Du sollst ja die gelieferten Stichworte aufgreifen und auswerten. :stupid: Lade dir also IBExpert und die DB steht in 2 Sek. IBX ist momentan nicht so wichtig. Kann es aber werden. Verwende besser FIBplus. Gibt auch noch andere Komponenten, aber die sind nicht so spezialisiert auf IB/FB.

Stecky2000 6. Jun 2008 20:58

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
So, IBExpert beschafft, als Personal Edition.
Datenbank angelegt.
TestTabelle angelegt.

Soweit so gut. An sich nichts besonderes.
Läuft nahezu wie unter Interbase mit dem SQLExplorer.

Das bedeutet, ich werde jetzt noch ein wenig weitertesten, sprich Beispieldaten einpflegen und dann das ganze Progrämmchen auf einen anderen PC kopieren, der kein delphi, BDE, Firebird oder sonst eine Datenbank besitzt.

Wenn da alles läuft wie es soll, dann versuche ich mich wieder am Dienstplanprogramm und es wird wahrscheinlich wieder Fragen regnen.

Ich hoffe, es ist Euch genehm.

Eigentlich will ich gar nicht so viele Sachen zu Quellcoden wissen, sondern eher zu Vorgehensweisen.
Da habt Ihr mir ja Jahrhunderte voraus und wisst wie man bestimmte Belange angeht und wie eben nicht und auch warum.

Also, ich melde mich wieder.

Hansa 6. Jun 2008 21:03

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Zitat:

Zitat von Stecky2000
...und dann das ganze Progrämmchen auf einen anderen PC kopieren, der kein.. Firebird oder sonst eine Datenbank besitzt...

Nene. :shock: So einfach geht das aber jetzt auch nicht. Was soll ohne DB denn getestet werden ? :mrgreen:

Stecky2000 6. Jun 2008 21:19

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Ich denke, mit den paar Firebird-Embedde Files und dem Datenbank File im Programm-Ordner soll das gehn?
Dafür mache ich mir doch den Aufwand.

Habe ich Euch etwa falsch verstanden?

mkinzler 6. Jun 2008 21:21

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Ohne Datenbank (fdb) geht es trotzdem nicht :zwinker:

Hansa 6. Jun 2008 21:29

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Du meinst ohne Installation der Firebird-embedded-Files usw. ? Also ohne "damit die Änderungen wirksam werden muss der Rechner..." und solchen Firlefanz ? Doch, das geht schon. Lediglich durch kopieren der benötigten Dateien. Aber noch was : mache das nicht in der Entwicklungsphase !! Mit embedded kann nur einer auf die DB-Daten zugreifen. Dazu gehört auch IBExpert, Delphi und auch Dein eigenes Programm !! Das gibt definitiv Ärger so was mit FB embedded zu entwickeln/testen :!:

Stecky2000 6. Jun 2008 21:39

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Nee, dann is doch klar.

Ich habe im Programm-Ordner meines Testprgs die Dateien:

fbclient.dll
gds32.dll
ib_util.dll
die icuxxx.dlls
firebird.msg
firebird.conf

und natürlich die

Testdb.fdb

Das mit den Singlezugriff weis ich, dabin ich bereits drüber gestolpert.
Was wäre denn der Vorschlag für die Entwicklung?

Gibt es die nicht_embedded auch FREE?

mkinzler 6. Jun 2008 21:41

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Ja, FireBird ist OS und kann ohne Einschränkung auch kommerziell eingesetzt werden

Stecky2000 6. Jun 2008 21:44

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Na dann mach ich mich gleich auf die Reise und besorge in den Weiten des Internets die große Version von Firebird.

mkinzler 6. Jun 2008 21:51

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
http://ibphoenix.com/main.nfs?a=ibph...e=ibp_download

Stecky2000 6. Jun 2008 22:00

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Danke, habs schon geholt und auch schon installiert.

Es funktioniert bereits.

Das bedeutet, ich mach jetzt auf dieser Umgebung weiter und kopiere es später mit der embedded auf einen anderen Rechner zum Testen.

Ich will ja den Beweis sehen, dass es tatsächlich ohne DB-Installation geht, als Single-User versteht sich. :-D

mkinzler 6. Jun 2008 22:11

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Das funktioniert, da im embedded-(Server-)Client ein Server steckt

Stecky2000 11. Jun 2008 08:48

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Da bin ich wieder mit einer Frage zu StringGrid, DBGrid und DB.

Was macht am meisten Sinn, unter besonderer Berücksichtigung der Performance?

Daten in ein Array bzw. StringGrid berechnen und dann in eine DB (Firebird) zu schieben,
oder
die Daten direkt in ein BDGrid und somit in die DB zu schieben?

Es ist so, ich habe in einem Dienstplan verschiedene Anfangs- und Endzeiten.
Nicht alle sind mit Personal belegt. Also fahre ich mit Schleifen über die Belegung,
die Uhrzeiten und die Tage und trage entsprechend Daten, derzeit in ein StringGrid ein.

Derzeit vergleiche ich die Uhrzeit im StringGrid.Spalte0 (5-Minuten-Raster) mit den den Anfangs- und Endzeiten der belegten Dienstzeit und trage ein oder eben nicht.

Ich könnte mir vorstellen, dass das auf DBGrid, sprich DB länger dauert als im StringGrid mit anschliessenden kompletten Schreiben in die DB.

Ist das so, oder liege ich falsch und es macht von der Performance nichts aus?

EDIT: sollte ich diese Frage in einen Datenbank.Thread verschieben?

mkinzler 11. Jun 2008 08:59

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Daten direkt in Datenbank scheiben, das Grid wird dann entsprechend aktualisiert.

Stecky2000 11. Jul 2008 17:36

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
So, hat lange gedauert, aber nuu....

Hab schon wieder Probleme, wie schon geahnt.

Also....

Ich Hab zur Überprüfung und Visualisierung ein StringGrid genommen.
Mit einer Schleife lese ich x Textdateien ein in denen für 7 Tage (7 Spalten), in ca. 288 Zeilen Abdeckungswerte und in weiteren 288 Zeilen Bedarfswerte stehen, nacheinander ein und addiere die Werte nach Tag, 5-Minuten-Interval und Bedarf oder Abdeckung.

Danach hab ich also meine Ergebnisse von x Dienstplänen in eine StringGrid

Dieses ganze Einlesen der Textdateien und die Berechnung mit reinschreiben ins StringGrid dauert (visible := False) unter einer Sekunde. Das ist Toll.

Aber, wenn ich die Werte dann Zeile für Zeile, Spalte für Spalte in die Datenbank schreibe, das dauert dann ca. 10 Sekunden und das ist mir definitiv zu lang.

Ich mach das so:

Delphi-Quellcode:
     
     IBTable1.First;
     For i := 25 to 288 do
     begin
          IBTable1.Edit;
          IBTable1['AGRPMo']:= StrToFloat(StringGrid2.Cells[1, i]);
          IBTable1['AGRPDi']:= StrToFloat(StringGrid2.Cells[2, i]);
          IBTable1['AGRPMi']:= StrToFloat(StringGrid2.Cells[3, i]);
          IBTable1['AGRPDo']:= StrToFloat(StringGrid2.Cells[4, i]);
          IBTable1['AGRPFr']:= StrToFloat(StringGrid2.Cells[5, i]);
          IBTable1['AGRPSa']:= StrToFloat(StringGrid2.Cells[6, i]);
          IBTable1['AGRPSo']:= StrToFloat(StringGrid2.Cells[7, i]);
          IBTable1['ZGRPMo']:= StrToFloat(StringGrid2.Cells[8, i]);
          IBTable1['ZGRPDi']:= StrToFloat(StringGrid2.Cells[9, i]);
          IBTable1['ZGRPMi']:= StrToFloat(StringGrid2.Cells[10, i]);
          IBTable1['ZGRPDo']:= StrToFloat(StringGrid2.Cells[11, i]);
          IBTable1['ZGRPFr']:= StrToFloat(StringGrid2.Cells[12, i]);
          IBTable1['ZGRPSa']:= StrToFloat(StringGrid2.Cells[13, i]);
          IBTable1['ZGRPSo']:= StrToFloat(StringGrid2.Cells[14, i]);
          IBTable1.Post;
          IBTable1.Next;
     end;
Wobei ich noch eine zweite Schleife For i := 1 to 25 verwende, weil ich statt von 00:00 bis 23:55, von 02:00 bis 02:00 des Folgetages verwende.

Gibts eine schnellere Methode die Daten in die Datenbank zu bekommen?

Hansa 11. Jul 2008 17:51

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Zitat:

Zitat von Stecky2000
... StringGrid dauert (visible := False) unter einer Sekunde. Das ist Toll.

Aber, wenn ich die Werte dann Zeile für Zeile, Spalte für Spalte in die Datenbank schreibe, das dauert dann ca. 10 Sekunden und das ist mir definitiv zu lang.

Gibts eine schnellere Methode die Daten in die Datenbank zu bekommen?

Du hast den Flaschenhals doch schon selber entdeckt. :shock: Es ist die visuelle Darstellung durch Windows. Wenn ein Grid permanent aktualisiert werden soll, dann ist mit Verlangsamungs-Faktor 10-100 zu rechnen, zumindest gegenüber der Darstellung im Hintergrund und dann .Show aufzurufen. 8)

P.S.: 200 Datensätze sind fast schon lächerlich. Das wäre in einer kompletten Sek. schon recht langsam.

Stecky2000 11. Jul 2008 18:08

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Ich glaube, ich habe mich missverständlich ausgedrückt.

Zur Zeit nutze ich das StringGrid zur Kontrolle und quasi als gefaketes Array.

Ich kann mittels eines Button die Sichtbarkeit des StringGrids aus und einschalten.

Die Berechnungen finden mit "visible := false" statt.

Wenn ich die Daten vom StringGrid in die Datenbank kopiere, ist das StringGrid ebenfalls "visible := false".

Sprich, die ständigen Aktualisierungen finden nicht statt.

Die Datenbank/Tabelle im Firebird hat noch keine Anzeigemöglichkeit.
Die Inhalte schaue ich mir mit IBExpress an.

Wo ist also der Flaschenhals mit der Sichtbarkeit?

M. E. ist es auch nicht die StrinGrig Komponente, den die beschreibe ich unter einer Sekunde bestimmt 10 - 20 mal (so viele Dienstpläne).

Der Schreibvorgang in die Tabelle der Datenbank ist langsam.

Ich hätte jetzt eigentlich erwartet, wie gesagt ich bin kein Programmiere und schiesse entsprechende Pudel, das mir einer sagt:"so wie Du das da reinschreibst ist es zu aufwendig, langsam etc..."

Da das noch nicht fiel, sondern auf die Sichtbarkeit der Komponenten, fange ich an zu glauben, dass
a) mein PC/Festplatte zu langsam ist
b) die Firebird zu langsam ist
c) es kommt doch noch was anderes.

Auf jeden Fall danke ich dir (Hansa) für die schnelle Antwort.
Ich bin echt suuuper neugierig wie ich das ganze noch beschleunigen kann.

Was würde es eigentlich bringen, wenn ich die StrinGrid durch ein Array ersetze?

Hansa 11. Jul 2008 18:18

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Zitat:

Zitat von Stecky2000
..Was würde es eigentlich bringen, wenn ich die StrinGrid durch ein Array ersetze?

Nichts bemerkbares. Du musst aber mehr zeigen, um der Ursache auf den Grund zu gehen. Wahrscheinlich ist das Stringgrid doch nicht auf unsichtbar gesetzt. Glaubs jedenfalls mal nicht. :mrgreen:

Stecky2000 11. Jul 2008 19:56

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
:-D Wie soll ich Dir das denn beweisen, dass die visable - Option auf False gesetzt ist?

Ich will doch hier niemand veräppeln.

Ich habe ein Formular auf das ich rein testweise ein Button gesetzt habe, mit folgendem Inhalt:

Delphi-Quellcode:

procedure TMainForm.Button2Click(Sender: TObject);
var
i: Integer;

begin
     StringGrid2.Visible := False;

     IBDatabase1.Connected := True;
     IBTable1.TableName := 'B1KUR';
     IBTable1.Active := True;
     IBTable1.First;
     For i := 25 to 288 do
     begin
          IBTable1.Edit;
          IBTable1['AGRPMo']:= StrToFloat(StringGrid2.Cells[1, i]);
          IBTable1['AGRPDi']:= StrToFloat(StringGrid2.Cells[2, i]);
          IBTable1['AGRPMi']:= StrToFloat(StringGrid2.Cells[3, i]);
          IBTable1['AGRPDo']:= StrToFloat(StringGrid2.Cells[4, i]);
          IBTable1['AGRPFr']:= StrToFloat(StringGrid2.Cells[5, i]);
          IBTable1['AGRPSa']:= StrToFloat(StringGrid2.Cells[6, i]);
          IBTable1['AGRPSo']:= StrToFloat(StringGrid2.Cells[7, i]);
          IBTable1['ZGRPMo']:= StrToFloat(StringGrid2.Cells[8, i]);
          IBTable1['ZGRPDi']:= StrToFloat(StringGrid2.Cells[9, i]);
          IBTable1['ZGRPMi']:= StrToFloat(StringGrid2.Cells[10, i]);
          IBTable1['ZGRPDo']:= StrToFloat(StringGrid2.Cells[11, i]);
          IBTable1['ZGRPFr']:= StrToFloat(StringGrid2.Cells[12, i]);
          IBTable1['ZGRPSa']:= StrToFloat(StringGrid2.Cells[13, i]);
          IBTable1['ZGRPSo']:= StrToFloat(StringGrid2.Cells[14, i]);
          IBTable1.Post;
          IBTable1.Next;
     end;

     For i := 1 to 25 do
     begin
          IBTable1.Edit;
          IBTable1['AGRPMo']:= StrToFloat(StringGrid2.Cells[2, i]);
          IBTable1['AGRPDi']:= StrToFloat(StringGrid2.Cells[3, i]);
          IBTable1['AGRPMi']:= StrToFloat(StringGrid2.Cells[4, i]);
          IBTable1['AGRPDo']:= StrToFloat(StringGrid2.Cells[5, i]);
          IBTable1['AGRPFr']:= StrToFloat(StringGrid2.Cells[6, i]);
          IBTable1['AGRPSa']:= StrToFloat(StringGrid2.Cells[7, i]);
          IBTable1['AGRPSo']:= StrToFloat(StringGrid2.Cells[1, i]);

          IBTable1['ZGRPMo']:= StrToFloat(StringGrid2.Cells[9, i]);
          IBTable1['ZGRPDi']:= StrToFloat(StringGrid2.Cells[10, i]);
          IBTable1['ZGRPMi']:= StrToFloat(StringGrid2.Cells[11, i]);
          IBTable1['ZGRPDo']:= StrToFloat(StringGrid2.Cells[12, i]);
          IBTable1['ZGRPFr']:= StrToFloat(StringGrid2.Cells[13, i]);
          IBTable1['ZGRPSa']:= StrToFloat(StringGrid2.Cells[14, i]);
          IBTable1['ZGRPSo']:= StrToFloat(StringGrid2.Cells[15, i]);
          IBTable1.Post;
          IBTable1.Next;
     end;


end;

Extra da mit Du es glaubst habe ich die Zeile: "StringGrid2.Visible := False;" eingebaut.
Es ändert nichts. Ich hatte die Visability bereits im Objektinspektor disabled.

Und genau dieser Buttonclick dauert ca. 10 Sekunden. Nichts mehr.

Hansa 11. Jul 2008 20:27

Re: Das große WIE, Chart aktuallisieren, Daten in textfiles
 
Edit/Post muss reichen. Das wird am Next liegen. 10 Sek. ist einfach zu viel.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:25 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz