PDA

Vollständige Version anzeigen : Übersichtsmanager und Abfragen


ugi2410
27.03.2006, 22:17
Guten Abend, liebe Forumsbesucher!

Ich wollte mittels Übersichtsmanager Abfragen, Tabellenerstellungsabfragen und Tabellen anzeigen bzw. ausführen lassen. Geht nicht. Hmmm, ich hab nun etwas gestöbert...
Einige raten zu Makros (sollte man ja normalerweise vermeiden), andere auf ein Formular einen Knopf machen (naja, find ich nicht so toll), andere raten ein Menü selbst zu erstellen (gute Idee, wie macht man das?).
Was ist wohl die beste Lösung bzw. kann mir dann jemand zu dieser besten Lösung Tips zur Realisierung geben?
Danke schon mal im voraus für eure Antworten...

LG Uwe

gpswanderer
27.03.2006, 22:25
Hallo,

der Übersichtsmanger ist eigentlich sonst nichts wie ein Menü und ist komlett in VBA realisiert. Erstelle mal mit ein/zwei Formularen und Berichten eine Übersicht und sieh Dir dann den Quellcode an. Wenn Du Dich etwas damit beschäftigst, wirst Du feststellen, dass sich das Teil auf die eigenen Bedürfnisse anpassen lässt. Es gehen dann eigentlich alle Datenbankfunktionen. Kenntnisse in VBA setze ich jetzt mal voraus, wenn nicht ist es zugegebenermaßen etwas schwieriger.

ugi2410
28.03.2006, 05:32
Hallo Klaus,

danke ersteinmal, der Quellcode sieht wirklich interessant aus, teilweise verstehe ich ihn auch...
Aber ich muss sagen, dass ich nicht so bewandert in VBA bin, dass ich mir komplett alleine trauen würde, mein Menü damit selbst zu schreiben.
Gibt es hier vielleicht einen Code-Schnipsel, was die Menüprogrammierung betrifft, wo ich z.B. auch sehen kann, wie man eine Abfrage und/oder eine Tabelle direkt anspricht?
Für weitere Tipps und evtl. Musterbeispiele wäre ich sehr dankbar...

LG Uwe

gpswanderer
28.03.2006, 08:18
Hallo Uwe,

werde Dir mal ein paar Tipps zukommen lassen. Habe auch einige Codeschnippsel.
Ich muss heute in den Garten (Anordnung von meiner Frau=Chef), sodass ich aber erst heute Abend dazu komme.

ugi2410
28.03.2006, 16:35
... schon mal im voraus, bin jetzt auch erst wieder heim gekommen.
Hoffe der Garten blüht und gedeiht nun prächtig :-)

LG Uwe

gpswanderer
28.03.2006, 19:09
Hallo Uwe,

bin jetzt auch aus dem Garten zurück. Muss auch sagen, wenn ich wählen könnte zwischen Garten und Access ich würde Access naehmen. Aber das andere muss auch gemacht werden. Zurück zur Sache:
Der Übersichtsmanager erstellt ja eine Tabele mit den Menüeinträgen. Wenn Du den Manager bemüht hast, schaue dir mal das Formular und die Tabelle an. In der Tabelle sind die Einträge mit den einzelnen Punkten gespeichert. Es gibt da die Felder Command und Argument. Auf dem Formular sind die Befehlbuttons. Im der Ereignis beim Klicken steht die Funktion "=HandleButtonClick(x)". X ist die Nummer des Buttons. Beim Klicken wird folgender Code ausgeführt:

Private Function HandleButtonClick(intBtn As Integer)
' This function is called when a button is clicked.
' intBtn indicates which button was clicked.

' Constants for the commands that can be executed.
Const conCmdGotoSwitchboard = 1
Const conCmdOpenFormAdd = 2
Const conCmdOpenFormBrowse = 3
Const conCmdOpenReport = 4
Const conCmdCustomizeSwitchboard = 5
Const conCmdExitApplication = 6
Const conCmdRunMacro = 7
Const conCmdRunCode = 8

Diesen Code ergänzt Du zunächst mit

Const conCmdOpenQuery = 9
Const conCmdOpenTable = 10

Weiter unten im Code ist eine Select Anweisung:

Select Case rst![Command]

' Go to another switchboard.
Case conCmdGotoSwitchboard
Me.Filter = "[ItemNumber] = 0 AND [SwitchboardID]=" & rst![Argument]

' Open a form in Add mode.
Case conCmdOpenFormAdd
DoCmd.OpenForm rst![Argument], , , , acAdd

' Open a form.
Case conCmdOpenFormBrowse
If strMenüPunkt = "12" Then
DoCmd.OpenForm rst![Argument] ', acFormDS, "", "", , acNormal (nur wenn Datenblatt)
Else
DoCmd.OpenForm rst![Argument]
End If
' Open a report.
Case conCmdOpenReport
DoCmd.OpenReport rst![Argument], acPreview

' Customize the Switchboard.
Case conCmdCustomizeSwitchboard
' Handle the case where the Switchboard Manager
' is not installed (e.g. Minimal Install).
On Error Resume Next
Application.Run "WZMAIN80.sbm_Entry"
If (Err <> 0) Then MsgBox "Befehl nicht verfügbar."
On Error GoTo 0
' Update the form.
Me.Filter = "[ItemNumber] = 0 AND [Argument] = 'Standard' "
Me.Caption = Nz(Me![ItemText], "")
FillOptions

' Exit the application.
Case conCmdExitApplication
DoCmd.Quit

' Run a macro.
Case conCmdRunMacro
DoCmd.RunMacro rst![Argument]

' Run code.
Case conCmdRunCode
Application.Run rst![Argument]

' Any other command is unrecognized.
Case Else
MsgBox "Unbekannte Option."

End Select

Diesen Code ergänzt Du wie folgt (vor Case Else):

Case conCmdOpenQuery
DoCmd.OpenQuery rst![Argument]
bzw.
Case conCmdOpenTable
DoCmd.OpenTable rst![Argument]

Du hast ja dann eine Tabelle mit den Einträgen, da trägst Du am besten in einer vorhandenen Zeile (z.B. vom Öffnen eines Formulars) dann ein:


Als Argument: Den Namen Deiner Abfrage und als Command die Nummer 9

oder

Als Argument: Den Namen Deiner Tabelle und als Command die Nummer 10

Du kannst dann jede beliebige Abfrage (Erstellungs/Lösch/Aktualisierung/Auswahl/usw.) und jede Tabelle aufrufen.
Du machst Dir am besten mal eine neue Datenbank mit einer Tabelle, einer Abfrage und einem Formular. Dann führst Du mal den Übersichtsmanager aus. Dann siehst Du sehr leicht welche Tabelle und welches Formular hinzugefügt wurde. Dann kannst Du mal experimentieren.
Vorsicht der von mir eingefügte Code ist etwas angepasst, nicht kopieren bitte.

ugi2410
28.03.2006, 19:27
Super Klaus,

das ist wirklich toll beschrieben und einfach nachzuvollziehen...
Danke nochmal!

LG Uwe