PDA

Vollständige Version anzeigen : internes Suchen als Call ausführen?


AndreaD
09.07.2001, 15:49
Hallo,

Ich habe in einem Formular Ereigniss folgendes zum suchen stehen.

Screen.PreviousControl.SetFocus
DoCmd.DoMenuItem acFormBar, acEditMenu,10, ,acMenuVer70

call xyzmakro


Diese Makro führt er jedoch immer vor dem suchen aus! Es soll aber erst nach dem suchen mit dem gefunden Satz erfolgen.
Also dann wenn ich diese suchfenster schliesse. Mein Formular ist ja nach dem suchen auf dem richtigen gefunden Datensatz, nur soll dann mit diesen daten auch eine Aktion ausgeführt werden. Wie gesagt er führt die gewünschte Makroaktion immer vor dem suchen aus!!

Kann man das suchen nicht wie ein makro mit call aufrufen?

Grüsse
Andrea

MarioR
09.07.2001, 19:42
Hallo Andrea,

versuch mal den Such-Dialog so aufzurufen:
DoCmd.RunCommand acCmdFind

AndreaD
10.07.2001, 11:56
Hallo Mario,
danke für deinen Tip aber..
ich habe mich vieleicht falsch ausgedrückt!

Mach doch mal folgendes bitte:

Screen.PreviousControl.SetFocus
DoCmd.RunCommand acCmdFind acEditMenu,10, ,acMenuVer70

msgbox "test im suchen makro"
call xyzmakro

Wie du feststellen wirst kommt die Messagebox bereits vor dem beenden der Suchabfrage!
Das ist das Problem! Sie soll kommen wenn die Suchabfrage geschlossen wurde!
So möchte ich es eigentlich haben.

Ich hoffe Die und euch allen fälltwas dazu ein!

DAnke
Andrea

AndreaD
10.07.2001, 14:46
Sorry habe einen kleinen copierfehler hier beim posting eingebaut:
zum ausprobieren war es so gemeint:


Screen.PreviousControl.SetFocus
DoCmd.RunCommand acCmdFind

msgbox "test im suchen makro"
call xyzmakro


Das ist der code aus meinem Makro!

Danke

MarioR
10.07.2001, 18:59
Ja, da hast Du leider Recht :(

Ich weiss nicht, ob sich eine laufende Prozedur (OnClick ???) überhaupt unterbrechen lässt, bis ein Befehl abgearbeitet ist.
Vielleicht kannst Du Suchdialog und Makro trennen, z.B. über 2 Button?

AndreaD
10.07.2001, 22:05
Hallo Mario,

das mit den 2 Buttons habe ich ja schon.

Das ist ja das welches mir nicht so sonderlich gut gefällt!

Vielleicht hat jemand ein suchen Makro welches so funktioniert wie das interne!

Der vorteil am Internen suchen Makro ist n.m.E das man in dem Feld sucht in dem man zuvor den Focus gesetzt hat.

Also, Klick in Feld "Namen" dann klick auf suchen Button, eintragen des suchbegriffs, dummerweise immer vorher auswählen ob 1:1 oder teilstring gesucht wird, weitersuchen anklicken und fertig!

Jetzt sollte, wenn das internwe suchen fenster geschlossen wird weiter in meinem Makro abgearbeitet werden.

Die Lösung wäre der vba code des internen suchen MAkros, oder?

Vielleicht hat hier jemand soetwas!

Danke euch allen

AndreaD

Wile E G
11.07.2001, 07:09
hi
schau mal unter der idle methode in der onlinehilfe nach, vielleicht bringt dir das etwas.
HTH
Wile E.G.

AndreaD
11.07.2001, 16:22
Hallo,

bei mir gibts seltsamer weise zwar im hilfe index das wort idle aber keine erläuterung dazu!

Was hat es denn mit dem idle so auf sich?

Gruss Andrea

Wile E G
12.07.2001, 08:24
Hi Andrea
hier ein auszug meiner onlinehilfe:

Unterbricht die Datenverarbeitung und ermöglicht dem Microsoft Jet-Datenbankmodul, nicht abgeschlossene Operationen, wie z.B. Speicheroptimierung oder Zeitüberschreitungen beim Zugriff auf Seiten abzuschließen (gilt nur für Microsoft Jet-Arbeitsbereiche).

Syntax

DBEngine.Idle [dbRefreshCache]

Bemerkungen

Mit der Idle-Methode kann das Microsoft Jet-Datenbankmodul Hintergrundoperationen durchführen, die aufgrund umfangreicher Datenverarbeitung längere Zeit nicht durchgeführt wurden. Solche Situationen treten häufig in Mehrbenutzer- und Multitasking-Umgebungen auf, in denen nicht genügend Zeit zum Durchführen von Hintergrundoperationen zur Verfügung steht, um alle Datensätze in einem Recordset-Objekt auf dem aktuellen Stand zu halten.

In der Regel werden Lesesperren nur entfernt und Daten in lokalen Recordset-Objekten vom Typ Dynaset nur aktualisiert, wenn keine anderen Operationen (auch keine Mausbewegungen) durchgeführt werden. Wenn Sie regelmäßig die Idle-Methode aufrufen, kann Microsoft Jet Hintergrundprozesse durchführen, indem Sie nicht benötigte Lesesperren aufheben.

Durch Angeben des optionalen Arguments dbRefreshCache werden alle noch nicht abgeschlossenen Schreibvorgänge in .mdb-Dateien erzwungen, und der Speicher wird mit den aktuellen Daten aus der .mdb-Datei aktualisiert.

Sie benötigen diese Methode in einer Einzelbenutzerumgebung nicht, außer wenn mehrere Instanzen einer Anwendung ausgeführt werden. Die Idle
-Methode kann das Leistungsverhalten in einer Mehrbenutzerumgebung verbessern, da sie das Datenbankmodul zwingt, Daten auf die Festplatte zu schreiben und so gesperrte Speicherbereiche freizugeben.

Anmerkung Sie können Lesesperren auch freigeben, indem Sie Operationen in eine Transaktion einschließen.


und hier nochn beispiel:


Sub IdleOutput(rstTemp As Recordset, strTemp As String)

' Idle-Methode aufrufen, um unerwünschte Sperren
' aufzuheben, ansstehende Schreibvorgänge zu
' erzwingen und den Speicher mit den
' aktuellen Daten der .mdb-Datei zu aktualisieren.
DBEngine.Idle dbRefreshCache

' Recordset-Objekt durchlaufen.
With rstTemp
Debug.Print "Bestellungen von " & strTemp & ":"
Debug.Print , "[Bestell-Nr]", "[Kunden-Code]", "Bestelldatum"
Do While Not .EOF
Debug.Print , ![Bestell-Nr], ![Kunden-Code], !Bestelldatum
.MoveNext
Loop
End With

End Sub


ich weiß nicht ob das dein problem genau trifft, bzw ob dein problem damit lösbar wäre, da ich mit der idle methode noch nie gearbeitet habe, aber vielleicht bringts dir was?? wenn ja gib mir bitte bescheid ;)

Gruß Wile E.G.