![]() |
![]() |
|
|
|||||||
| Programmierung Rat & Tat für Programmierer |
![]() |
|
|
Themen-Optionen | Ansicht |
|
|
#1 |
|
Jr. Member
![]() Registriert seit: 02.04.2002
Beiträge: 73
|
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 |
|
|
|
|
|
#2 |
|
Master
![]() Registriert seit: 01.08.2001
Beiträge: 527
|
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 |
|
|
|
|
|
#3 | |
|
Master
![]() |
Noch schöner als
Zitat:
![]() ps.: die Dateigröße(n) kannst du mit Filelen(Dateiname) ermitteln. lg
____________________________________
__________________ |»»»»»SONIC««««««| ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ |
|
|
|
|
|
|
#4 |
|
Schwarzfußfrettchen
![]() Registriert seit: 28.01.2001
Beiträge: 2.071
|
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
|
|
|
|
|
|
#5 |
|
Master
![]() Registriert seit: 01.08.2001
Beiträge: 527
|
möglichkeiten gibts ja eh genug!
mfg |
|
|
|
|
|
#6 |
|
Jr. Member
![]() Registriert seit: 02.04.2002
Beiträge: 73
|
@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 |
|
|
|
|
|
#7 |
|
Master
![]() Registriert seit: 01.08.2001
Beiträge: 527
|
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 |
|
|
|
|
|
#8 |
|
Jr. Member
![]() Registriert seit: 02.04.2002
Beiträge: 73
|
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 |
|
|
|
|
|
#9 |
|
Master
![]() Registriert seit: 01.08.2001
Beiträge: 527
|
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 |
|
|
|
|
|
#10 |
|
Jr. Member
![]() Registriert seit: 02.04.2002
Beiträge: 73
|
@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 |
|
|
|
![]() |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|