Hallo Leute,
noch ein kleines Problem vor Ostern...
Ich habe ein ungebundenes Formular, das beim Öffnen eines anderen Formulars aufgerufen werden soll, um einige Daten zu laden.
In diesem Formular habe ich einen Fortschrittsbalken.
Wenn ich das Formular mit Doppelklick öffne, wird es erst angezeigt, wenn 100% erreicht ist.
Ich hab schon alles probiert: load, current, activate afterrender usw.
Immer das gleiche.
Im Laden-Modul hab ich auch schon eine msgbox eingebaut (alle 10%). Die erscheint auch, aber mein Formular nicht.
Also grob hab ich folgendes:
Im form "Daten laden":
private sub form_load()
...
call LoadData(me.name, "rctBalken", intmaxwidth)
...
und im Modul LoadData:
public sub LoadData(sform as string, scontrol as string, imax as integer)
...
if i mod 10 = 0 then
forms(sform).controls(scontrol).width=i
msgbox "ok"
endif
...
Ich kriege nur die msgbox zu sehen, mein form aber erst, wenn alles geladen ist (100%).
Und noch was andres:
Ich habe einen adodb-recordset
.recordcount liefert aber immer -1
auch nach .movelast
Naja, vlt etwas zuviel gefragt vor Ostern...
Hallo,
mal etwas provozierend geantwortet:
Wer zum Öffnen eines Formulars (um einige Daten zu laden) einen Fortschrittsbalken braucht hat was falsch gemacht. ;D
Wie viele Datensätze werden denn im Formular angezeigt ?
Warum verwendest Du kein gebundenes Formular zur Anzeige?
Danke für die schnelle Antwort.
Also es ist so:
ich habe verschiedne gebundene forms. Jedes braucht ein paar generelle Daten. In jeden deiser forms möchte ich das Laden-Formular aufrufen um sicherzustellen, dass die generellen Daten auch geladen sind oder werden. Das sind statusinfos von fast 100 Messstellen, die ich aber nicht anzeige, sondern nur in einem globalen oder public feld speicher, damit ich sie im eigentlichen form benutzen kann ohne sie jedesmal neu zu laden.
Hallo,
irgendwie verstehe ich das nicht. Du brauchst doch vorbeugend kein Daten zu laden ?
ZitatDas sind statusinfos von fast 100 Messstellen,
wie sieht denn die Tabelle dazu aus ?
Die Statusdaten sind nicht in einer Tabelle. Es sind einzelne Dateien.
Ist ja auch nicht wichtig. Wichtig ist ja nur die Frage, wie ich mein Laden-Info-Formular anzeigen kann, bevor irgendwelche eigenen Lade-vorgänge ablaufen, damit ich den Fortschrittsbalken anzeigen kann.
Hallo crystal,
Vielleicht hilft ein DoEvents in LoadData.
Zitat.recordcount liefert aber immer -1
Bin mir nicht sicher, und habe jetzt auch keine Lust es zu suchen,
aber ich glaube, dass das bei ADO der Standard ist bei einer leeren
Ergebnismenge.
gruss ekkehard
Danke für die Idee, aber doevents hatte ich auch schon probiert, auch mehrfach - klappt nicht.
-1 für leerer Datenmenge wäre ja ok, aber die Datenmenge ist definitiv nicht leer.
strdb="select * from tbltest;"
rstDB.Open strDB, , adOpenDynamic, adLockReadOnly
rstdb.recordcount 'liefert immer -1
i=0
do until rstdb.eof
i=i+1
rstdb.movenext
liefert z.B. 124
Hallo,
Zitat von: crystal am März 26, 2016, 20:42:22wird es erst angezeigt, wenn 100% erreicht ist.
mit Einsatz der Repaint-Methode kannst du die Anzeige des Formulars in der Verarbeitungsschleife aktualisieren.
Hi Maggie,
funktioniert nicht, weil das Formular ja leider noch nicht gepainted ist. Ist es gepainted, ist mein Fortschrittsbalken schon auf 100% und dann bringt repaint auch nichts mehr.
Gruß
Vielleicht weiß jemand die zeitliche Reihenfolge von form-events.
load
current
...
<anzeigen> ???
...
close
Ich brauch ja nur im richtigen event meine lade-funkton aufrufen. Aber ich finde den richtigen event nicht. Auch setfocus hat nicht geklappt.
Oder soll ich das form an eine Dummy-Tabelle binden?
Ich habe die Lösung gefunden:
Me.visible = true
Zeigt das Formular an.
So einfach. Hätte ich nicht vermutet.
Das Thema ist damit erledigt.
Vermutlich hast du den Tipp mit dem Repaint einfach nur falsch umgesetzt, bei mir hat das immer funktioniert.
Aber du hast ja auch nicht näher erklärt, wie das alles zusammenhängt, bspw. wie und woher das Formular geöffnet wird und wo der Code ausgeführt wird.
Es lohnt sich also, etwas mehr Zeit (und Worte) in die Problembeschreibung zu investieren, um möglichst ohne Umwege dazu passende Antworten zu erhalten.
Maggie,
frohe Ostern erstmal!
Dein letzter Kommentar ist ziemlich überflüssig.
Hättest du selbst etwas mehr Worte benutzt, um deinen repaint-tipp zu beschreiben, hätte man das vlt. auch umsetzen können. Wenn du also forderst oder darum bittest, Probleme genauer zu beschrieben, geht dieselbe Bitte an dich: beschreibe deine Lösungen so, dass man sie nachvollziehen kann und nicht einfach nur mit Stichworten oder Andeutungen, so wie in vielen Posts in diesem Forum...
Meine Beschreibung ist ziemlich genau und man kann aus ihr auch rauslesen, wie und wann mein Formular geöffnet wird. Zumindest ein Access-Profi sollte das eigentlich aus meiner Beschreibung erkennen.
Übrigens: das zweite Problem (ado.recordcount = -1) hat nichts mit leeren Datenmengen zu tun, sondern mit dem Cursor-Typ und dem Lock-Modus, wie ich inzwischen herausgefunden habe. Wenn man z.B. adOpenStatic und adLockReadOnly oder adLockOptimistic benutzt, klappt es auch mit dem RecordCount. -1 ist eher so zu interpretieren: ein exakter Recordcount kann nicht ermittelt werden, da andere User parallel auf die Daten zugreifen und Datensätze löschen oder zufügen könnten. Bei leeren Datenmengen würde Recordcount ansonsten 0 liefern.
Grüße und nochmal
Frohe Ostern!