WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Progessbar (http://www.wcm.at/forum/showthread.php?t=55807)

NickC 08.05.2002 10:25

Progessbar
 
Hallo Leute!

Ich möchte meinem fertiggestellten Programm, dass ich in VB erstellt habe, nun ein besseres Design geben.
Dazu zählen auch Progressbar, etc.

Mich würde aber interessieren, wie Ihr einen Prozentfortschritt mit einer Tätigkeit die das Prog. ausführt (z.B Daten aus einer DB auslesen, Files kopieren, etc.) so "verknüpft", dass der "Fortschritt" auch tatsächlich eine Orientierung ist, wie lange der Vorgang noch dauert.
Ich muss dazu sagen, dass ich in diesem Fall keine Progressbar einsetze, sondern eine Picbox, die sich halt mit Pixel füllt.
Das sollte aber egal sein...
Momentan läuft es so. Vorgang ist meist schon abgeschlossen, der Balken läuft aber noch.
In manchen Samplefiles aus dem Internet, ist es genauso.

Ich hoff, die Fragestellung war jetzt nicht allzu verwirrent.

Danke für Eure Ratschläge!

Gruß
NickC

NasenBär 08.05.2002 20:35

hy!
beim auslesen einer datenbank kannst du ja z.b. mit dem recordcount und den bisher eingelesenen zeilen einen vortschritt simulieren!
genauso beim kopieren von files: anzahl der files / kopierte files

hoffe ich hab dich richtig verstanden! ;)

mfg

Sonic 08.05.2002 21:13

Noch schöner als
Zitat:

anzahl der files / kopierte files
st Größe aller Files - Kopierte Bytes :)

ps.: die Dateigröße(n) kannst du mit Filelen(Dateiname) ermitteln.

lg

Sesa_Mina 11.05.2002 01:03

Kannst auch a zeitberechnung einbaun.

am anfang der schleife (so es eine ist) zeit nehmen und merken.

in der schleife immer die zeitdifferenz checken und anhand der noch auszuführenden durchläufe die verbleibende zeit anzeigen.

NasenBär 11.05.2002 09:44

möglichkeiten gibts ja eh genug! :D

mfg

NickC 13.05.2002 14:41

@all

Danke für Eure Antworten!
Nun, eine Frage hätte ich dann aber noch.
Ich habe das ganze mal folgendermaßen ausprobiert, jedoch nicht so ganz zum gewünschten Erfolg gekommen.

CODE:
.
.
.
Set DS = New ADODB.Recordset
With DS
.ActiveConnection = CN
.Cursortype = adOpenKeyset
.Source = "SELECT * FROM Meine_Tabelle"
.Open
for i = 0 to .RecordCount

HIER KOMMT DER TEIL FÜR DIE FORTSCHRITTSANZEIGE (PROGRESSBAR)

Next i
End With
.
.
.

Das ganze klappt zwar schon. Also das ein Fortschritt angezeigt wird und danach die Daten im DataGrid.
Aber so dauert der Aufbau länger als wenn ich den Teil mit der Progressbar weglasse.
Wie ich schon sagte, wird hier die Aufbauzeit verfälscht.
Die Daten ohne Progressbar aufzubauen dauert rund 10 Sekunden.
Mit Progressbar 15 bis 20 sec.
Wie kann ich am besten die exakte Ladezeit anzeigen lassen?
Hat jemand ein Beispiel für mich?

(Kann es sein, dass man wärend dem Auslesen der DB, keine anderen Vorgänge laufen lassen kann? (Ab der Zeile .OPEN) Ich meine damit, dass die gesamte Tabelle ausgelesen wird und erst danach der Teil für den Prozentforschritt ausgeführt wird? Somit wäre klar, warum es fast doppelt so lange dauert.)

Gruß
NickC

NasenBär 13.05.2002 20:12

hy!
also bir macht es von der geschwindigkeit keinen unterschied ob ich zwischen den auslesevorgängen etwas anderes "berechne" und die datenbanken sind auf einem server! ;)
wie lautet der code für den fortschritt?

mfg

NickC 14.05.2002 09:57

Hallo NasenBär!

Ich habe jetzt mal eine ganz einfache Variante ausprobiert...
Und zwar habe ich in der FOR Schleife einfach mal nur
Progressbar1.Value = i gesetzt. Aber wenn Du mich fragst, ist der Einlesevorgang eigentlich schon abgeschlossen, bevor der "Fortschritt"
seine 100% erreicht hat. Wenn ich nähmlich diese Prozedur einem ButtonClick zuweise, tut sich mal solange nicht's, bis scheinbar die Daten eingelesen sind, dann kommt der Fortschritt und dann werden aufgrund der Zeile (in meiner 1. Mail nicht angegeben - set datagrid1.datasource = rs.recordset) die Datensätze ausgegeben.
Merken tue ich das auch deswegen, weil bis zur Fortschrittsanzeige (DB liegt auch am Server) Festplattenaktivität am Server zu erkennen ist, während des Fortschritts aber nicht.

Also ich komm da nicht so ganz klar. Mit Files kopieren habe ich auch schon probiert, da geht das eigentlich. Aber beim Auslesen von Daten...
Hmm? Ich glaub trotzdem, dass die Daten aufeinmal ausgelesen werden und das man zwischen jedem Recordset keine andere Prozedur ausführen kann, oder?

Wie machst Du das eigentlich, NasenBär?

Gruß
NickC

NasenBär 14.05.2002 18:15

hy!

ein beispiel:

CODE:

dim Feld1 as integer
dim Feld2 as integer
dim Feld3 as integer
.
.
.
Set DS = New ADODB.Recordset
With DS
.ActiveConnection = CN
.Cursortype = adOpenKeyset
.Source = "SELECT * FROM Meine_Tabelle"
.Open
redim Feld1(0 to .recordcount) as integer
redim Feld2(0 to .recordcount) as integer
redim Feld3(0 to .recordcount) as integer
.movefirst
for i = 0 to .RecordCount
Feld1(i) = .fields(0).value
Feld2(i) = .fields(1).value
Feld3(i) = .fields(2).value

HIER KOMMT DER TEIL FÜR DIE FORTSCHRITTSANZEIGE (PROGRESSBAR)

.movenext
Next i
End With
.
.

so oder so ähnlich hätte ich es gemeint! lese die daten meist in ein benutzerdefinierten typ ein!
du hattest schon recht, dass er zuerst den kompletten recordset einliest und dann erst weiter macht! ich meinte aber auch nicht den recordset sondern die datenübertragung in die variablen!
wenn du dass einlesen prüfen willst kannst du es so machen, dass du in der schleife jeweils den recordset erneuerst! dauert aber dann natürlich etwas länger, da er ja immer neu auf die datenbank zugreifen muß!

wenn du dafür ein beispiel brauchst mußt du es halt sagen!
hoffe dir weitergeholfen zu haben! ;)
mfg

NickC 15.05.2002 02:46

@Nasenbär

Danke! Hab den Code zwar noch etwas verändert, aber es klappt jetzt so wie ich mir das in etwa vorgestellt habe.
Gruß
NickC


Alle Zeitangaben in WEZ +2. Es ist jetzt 04:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag