PDA

Vollständige Version anzeigen : ungebundenes UFO


Wile E G
02.07.2001, 09:52
Hi,

also das untenstehende Problem hab ich jetzt gelöst, aber wie war das noochmal mit den öffentlichen prozeduren? (public sub)
in welchen modul muß ich die deklarieren?

ich habe (hatte) folgende ausgangssituation:

Ich habe ein formular erstellt, welches nicht an einen datensatz gebunden ist und als hauptinhalt ein bild hat. Auf diesem Bild befinden sich so ca 10 ungebundene Optionsfelder.

Sinn des ganzen:
dieses formular dient der navigation. das bild ist eine schemazeichnung eines produktionsbandes und die Optionsfelder stellen die jeweiligen arbeitsstaionen dar.
nun möchte ich dieses formular als unterformular in verschiedene hauptformulare einbinden. deswegen als ufo, weil sich das bild und die stationen des öfteren ändern (z.t. täglich!!) und ich das ganze nur einmal (eben in diesem ufo) und nicht in jedem hauptformular (die ausserdem immer mehr werden) ändern möchte.

mein problem:
die funktion des ufos ist in jedem hauptformular verschieden, einmal dient es der reinen navigation, ein anderes mal sollen arbeitsstaionen ausgewählt werden.

meine überlegung:
ich bräuchte eine methode bei der informationen vom haupt- ins ufo fließen und umgekehrt. am besten wäre eine art übergabevariable. das ufo soll im jeweiligen hauptformular schauen, welche arbeitsstation gerade angezeigt wird. aber es soll auch die information an das hauptformular geben, welche arbeitsstaion im ufo gerade angeklickt wurde.

HAT JMD EINE IDEE????

gruß wile e.g.

P.S. es ist immer nur ein Hauptformular offen, welches auf das ufo zugreift.

Ich benutze WinNT und A97

Phillip-Berlin
02.07.2001, 10:07
habe deinen text nur überflogen
grundsetzlich kannst du von jedem formular aus
jedes unterformular auch in anderen formularen anprechen
bsp:
ufo1 enthält ein textfeld txt1
frm1 enthält txt2
nun soll der txt2 mit dem wert aus txt1 gefüllt werden

wir befinden uns im frm1
me.txt2 = forms![frm1].[ufo1].form![txt1]

du kanns also jeden wert über diesen weg ermitteln ...
und universell einsetzen ..

Wile E G
02.07.2001, 10:25
Hi Phillip
nee das geht nicht, da ich im code nicht auf feste steuerelemente verweisen möchte, da die sich ja so oft ändern.
ich habe selbst eine lösung gefunden:
eine öffentliche variable!
(sorry ich habe vorher nicht gewusst dass es sowas gibt, bzw. dass man sie dazu verwenden könnte ;))
aber jetzt dazu eine frage:

wo wird die öffentliche variable definiert?
nur einmal (wenn, wo?) oder in jedem modul in dem es aufgerufen wird?

gruß wild e.g.

A.S.
02.07.2001, 13:20
Hallo Wile,

ich habe dazu einen Denkansatz, den ich aber jetzt noch nicht Poste. Ist ein wenig Umfangreicher und hier auf der Arbeit nicht zu bewältigen.

Gruß

Arno

Wile E G
02.07.2001, 14:12
hi arno,

da bin ich aber mal gespannt.

ich bin jetzt ungefähr so weit:
ich habe zwei öffentliche variablen definiert (weiß jetzt wie es geht, nichts geht(außer der frust) über try and error ;)
eine HAnUfo (vom hauptform an ufo)
eine UfoAnH (umgekehrt)
quasi in und output

nur das mit der übergabe klappt nicht.
ich will dass das hauptformular (Hfo) dann die variable UfoAnH überprüft, wenn im ufo was geändert wurde.(und bei HAnUfo umgekehrt); da ich im ufo keinen datensatz ändere, geht das mit der dirty funktion nicht. Verzweiflung!!

gruß wile e. g.

A.S.
03.07.2001, 03:52
Hallo Wile,

ich habe unter folgender URL eine Beispieldatenbank nebst einer kleinen Beschreibung abgelegt. Die Beschreibung umfaßt knapp 5 Seiten und ist recht allgemein gefaßt. Ich hoffe das sie auch jemand lesen kann der mit dem Stoff der instanzierten Formulare nicht vertraut ist.

http://www.as-datentechnik.de/Files/Forms.zip

------------------
HTH

Arno

A.S.
03.07.2001, 05:49
Sollte irgendjemand die o.g. Datei bereits heruntergeladen haben:

<font color="Blue">Bitte nochmal wiederhohlen.</font>

Habe sie gerade nochmals überarbeitet, weil mir so ein paar Sachen daran etwas unklar formuliert erschienen.

------------------
HTH

Arno

Wile E G
03.07.2001, 07:46
hi arno

vielen dank!!!!

hab mal kurz drübergeschaut, muß mich noch intensiv damit beschäftigen. (womit klar wäre, was ich die nächsten stunden tue)

ich glaube aber schon jetzt, dass mich das einen schritt weiterbringt.

Vielen Dank
Gruß Wile E. G.

(p.s. sag mal, schläfst du nie?)

A.S.
03.07.2001, 08:00
Hallo Wile,

gegenfrage ;) Was ist "Schlaf"??? :D

Spaß beiseite, momentan hab ich keine Zeit dazu... *g*

Gruß

Arno

PS Kommentare bzw. Kritiken sind natürlich willkommen. Kann auch an meine Mail-Adresse gehen.

Wile E G
03.07.2001, 09:08
hi arno

deine idee bringt mich ein ganzes stück weiter. danke!
aber ein "kleines" problem habe ich noch:
das unterformular soll tatsächlich als unterformular in das hauptformular eingebunden werden und zwar so, dass das der benutzer weder optisch noch handhabungstechnisch mitbekommt. (das mit dem optisch hat ja geklappt, aber...)
also nix mit popup und gebunden oder so.
kann das zu problemen führen??

gruß wile e. g.

A.S.
03.07.2001, 09:28
Args,

ne Wile..... is nich war, nit!

Grummel ;))

In dem Fall brauchst Du von der ganzen Lösung jar nix... :(

Wie ich Deinen Aussagen noch viel weiter oben, jetzt erst (so'n Mist, das man sich eine etwas komplizierte Denke zulegt :)) entnehme, benötigst Du nur ein Feld txtArbStation im Hauptformular, in welchem die jeweilige Arbeitsstation steht. Aus dem Unterformular greifst Du den Wert dann mit

Me.Parent.txtArbStation

und setzt dementsprechend Deine Ja/Nein-Felder um.

Grummel... :(

HTH

Arno

Warum in die Ferne schweifen, wo das Gute ist so nah!

Wile E G
03.07.2001, 10:09
Hi arno

sorry für deine scheinbar unnötigen anstrengungen, aber ich glaub trotzdem das es mir was für mein access-verständnis was gebracht hat.
aber so leicht wie du es jetzt beschreibst gehts leider auch nicht :(

im ersten hauptformular hat das ufo die funktion einer naviagtionsleiste, d.h. es wird auf ein optionfeld geklickt (im ufo) und im hauptform ändert sich der datensatz, und im ufo wird nur das jeweilige optionsfeld aktiv.

beispiel: im hfo und im ufo ist der datensatz "station a1" aktiv/wird angezeigt.
klicke ich auf station a2 im ufo muß der wert an hfo gegeben werden, welches dann den datensatz wechselt, im ufo alle optionsfelder auf false setzt und nur das optionsfeld a2 auf true.

das ist deswegen so kompliziert weil:
im zweiten hfo dient das ufo zur auswahl, d.h., wenn ich auf eine arbeitsstaion im ufo klicke wird der wert ans 2.hfo gegeben, aber die werte im ufo nicht resettet, so das es mir möglich ist, z.b. station a1, station a5 und station c4 anzuwählen. diese werte sollen dann in eine abfrage fließen auf grund der ein drittes hfo aufgerufen wird, in dem das ufo wieder zur navigation benutzt wird (ähnlich dem 1.hfo).

(ich dachte ich lege beim 2.hfo eine temporäre tabelle an in die die werte eingelesen werden.)

du siehst , der eigentliche vbacode, mit dem das ufo gesteuert wird, muß immer im jeweiligen hfo liegen und nicht im ufo.

hast du noch ein paar tips?
(hätte allerdings verständnis dafür, dsß du jetzt ziemlich genervt bist, zumal das problem recht umfangreich und kompliziert ist für jmd der die datenbank nicht kennt. aber ich kann sie dir auch nicht mailen, da sie schon viel zu gross ist (auch nur als frontend).

gruß wile e. g.

A.S.
03.07.2001, 10:24
Hallo Wile,

das ich die ganze Tipperei nicht umsonst gemacht habe, weiss ich. Zum einen hat es Dir etwas gebracht und zum anderen mir ;)

Zu Deinem Problem:

So wie ich Dich jetzt mittlerweile verstanden habe, soll Dein Ufo beide Seiten abdecken. Zum einen das automatische Umschalten der Station und zum anderen das Nichtstun bei bestimmten Formularen.

Das Nichtstun bei bestimmten Formularen kannst Du über die Eigenschaft Me.Parent.Name im Unterformular steuern, indem Du dort die HF abfragst die keine Reaktion seitens des UF auslösen sollen.
Ansonsten setzt Du den Wert des Steuerelementes im Ufo einfach in ein ungebundenes evtl. unsichtbares Feld des bzw. oder direkt in den Filter im HFo und führst ein Me.Parent.Requery aus, so das sich das HF über einen Filter auf den Satz positioniert den das UFO-vorgibt.

Wenn das UFO nicht auf Eingaben reagieren soll, kannst Du anschließend über die demonstrierten Property-Get-Anweisungen, welche Du statt ins HFo ins UFo einbaust die Werte Deiner UFo-Steuerelemente ermitteln und dann mittels dieser die Abfrage-Parameter setzen.

------------------
HTH

Arno

A.S.
03.07.2001, 10:27
PS In dem Fall aber nicht mit Instanzierung arbeiten! Die Syntax um vom HFo die Eigenschaften (Property-Get) zu lesen, ist dann

Wert = Me!SubForm.Form.ControlValue("ctlControl")

Wile E G
03.07.2001, 10:40
Danke, ich arbeite daran!
mal schauen wie lange ich brauche, bis ich das fehlerfrei hinbekomme. (hätte informatiker werden sollen, statt betriebspädagoge)

viele grüße
wile e.g.

A.S.
31.07.2001, 11:05
Und wie weit bist Du nun gekommen, Wile?

Wile E G
31.07.2001, 11:48
hi Arno,

ich habs fertig bekommen.
die Lösung war folgende:
ich hab die Ansteuerung hauptsächlich ins Hfo genommen. Wenn ich was im Ufo machen musste, dann hab ich halt gefragt wie der Parent.Name ist, damit das Ufo weiß, in welchem Hfo es gerade aufgerufen ist und hab dann mit ner If .. Then Schleife die jeweilige Aktion gestartet.
Und da das Ufo ja auch zur Auswahl und nicht nur zur Navigation genutzt wird, hab ich mir nen furchtbar (für mich) komplizierten Code gebastelt, mit dem ich den SQL string übergeben:
Dim ctl As Control
Dim auswahl As String
For Each ctl In Me!UFrmFuA.Controls
If ctl.ControlType = acOptionButton Then
If ctl.Value = True Then
If auswahl = "" Then
auswahl = "('" & Mid(ctl.Name, 4)
Else
auswahl = auswahl & "','" & Mid(ctl.Name, 4)
End If
End If
End If
Next
If Not (auswahl) = "" Then auswahl = auswahl & "')"
If auswahl = "" Then
MsgBox "Achtung: Sie haben keine Arbeitsplätze ausgewählt!", 48, "Fehler"
Else
DoCmd.Close
DoCmd.OpenForm "FrmTest", , , "[Arbeitsplatz] IN " & auswahl & ""
End If

End Sub

das hat alles geklappt und ich bin hochzufrieden! Danke nochmal für deine Hilfe.
Find ich übrigens toll, dass du nachfragst.

Gruß Wile E.G.

A.S.
31.07.2001, 12:00
Hallo Wile,

manche Feinheiten in Deinem Coding entsprechen zwar nich unbeding meinen Vorstellungen, aber das muß ja auch gar nicht sein ;) ;) Jeder hat ja seine eigene Art und das ist auch gut so :)

Wenn Du's hinbekommen hast und es läuft, ist doch alles bestens ;)

Gruß

Arno

Wile E G
31.07.2001, 12:12
Hi Arno,
dass ich nicht die eleganteste Methode gewählt habe ist mir klar, aber ich komme nicht drauf wie man es besser lösen kann, wenn du eine Anregung hast, kannst sie mir ja mal geben, ich lerne ja schließlich noch ;)
Übrigens: als ich vor knapp nem Monat hier das erste mal was gefragt hab, hatte ich noch keine Ahnung von VBA und inzwischen bekomme ich schon einfache Prozeduren hin.
Ich muß sagen, das Forum ist besser als jedes Lehrbuch! Danke an dich und die anderen Forenteilnehmer!!!

Gruß Wile E.G.