WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 08.05.2002, 10:25   #1
NickC
Jr. Member
 
Registriert seit: 02.04.2002
Beiträge: 73


Standard 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
NickC ist offline   Mit Zitat antworten
Alt 08.05.2002, 20:35   #2
NasenBär
Master
 
Registriert seit: 01.08.2001
Beiträge: 527


Standard

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
NasenBär ist offline   Mit Zitat antworten
Alt 08.05.2002, 21:13   #3
Sonic
Master
 
Registriert seit: 28.03.2000
Alter: 45
Beiträge: 691


Sonic eine Nachricht über ICQ schicken
Standard

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
____________________________________
__________________
|»»»»»SONIC««««««|
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Sonic ist offline   Mit Zitat antworten
Alt 11.05.2002, 01:03   #4
Sesa_Mina
Schwarzfußfrettchen
 
Registriert seit: 28.01.2001
Beiträge: 2.071


Standard

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.
____________________________________
Wann die kan Almdudler ham... \"Es gibt nur einen Weg zur Lunge, und der muss geteert werden, damit der Krebs nicht stolpert!\"
http://www.dream.at/gizmo/bunny.gif
Image is © 2001 Merle
Sterndalsäg.. ähh... jäger
Sesa_Mina ist offline   Mit Zitat antworten
Alt 11.05.2002, 09:44   #5
NasenBär
Master
 
Registriert seit: 01.08.2001
Beiträge: 527


Standard

möglichkeiten gibts ja eh genug!

mfg
NasenBär ist offline   Mit Zitat antworten
Alt 13.05.2002, 14:41   #6
NickC
Jr. Member
 
Registriert seit: 02.04.2002
Beiträge: 73


Standard

@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
NickC ist offline   Mit Zitat antworten
Alt 13.05.2002, 20:12   #7
NasenBär
Master
 
Registriert seit: 01.08.2001
Beiträge: 527


Standard

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
NasenBär ist offline   Mit Zitat antworten
Alt 14.05.2002, 09:57   #8
NickC
Jr. Member
 
Registriert seit: 02.04.2002
Beiträge: 73


Standard

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
NickC ist offline   Mit Zitat antworten
Alt 14.05.2002, 18:15   #9
NasenBär
Master
 
Registriert seit: 01.08.2001
Beiträge: 527


Standard

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
NasenBär ist offline   Mit Zitat antworten
Alt 15.05.2002, 02:46   #10
NickC
Jr. Member
 
Registriert seit: 02.04.2002
Beiträge: 73


Standard

@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
NickC ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:41 Uhr.


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