1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

ACCESS, von kombifeld auslesen

Discussion in 'Office-Programme' started by mousstee, Dec 18, 2006.

Thread Status:
Not open for further replies.
  1. mousstee

    mousstee Byte

    hallo,

    habe folgendes problem bei access(2000).

    habe ein formular mit einem kombinationsfeld und einem textfeld.

    im hintergrund ist eine PC-Tabelle mit den Feldern PC-ID, PC-NAME, MAC-Adresse, IP-Adresse,...

    Über das KombiFeld wähle ich den PC-NAMEn aus. Nach der auswahl soll er in das andere Textfeld automatisch die dazugehörige MAC-Adresse anzeigen.

    Mein gedanke:

    ich möchte dem Textfeld sagen: "SELECT [MAC-Adresse] von der [PC-Tabelle] WHERE [PC-NAME]=Kombifeld UND zeige es im Textfeld an" :D

    wie bau ich das da ein????

    :bet:
     
  2. Hascheff

    Hascheff Moderator

    Also Code brauchst du nicht schreiben, wenn ich dein Problem richtig verstanden habe.

    Variante 1:
    In Datenherkunft ist deine Tabelle eingetragen.
    Falls noch nicht geschehen, lässt du den Formularkopf anzeigen.
    Vergewissere dich, dass in der Toolbox der Assistent aktiviert ist.
    Erzeuge im Formularkopf ein Kombi-Feld.
    Als erstes fragt der Assistent, woher es die Werte beziehen soll. Dort wählst du die 3. Option: ""Einen Datensatz im Formular ...)
    Den Rest kennst du vielleicht.

    Variante 2 ist etwas länger zu erklären, das mache ich gesondert, wenn Variante 1 nicht deinen Vorstellungen entspricht.
    Nur ein Stichwort: Tabellenverknüpfungsabfrage
     
  3. mousstee

    mousstee Byte

    tabellenverknüpfungsabfrage hört sich nicht schlecht an.
    kannst du mir mehr drüber erzählen?
     
  4. Hascheff

    Hascheff Moderator

    Ja, jetzt hab ich wieder Zeit.
    Ich kann mir vorstellen, du hast eine 2. Tabelle mit Details zu den einzelnen Rechnern wie z.B. User oder Ordnerinhalte. Die beiden Tabellen sind durch eine 1:n-Beziehung verknüpft.
    (Wenn dir irgend etwas an der Beschreibung fremd ist, frag ruhig.)

    Dann musst du eine Auswahlabfrage erstellen/erstellt haben, die diese beiden Tabellen enthält.
    Von der PC-Tabelle muss PC-NAME enthalten sein, PC-ID nicht, sondern das verknüpfte Feld aus der Detailtabelle.

    Dem Formular gibst du diese Abfrage als Datenherkunft an.
    Das Textfeld erstellst du wie üblich mit PC-NAME als Datenherkunft.
    Das Kombi-Feld erstellst du auch wieder mit Assistenten, aber diesmal nicht im Kopf, sondern normal im Detailbereich.

    Diesmal wählst du im ersten Dialog die erste Option "... einer Tabelle entnehmen."
    Im zweiten Dialog wählst du die PC-Tabelle, im dritten wählst du erst PC-ID und dann PC-NAME.
    Im dritten Dialog lässt du den Haken bei "Schlüssel... ausblenden" und kannst die Spaltenbreite ziehen.
    Und schließlich legst du im vierten Dialog fest: "Wert speichern in Feld:" Hier wählst du das mit PC-ID verknüpfte Feld der Abfrage.
    Wenn du jetzt z.B. einen neuen Datensatz erstellst, kannst du den PC wählen und die IDs verrichten ihre Arbeit im Hintergrund.
     
  5. mousstee

    mousstee Byte

    ok. also ich habs doch mit der 1.variante geschafft und es funktioniert so wie ich es mir vorstelle. vielen dank!

    nun zum nächsten problem :heilig:

    ich habe eine andere tabelle mit beutzern und deren informationen.
    die BenutzerID ist mit ANWENDER in der PC-Tabelle verknüpft (1:n).
    im datenblattansicht zeigt er mir den BenutzerNamen an, was auch richtig bzw. übersichtlicher ist. im Formular zeigt er mir die BenutzerID an. Woher soll ich wissen wer das ist? muss ich da spaltenbreite oder so ändern? aber wenn ich in die eigenschaften vom textfeld gehe, dann gibt es so eine option nicht... also ich sehs nicht... :confused:
     
  6. Angel-HRO

    Angel-HRO Megabyte

    Hi

    in dem Falle hast du das gesuchte Feld wohl in der 2ten Spalte?
    Dann stell die Spaltenbreiten des Kombofeldes auf

    0cm;4cm

    oder so. Damit bleibt die ID stets der INhalt des Feldes, es wird aber der Benutzername angezeigt und beim Eingeben nach diesem vervollständigt
     
  7. mousstee

    mousstee Byte

    es ist kein kombofeld. ist ein textfeld. und in den eigenschaften im formular kann ich nirgends etwas mit spaltenbreite finden
     
  8. Hascheff

    Hascheff Moderator

    Ok, merk dir die 2. Variante trotzdem, wirst du auch noch mal brauchen.

    Textfelder sind in der Regel mit einem Feld verknüpft (schau mal in der Entwurfsansicht bei Datenherkunft nach) und können nicht einfach in einer Ansicht dies und in der anderen jenes zeigen.

    Eventuell ist in der Datenblattansicht die Reihenfolge geändert oder die Spaltenbreite eines Feldes auf Null gesetzt.
    In der Datenblattansicht ist im Tabellenkopf der Name des Textfeldes eingetragen, nicht etwa wie in der Formularansicht das verbundene Bezeichnungsfeld.

    In der Formularansicht kann ein Textfeld hinter einem anderen Objekt liegen und dadurch nicht sichtbar sein oder die Eigenschaft Format - Sichtbar auf falsch gesetzt sein. In der Datenblattansicht ist es dann trotzdem sichtbar.

    Noch eine Frage zur Beziehung
    Hat ein PC mehrere Anwender oder ist ein Benutzer auf mehreren PC als Anwender eingetragen?
    Ich vermute beides, also eine n:n-Beziehung.
    Das Problem muss man etwas anders angehen, aber bevor ich es nicht genau weiß, lohnt es sich nicht, alles darzulegen.
     
  9. mousstee

    mousstee Byte

    sorry war im urlaub gewesen, konnte deswegen nicht antworten.

    ja es soll eigentlich eine n:n beziehung sein, wie du schon erklärt hast.

    hab bisschen rumprobiert, und es klappt soweit. wenn ich den pc-namen auswähle, dann zeigt er mir alle anderen daten in textfeldern etc an.

    nur habe ich dieses formular mit dem assistenten erstellt und so ein layout ausgewählt (Industrie). das rote.
    ich hab das auch soweit jetzt wieder "gradeformatiert" aber diesen haupthintergrund vom formular bekomm ich nicht weg. das ist so ein muster. wenn ich bei eigenschaften auf hintergrundfarbe gehe und änder, passiert nix, weil ja das muster drüber liegt....
     
  10. Hascheff

    Hascheff Moderator

    Die Hintergrundfrage halte ich jetzt nicht für dringend, das schaffst du bestimmt noch allein.

    Bei einer n:n-Beziehung solltest du eine dritte Tabelle anlegen, die die Zuordnungen erfasst.
    Also:
    1. PC-Tabelle mit den Feldern PC-ID, PC-NAME,
    2. Benutzer-Tabelle mit BenutzerID, Benutzer,
    3. Zuordnungs-Tabelle mit PC-Nr, User-Nr. (PC-ID, BenutzerID geht auch, verwirrt aber)

    Nun kannst du Abfragen erstellen, die nach PC oder User sortiern oder filtern, ebenso Formulare.
    Bei Formularen wäre aber das Unterformular-Werkzeug zu empfehlen.
     
  11. mousstee

    mousstee Byte

    ok ich habe verstanden was du meinst. das habe ich bei der PC-Tabelle und Software-Tabelle gemacht.
    hab eine mitteltabelle eingefügt die PC-ID und SoftwareID enthält. dadurch hab ich dann die n:n beziehung ;)

    und jetzt...

    nachdem das suchen über den pc-namen im kobinationsfeld geklappt hat, und er mir die restlichen textfelder ausgefüllt hat, will ich folgendes machen:

    einen button ÄNDERN.

    die textfelder sind nämlich gesperrt und deaktiviert, sodass man gar nicht reinklicken bzw. etwas ändern kann. wenn ich diesen button ÄNDERN geklickt habe, soll er mir die felder freigeben. d.h. aktivieren und entsperren.

    nach den änderungen will ich auf den button SPEICHERN klicken, und er soll 1.speichern und 2.wieder die felder deaktivieren und sperren.

    dazu brauche ich VBA oder? :heul:
     
  12. Angel-HRO

    Angel-HRO Megabyte

    Hi
    das heißt n:m ;)

    Ansonsten: Korrekt, du benötigst VBA.

    Sobald du auf Ändern klickst muss folgendes durchgeführt werden:

    Code:
    me.Textfeldname.enabled = true
    me.Textfeldname.locked = false
    
    beim Speichern sollte folgendes passieren:

    Code:
    me.dirty = false 'Speichern
    me.Textfeldname.enabled = false
    me.Textfeldname.locked = true
    
     
  13. mousstee

    mousstee Byte

    ok danke, klappt.

    aber brauche ich das speichern überhaupt?
    ich schreibe doch eh direkt in die tabelle oder?

    also er speichert auch so.

    wenn ich nun 20 textfelder habe, muss ich für jedes einzelne diesen code schreiben oder gibts etwas einfaches?
     
  14. Angel-HRO

    Angel-HRO Megabyte

    Nicht zwingend...du hast normalerweise bei einem Formular an der linken Seite einen Balken, dort ist entweder ein schwarzes Dreieck oder ein Stift drin. Der Stift kommt, sobald du ein gebundenes Feld änderst. SOlange der Stift zu sehen ist, ist die Änderung nur transparent, sprich: du siehst sie, sie ist aber kein Bestandteil der Tabelle

    also er speichert auch so.

    Entweder für 20 oder falls sie Textfeld1, textfeld2 oder so heißen
    Code:
    For i = 1 to AnzahlTextfelder
    
    me.controls("Textfeld" & i).enabled=true
    me.controls("Textfeld" & i).locked = false
    
    next i
    
     
  15. mousstee

    mousstee Byte

    hab was besseres gefunden:

    Code:
    Private Sub Schreibschutz(boolSchreibschutz As Boolean)
    
    Dim ctl As Control
    
    For Each ctl In Me.Controls
    
    If ctl.Tag = "x" Then              [COLOR="SeaGreen"]'x muss als Marke in jedem[/COLOR]  
     ctl.Enabled = Not boolSchreibschutz [COLOR="SeaGreen"]'textfeld stehen, den man[/COLOR]
     ctl.Locked = boolSchreibschutz        [COLOR="SeaGreen"]'einbeziehen möchte[/COLOR]
               
    End If
    
    Next ctl
        
    End Sub
    Wenn man auf den Button ÄNDERN klickt:
    Code:
    Schreibschutz [COLOR="Red"]FALSE[/COLOR]
    Wenn man auf den Button SPEICHERN klickt:
    Code:
    Schreibschutz [COLOR="Blue"]TRUE[/COLOR]
    Ma guggn was das nächste Problem sein wird :D
     
  16. Hascheff

    Hascheff Moderator

    Warum sperrst du überhaupt Felder, wenn du sie dann doch ändern willst?
    Und warum willst du etwas ändern in diesem Formular?
    Oder ist von einem ganz andern Formular die Rede?

    Das Formular zur Zuordnung von PC's und Usern enthält je ein Kombinationsfeld für PC und User, da klickst du in einem neuen Datensatz drauf und schon hast du die Zuordnung hergestellt. (Wie Kombinationsfelder in die Tabelle schreiben, wurde schon erklärt.)

    Oder soll das Formular eine eierlegende Wollmilchsau sein?
     
  17. mousstee

    mousstee Byte

    eierlegende wollmilchsau??? was soll das denn heissen?

    mache jetzt mal feierabend. schreibe wenn ich daheiom bin wieder... dann erklär ich dir das formular. oder kanns ja mal schicken.

    bis dann byebye
     
  18. mousstee

    mousstee Byte

    ch weiss nicht obs wichtig ist, aber das UFo befindet sich in einem RegisterMenu.
    das registersteuerelement heisst Menu und die registerkarte heisst Monitor

    hier mal ein bild

    [​IMG]

    ganz oben soll man die option haben, ob man nach einem usernamen suchen möcjte oder nach dem pc namen. aber das funktioniert noch nicht so wie ich mir das vorstelle. nur nach dem pc-namen suchen geht.

    und ich weiss noch nicht, ob ich diese DATEN ÄNDERN und DATEN SPEICHERN buttons ausserhalb des registers zu erstellen soll oder in jedem register menü. wenn ich es ausserhalb erstelle, müssen ALLE felder in dem kompletten register freigeschaltet werden. wenn ich es innhalb des registern erstelle, dann nur die die in dieser registerkarte sind. ich denke ich mache für jede registerkarte neue buttons...
     
  19. Hascheff

    Hascheff Moderator

    :sorry: Ich glaub, du ziehst die Hosen mit der Kneifzange an.
    Wieso benutzt du Registerkarten, um die verschiedenen PC anzuzeigen?
    Jeder PC ein Datensatz, im Kopf des Formulars ein Listenfeld zum Auswählen des Datensatzes. Register braucht man da nicht. Na gut, wirst du sagen, braucht man nicht, kann man aber nehmen. Mal abgesehen von der Mehrarbeit, es ist auch unpraktisch. Jedesmal, wenn ein PC dazukommt, muss man eine neue Registerkarte einrichten.

    Wenn es um optische Fragen geht, man kann auch jedem Datensatz einen eigenen Hintergrund verpassen und jeweils im Vordergrund benötigte Elemente sichtbar oder nicht benötigte unsichtbar machen.

    User wählen wird aber so nichts. Dazu könnte man Registerkarten verwenden. Eine für PC und eine für User, auf jeder Registerkarte ein dazu erstelltes Unterformular. Wobei ich noch nicht verstanden habe, warum in ein und demselben Formular PC und User wählbar sein müssen. Man kann doch jeweils ein eigenes Formular öffnen.
    Also doch eierlegende Wollmilchsau. (Hast du diese Redewendung noch nicht gehört?)

    Alles in allem habe ich Zweifel, ob Access überhaupt die richtige Anwendung ist. Wäre nicht ein Präsentationsprogramm besser?

    "Daten speichern" brauchst du nur, weil du alles in einem Datenbereich machst. Normalerweise verlässt man einfach den Datensatz, um zu speichern. Aber nach deinem System bleibst du immer im gleichen Datensatz. Das ist keine Datenbankanwendung, da kannst auch ein anderes Programm nehmen.

    Ich vermute, dass das jetzt ein bisschen viel Kritik auf einmal war, und hundertprozentig habe ich manches noch nicht verstanden, aber es bringt nichts, sich hinterher, wenns fertig ist zu ärgern, weil dies und jenes nicht so funktioniert.
     
Thread Status:
Not open for further replies.

Share This Page