MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > Microsoft Access
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 11.07.2019, 22:23   #1
pavstern
Neuer Benutzer
Neuer Benutzer
Standard Acc2016 - vorhandenes Formular dynamisch mit allen Feldern der akt. Datensatzquelle füllen

Hallo liebe Experten,

wie kann ich automatisch alle Felder (Tabellenspalten) der Datensatzquelle im Formular anzeigen lassen, ohne sie händisch in der Entwurfsansicht in den Datenbereich zu ziehen? Die Auswahl der Felder soll sich dynamisch verändern, wenn sich die Datensatzquelle des Formulars ändert.

Der Hintergrund ist:
Ich habe ein Formular, das ich in der geteilten Ansicht öffne. Im Formularkopf habe ich fest einige Steuerelemente, mit denen u.A. die Datensatzquelle verändert werden kann. Dadurch greift das Furmular über die veränderte Abfrage auf verschiedene Tabellen zurück. Danach werden mehrere Datensätze gleichzeitig in der entsprechenden Tabelle aktualisiert/modifiziert. Das alles wird in dem Formularkopf bedient. So weit funktioniert alles.
Ich würde mir aber gerne die Daten in dem Datenblatt des geteilten Formulars anschauen. Ich kann zwar alle relevanten Datensätze entsprechend der aktualiserten Abfrage sehen aber nur die Daten lesen, deren Felder (Spaltennamen) ich vorher in den Detailbereich händisch reingezogen habe. Da aber je nach einbezogener Tabelle auch andere Felder relevant sind, bräuchte ich eine dynamische Lösung, die immer alle Felder der Datensatzquelle anzeigt. Geht das?

Geht das?

Danke für eure Hilfe!
Angehängte Grafiken
Dateityp: jpg 01.jpg (84,6 KB, 28x aufgerufen)
Dateityp: jpg 02.jpg (87,2 KB, 13x aufgerufen)

Geändert von pavstern (12.07.2019 um 00:10 Uhr). Grund: Update: Bild
pavstern ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.07.2019, 10:33   #2
knobbi38
MOF User
MOF User
Standard

Hallo pavstern,

das geht nur ansatzweise, weil man in Access Steuerelemente nicht dynamisch erzeugen und zu einem Formular hinzufügen kann. Was man machen kann ist, eine fixe Anzahl von Steuerelementen in ein Formular einfügen und diese dann dynamisch an ein Feld der Datensatzquelle binden. Danach die Steuerelemente je nach Bedarf verschieben und die nicht genutzten Steuerelemente ausblenden.
Mit Hilfe von eigenen Datensatzklassen läßt sich so etwas auch geeignet umsetzen, ist aber ein bißchen Aufwand und nicht unbedingt ein Projekt für Einsteiger.

Ulrich
knobbi38 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.07.2019, 16:33   #3
Beaker s.a.
MOF Koryphäe
MOF Koryphäe
Standard

@pavstern
Ich weiss nicht, was einfacher ist, Ulrichs Vorschlag oder doch einzelne
Formulare erstellen und diese in einem Navi-Form anzuzeigen. IMO ist
Letzteres weniger aufwändig als seitenweise Code mit .Visible, .Locked
und .Enabled, Record- bzw./und/oder RowSources setzen usw. zu schreiben.
gruss ekkehard

__________________

--
S.M.I.²L.E.
Beaker s.a. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.07.2019, 16:56   #4
fraeser
MOF Meister
MOF Meister
Standard

Ich habe soetwas vor vielen Jahren mal gemacht - per VBA eine Form im Entwurfmodus zu generieren (bzw. deren Steuerelemente).
Dazu müsste man das aber über ein weiteres Formular starten und die Performance ist im Keller :-(
Also (auch) keine schöne Lösung...

__________________

Gruß, Jan

Zitat:

Programmieren und Microsoftail: "Gestern stand ich noch am Abgrund.....heute bin ich einen Schritt weiter....!"

fraeser ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.07.2019, 17:35   #5
Ohrkester
MOF Koryphäe
MOF Koryphäe
Standard

Servus pavstern,
wieso nicht ein einfaches Startformular mit simplen Buttons, um erst einmal
darin alle Formulare der Stammdaten und Geschäftsdaten aufrufen zu können.
Wo liegt denn wirklich der Vorteil eines Naviformulars?
Ohrkester ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.07.2019, 18:03   #6
ebs17
MOF Guru
MOF Guru
Standard

Die Anforderungen können nicht sehr hoch sein, wenn alle Tabellen im gleichen Formular angezeigt werden sollen.
Nebenbei: Die Forderung nach Hochdynamik ist schnell mal eine Folge von vorangegangener Planlosigkeit.

Zitat:

Ich würde mir aber gerne die Daten ... anschauen.

Wenn statt eines Formulars ein listenfeld verwendet würde, was zum Anschauen und Auswählen allemal ausreicht, müsste man ggf. nur die Spaltenanzahl und als Luxus Spaltenbreiten anpassen.

Aber auch: Ein Formular ist kein derartiger Höhepunkt des Schaffens, das es nicht daneben weitere (statische) geben kann. In Access lassen sich Formulare bekanntlich sehr einfach und rasch erstellen.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}:{11}:{12} <= geklammerte Zahlen sind Einzelthemen
Dein Dankeschön: DBWiki => Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.07.2019, 03:59   #7
pavstern
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Leute,

danke für die Hinweise!
Ich habe mich Ulrichs Idee angenommen und sie weitgehend umgesetzt.
Ich verzweifle aber an dem Ausblenden der nicht benötigten Spalten IND DER DATENANSICHT :-(

Zitat:

Public Function SteuerelementeZuweisen()
Dim rs As DAO.Recordset, i As Integer
Dim cContTextBox, cContLabel As Control
Dim Spaltenname, TextfeldName, BezFeldName As String


Set rs = CurrentDb.OpenRecordset(Me.RecordSource)

For i = 0 To 10
TextfeldName = "Textfeld" & i
BezFeldName = "BezFeld" & i

If i < rs.Fields.Count Then
Spaltenname = rs.Fields(i).Name
Set cContTextBox = Me.Controls(TextfeldName)
cContTextBox.ControlSource = Spaltenname

Set cContLabel = Me.Controls(BezFeldName)
cContLabel.Caption = Spaltenname


Else
Forms!formDiagnostik!Textfeld9.ColumnHidden = -1
End If
Next
Requery

End Function

Habe in dieser Version einfach einen Textfeldnamen fest eingesetzt um Fehler bei der Übertragung der Variablen zu vermeiden aber auch das funktioniert nicht. Ich komme nicht weiter!

Noch mehr zum Hintergrund: Unterformulare als Alternative wären mir zu statisch, da ich mit einem Kombifeld, einem Eingabefeld und paar Buttons im Formularkopf schnell Daten eingeben und auch mal neue Tabellenspalten hinzufügen will, ohne (während des Unterrichts) noch in dem Entwurf der Unerformulare rumpfuschen zu müssen. Parallel habe ich noch in der Datenansicht die Übersicht der relevanten Daten und kann auch dort noch schnelle Korrekturen vornehmen. Ganz so planlos bin ich nicht rangegangen. Ist aber mein erstes Projekt. Man kann es sicherlich auch eleganter lösen.
pavstern ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.07.2019, 07:10   #8
gpswanderer
MOF Guru
MOF Guru
Standard

Hallo,

Zitat:

und auch mal neue Tabellenspalten hinzufügen will,

wer regelmäßig Tabellenspalten hinzufügen muss, hat in der Tabellenstruktur was falsch gemacht. So etwas sollte in einer korrekt aufgebauten Datenbank niemals notwendig sein, es sei denn, es wurde etwas vergessen.

__________________

Gruß
Klaus
Office2016, Win10
gpswanderer ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.07.2019, 09:25   #9
ebs17
MOF Guru
MOF Guru
Standard

Zitat:

ohne (während des Unterrichts) noch in dem Entwurf der Unerformulare rumpfuschen zu müssen

Das ist also hier keine richtige Datenbank (von der die meisten hier ausgehen), sondern eine Spielwiese, um etwas zu zeigen?

Man sollte es eingangs explizit erwähnen, dass es sich hier um ein individuell verwendetes Demonstrationsmittel handelt. Es macht einen Unterschied, ob man etwas für sich selber löst, um sich die Welt einfacher zu machen oder ob man Lösungen an andere weitergibt und/oder lehrt.
Beispiel Nachschlagefeld in Tabellen: Lehrkräfte und -materialien zeigen diese den Neulingen, ohne auf deren Probleme im wahren Programmierleben hinzuweisen. Später wird dann Zeit dieser Neulinge und vor allem von Forumsleuten verschwendet, um wieder und wieder diese Geschichte zu reparieren.

Code:

ctl.ColumnWidth
Schaue Dir diese Eigenschaft an: http://lmgtfy.com/?q=ms%20access%20f...ltenbreite&s=g

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}:{11}:{12} <= geklammerte Zahlen sind Einzelthemen
Dein Dankeschön: DBWiki => Spende

Geändert von ebs17 (13.07.2019 um 09:34 Uhr).
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.07.2019, 10:24   #10
drambeldier
MOF Koryphäe
MOF Koryphäe
Standard

Moin,

Zitat:

es sei denn, es wurde etwas vergessen.

das könnte aber auch auf den Traum so manchen Anfängers hindeuten: Der allumfassende, endgültige Auswertungsgenerator nach der Devise "Tue, was ich denke".

__________________

Gruß
Ralf
drambeldier ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.07.2019, 12:17   #11
markusxy
MOF Meister
MOF Meister
Standard

Zitat: von pavstern Beitrag anzeigen

aber auch das funktioniert nicht.

Welcher konkrete Punkt funktioniert nicht?
markusxy ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.07.2019, 12:57   #12
knobbi38
MOF User
MOF User
Standard

Hallo pavstern,

an das "DataSheet", also ein Formular in der Datenblattansicht, kommt man nur über Screen.ActiveDatasheet heran. Dann kann man mit der ColumnHidden-Eigenschaft der Steuerelemente Spalten ein-/ausblenden.

Ulrich
knobbi38 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.07.2019, 13:28   #13
pavstern
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Kurzer Hinweis für alle, die meine Idee hinterfragen: es ist sicher keine Planlosigkeit und auch keine Spielwiese. Ich will in der Lage sein, während meines Unterrichts Informationen über meine Schüler zu notieren (je nach Klasse, Fach und besonderen Kriterien - Beobachtungsschwerpunkten - siehe Screenshot im ersten Post). Und da ich im Vorfeld nicht entscheiden kann, zu welchen Beobachtungsschwerpunkten ich was notieren will, soll auch die Tabelle wachsen können. Darum geht es hier aber eigentlich nicht. Das Funktioniert ja so weit.

@Ulrich und Markusxy, danke für eure Hilfe!
das heir geht nicht:

Zitat:

Forms!Formularname!Textfeldname.ColumnHidden = -1

funktioniert nicht.
Ulrich, könntest du bitte etwas konkreter werden? Ich hab mir die Nacht um die Ohrern recherchiert und verschiedene Schreibweise ausprobiert, komme aber nicht weiter. DANKE!
Pavel
pavstern ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.07.2019, 13:36   #14
ebs17
MOF Guru
MOF Guru
Standard

Zitat:

siehe Screenshot im ersten Post

Bei mir stellen sich da nur verwaschene Flächen dar, das Lesen würde den Tatbestand der Körperverletzung erfüllen. => Bilder als PNG sowie mit 72 DPI einstellen

Zitat:

Informationen über meine Schüler ... notieren

Mit einer passenden Datenmodellierung (m:n) erspart man sich recht oft Formularhochdynamik.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}:{11}:{12} <= geklammerte Zahlen sind Einzelthemen
Dein Dankeschön: DBWiki => Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.07.2019, 14:08   #15
markusxy
MOF Meister
MOF Meister
Standard

Hallo Pavel,
mit Datenblättern arbeite ich normal nie.

Dieser reduzierte Test im open Event des Formulars hat aber problemlos funktionert.
Die Textfelder habe ich zuvor alle ausgeblendet.

Code:

Private Sub Form_Open(Cancel As Integer)
    Dim rs As DAO.Recordset2
    Dim TB As TextBox
    Dim LA As Label
    Dim F As DAO.Field2
    Dim i As Long
    Dim FieldsCount As Long
    
    Select Case Me.OpenArgs
    Case 1
    
        Me.RecordSource = "tblAnred"
    Case 2
        Me.RecordSource = "tblNamen"
    End Select
    
    Set rs = Me.RecordsetClone
    With rs
        FieldsCount = .Fields.Count
        For i = 0 To 3
            Set TB = Me.Controls("TE" & i)
            If i < FieldsCount Then
                Set F = .Fields(i)
                TB.ControlSource = F.Name
                TB.Visible = True
            Else
                TB.ColumnHidden = True
            End If
        Next
    End With
End Sub
markusxy ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:35 Uhr.



Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.