{"id":55000936,"date":"2014-06-01T00:00:00","date_gmt":"2020-05-22T21:20:45","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=936"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Datenblattspalten_in_der_Runtime","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Datenblattspalten_in_der_Runtime\/","title":{"rendered":"Datenblattspalten in der Runtime"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/47941458c1824a8891f4916b64ca0277\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Wenn Sie die Daten einer Tabelle oder Abfrage in einem Formular in der Datenblattansicht anzeigen, k&ouml;nnen Sie &uuml;ber das Kontextmen&uuml; komfortabel damit arbeiten &#8211; beispielsweise, um Spalten ein- oder auszublenden. Dieses Kontextmen&uuml; fehlt leider komplett, wenn Sie die Runtime-Version von Access verwenden. Der Benutzer hat dann keine M&ouml;glichkeit, die Spalten nach seinen eigenen W&uuml;nschen ein- oder auszublenden. Dieser Beitrag reicht eine L&ouml;sung nach, mit der Sie auch dieses Feature in Runtime-Datenbanken anbieten k&ouml;nnen.<\/b><\/p>\n<p>Wenn Sie in einem Datenblatt in einem Formular beispielsweise mit der rechten Maustaste auf einen der Spaltenk&ouml;pfe klicken, erscheint das Kontextmen&uuml; aus Bild 1.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_03\/pic_936_001.png\" alt=\"Dieses Kontextmen&uuml; l&auml;sst sich in der Runtime-Version von Access nicht blicken.\" width=\"575\" height=\"391,1276\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Dieses Kontextmen&uuml; l&auml;sst sich in der Runtime-Version von Access nicht blicken.<\/span><\/b><\/p>\n<p>Wenn Sie die Datenbank dann mit der Runtime-Version von Access &ouml;ffnen (oder zumindest im Runtime-Modus), fehlen s&auml;mtliche Kontextmen&uuml;s des Datenblatts.<\/p>\n<p>Das ist unpraktisch, da sich ja damit eine Reihe von Aufgaben gleich an Ort und Stelle erledigen l&auml;sst &#8211; beispielsweise das Ein- und Ausblenden einzelner Spalten.<\/p>\n<p>Bevor wir uns dies im Detail ansehen, noch der Hinweis, wie Sie die Datenbank im Runtime-Modus &ouml;ffnen k&ouml;nnen:<\/p>\n<ul>\n<li>Wenn Sie mit Access 2003 oder &auml;lter arbeiten, erstellen Sie eine Verkn&uuml;pfung auf die Access-Datenbank und f&uuml;gen den Parameter <b>\/runtime <\/b>hinzu.<\/li>\n<li>Oder Sie arbeiten mit einer neueren Version von Access &#8211; dann k&ouml;nnen Sie einfach den Dateinamen mit der Endung <b>.accdr <\/b>versehen und die Datenbank dann im Runtime-Modus &ouml;ffnen.<\/li>\n<\/ul>\n<p>Ob Sie die Datenbank im Runtime-Modus &ouml;ffnen, erkennen Sie beispielsweise daran, dass weder eingebaute Men&uuml;s noch Ribbons sichtbar sind.<\/p>\n<p><b>Spalten ein- und ausblenden<\/b><\/p>\n<p>Der Kontextmen&uuml;befehl <b>Felder ausblenden <\/b>f&uuml;r das Kontextmen&uuml; einer oder mehrerer markierter Spalten blendet die markierten Spalten einfach aus. Wenn Sie den Men&uuml;befehl <b>Felder wieder einblenden <\/b>ausw&auml;hlen, erscheint der Dialog aus Bild 2, mit dem Sie alle Felder komfortabel ein- oder ausblenden k&ouml;nnen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_03\/pic_936_002.png\" alt=\"Komfortables Ein- und Ausblenden von Feldern\" width=\"575\" height=\"364,5564\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Komfortables Ein- und Ausblenden von Feldern<\/span><\/b><\/p>\n<p><b>Kontextmen&uuml; ersetzen<\/b><\/p>\n<p>Unsere erste Aufgabe ist es, das bestehende Kontextmen&uuml; zu ersetzen beziehungsweise in der Runtime-Version von Access &uuml;berhaupt ein Kontextmen&uuml; anzuzeigen, wenn der Benutzer mit der rechten Maustaste auf die Spaltenk&ouml;pfe der Datenblattansicht klickt. <\/p>\n<p>Dazu ben&ouml;tigen wir zun&auml;chst einmal einen Verweis auf die Bibliothek <b>Microsoft Office x.0 Object Library<\/b>. Diesen f&uuml;gen Sie &uuml;ber den Dialog aus Bild 3 hinzu, den Sie vom VBA-Editor aus mit dem Men&uuml;-befehl <b>Extras|Verweise <\/b>&ouml;ffnen. Mit diesem f&uuml;gen Sie dem VBA-Projekt die <b>CommandBars<\/b>-Auflistung und weitere gleich ben&ouml;tigte Elemente hinzu.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_03\/pic_936_003.png\" alt=\"Hinzuf&uuml;gen eines Verweises auf die Office-Bibliothek\" width=\"450\" height=\"347,8586\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Hinzuf&uuml;gen eines Verweises auf die Office-Bibliothek<\/span><\/b><\/p>\n<p>Benutzerdefinierte Kontextmen&uuml;s werden per VBA zusammengestellt und mit der Methode <b>ShowPopup<\/b> des entsprechenden <b>CommandBar<\/b>-Elements angezeigt.<\/p>\n<p>In welcher Ereignisprozedur des Formulars aber l&ouml;sen wir diese Aktionen aus Die L&ouml;sung ist das Ereignis <b>Bei Maustaste ab <\/b>des Formulars selbst. &ouml;ffnen Sie das Formular in der Entwurfsansicht, w&auml;hlen Sie im Eigenschaftsfenster den Eintrag <b>Formular <\/b>aus und selektieren dann den Wert <b>[Ereignisprozedur] <\/b>f&uuml;r die Eigenschaft <b>Bei Maustaste ab<\/b>. Klicken Sie dann auf die Schaltfl&auml;che mit den drei Punkten (&#8230;) rechts von der Eigenschaft, um die entsprechende Prozedur im VBA-Editor anzulegen (s. Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_03\/pic_936_004.png\" alt=\"Ereignis, das beim Dr&uuml;cken der Maustaste ausgel&ouml;st wird\" width=\"450\" height=\"310,4915\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Ereignis, das beim Dr&uuml;cken der Maustaste ausgel&ouml;st wird<\/span><\/b><\/p>\n<p>Diese Prozedur f&uuml;llen Sie wie in Listing 1. Die Prozedur deklariert je eine Objektvariable f&uuml;r ein <b>CommandBar<\/b>&#8211; und ein <b>CommandBarButton<\/b>-Objekt sowie eine Variable, welche den Namen des zu erzeugenden Kontextmen&uuml;s speichert (<b>strKontextmenue<\/b>).<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_MouseDown(Button<span style=\"color:blue;\"> As Integer<\/span>, Shift<span style=\"color:blue;\"> As Integer<\/span>, X<span style=\"color:blue;\"> As Single<\/span>, Y<span style=\"color:blue;\"> As Single<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>cbr<span style=\"color:blue;\"> As <\/span>CommandBar\r\n     <span style=\"color:blue;\">Dim <\/span>cbc<span style=\"color:blue;\"> As <\/span>CommandBarButton\r\n     <span style=\"color:blue;\">Dim <\/span>strKontextmenue<span style=\"color:blue;\"> As String<\/span>\r\n     Select Case Button\r\n         <span style=\"color:blue;\">Case <\/span>2\r\n             strKontextmenue = \"cbrDatenblatt\"\r\n             On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n             CommandBars(strKontextmenue).Delete\r\n             <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n             <span style=\"color:blue;\">Set<\/span> cbr = CommandBars.Add(strKontextmenue, msoBarPopup, False, <span style=\"color:blue;\">True<\/span>)\r\n             <span style=\"color:blue;\">Set<\/span> cbc = cbr.Controls.Add(msoControlButton)\r\n             <span style=\"color:blue;\">With<\/span> cbc\r\n                 .Caption = \"Spalten ausblenden\"\r\n                 .OnAction = \"=SpaltenAusblenden()\"\r\n             End <span style=\"color:blue;\">With<\/span>\r\n             <span style=\"color:blue;\">Set<\/span> cbc = cbr.Controls.Add(msoControlButton)\r\n             <span style=\"color:blue;\">With<\/span> cbc\r\n                 .Caption = \"Spalten bearbeiten\"\r\n                 .OnAction = \"=SpaltenDialog()\"\r\n             End <span style=\"color:blue;\">With<\/span>\r\n             cbr.ShowPopup\r\n     <span style=\"color:blue;\">End Select<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Anzeigen eines Kontextmen&uuml;s f&uuml;r die Spaltenk&ouml;pfe des Datenblatts<\/span><\/b><\/p>\n<p>Die Prozedur pr&uuml;ft dann zun&auml;chst anhand des Parameters <b>Button<\/b>, welche Maustaste der Benutzer angeklickt. Wir wollen eine Aktion nur f&uuml;r die rechte Maustaste ausf&uuml;hren, also pr&uuml;fen wir auf den Wert <b>2<\/b>.<\/p>\n<p>In diesem Fall legen wir zun&auml;chst den Namen des Kontextmen&uuml;s fest (<b>cbrDatenblatt<\/b>) und speichern diesen in der Variablen <b>strKontextmenue<\/b>. Dann deaktivieren wir die Fehlerbehandlung und l&ouml;schen ein eventuell bereits vorhandenes <b>CommandBar<\/b>-Objekt gleichen Namens.<\/p>\n<p>Die Fehlerbehandlung haben wir ausgeschaltet, damit das Fehlen dieses Kontextmen&uuml;s keinen Fehler beim Versuch ausl&ouml;st, dieses zu l&ouml;schen.<\/p>\n<p>Nun erstellen wir mit der <b>Add<\/b>-Methode der <b>CommandBars<\/b>-Auflistung ein neues <b>CommandBar<\/b>-Objekt und legen f&uuml;r dieses fest, dass es den in <b>strKontextmenue <\/b>gespeicherten Namen erhalten, als Kontextmen&uuml; angezeigt werden (<b>msoBarPopup<\/b>) und tempor&auml;r erstellt werden soll.<\/p>\n<p>Danach folgen bereits die beiden ersten Befehle, mit denen wir das Ausblenden der aktuell markierten Spalten sowie die Anzeige eines Dialogs zum Ein- und Ausblenden aller Spalten realisieren wollen.<\/p>\n<p>Der Erste wird durch ein <b>CommandBarButton<\/b>-Objekt ausgel&ouml;st, das die Beschriftung <b>Spalten ausblenden <\/b>tr&auml;gt und beim Anklicken die &uuml;ber die <b>OnAction<\/b>-Eigenschaft festgelegte VBA-Funktion <b>SpaltenAusblenden <\/b>aufruft. Auf &auml;hnliche Weise f&uuml;gen wir die zweite Schaltfl&auml;che mit der Beschriftung <b>Spalten bearbeiten <\/b>und der VBA-Funktion <b>SpaltenDialog <\/b>hinzu.<\/p>\n<p>Schlie&szlig;lich zeigt die <b>ShopPopup<\/b>-Methode des mit der Variablen <b>cbr <\/b>referenzierten <b>CommandBar<\/b>-Objekts das Kontextmen&uuml; an.<\/p>\n<p>Dieses erscheint nun zun&auml;chst wie in Bild 5.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_03\/pic_936_005.png\" alt=\"Anzeige des Kontextmen&uuml;s\" width=\"450\" height=\"209,9352\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Anzeige des Kontextmen&uuml;s<\/span><\/b><\/p>\n<p><b>Achtung, Fehlerbehandlung au&szlig;er Betrieb!<\/b><\/p>\n<p>An dieser Stelle ist es sehr wichtig, auf die Besonderheit der Fehlerbehandlung nach dem Aufruf von Funktionen &uuml;ber Kontextmen&uuml;-Eintr&auml;ge hinzuweisen.<\/p>\n<p>Wenn Sie dazu eine VBA-Funktion verwenden, die f&uuml;r die Eigenschaft <b>OnAction <\/b>angegeben wird, ist die Fehlerbehandlung in der VBA-Funktion au&szlig;er Kraft gesetzt. Wenn ein Fehler auftritt, wird einfach der nachfolgende Befehl ausgef&uuml;hrt, und wenn ein Fehler in einer weiteren durch die Funktion aufgerufenen Routine entsteht, wird diese augenblicklich beendet und die aufrufende Funktion fortgesetzt. Sollte also einmal etwas nicht wie erwartet funktionieren, sollten Sie diese M&ouml;glichkeit nicht au&szlig;er Acht lassen.<\/p>\n<p><b>Spalten ausblenden<\/b><\/p>\n<p>Die erste Funktion namens <b>SpaltenAusblenden<\/b> soll die aktuell markierten Spalten ausblenden. Dazu f&uuml;gen Sie die Funktion aus Listing 2 zum Klassenmodul des Formulars hinzu.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>SpaltenAusblenden()\r\n     <span style=\"color:blue;\">Dim <\/span>ctl<span style=\"color:blue;\"> As <\/span>Control\r\n     <span style=\"color:blue;\">Dim <\/span>strControlsource<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>fld<span style=\"color:blue;\"> As <\/span>DAO.Field\r\n     For Each ctl In Me.Controls\r\n         On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n         strControlsource = \"\"\r\n         strControlsource = ctl.ControlSource\r\n         <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strControlsource) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n             For Each fld In Me.Recordset.Fields\r\n                 <span style=\"color:blue;\">If <\/span>strControlsource = fld.Name<span style=\"color:blue;\"> Then<\/span>\r\n                     <span style=\"color:blue;\">If <\/span>ctl.ColumnOrder &gt;= Me.Sel<span style=\"color:blue;\">Left<\/span> - 1 And ctl.ColumnOrder &lt; Me.Sel<span style=\"color:blue;\">Left<\/span> + Me.SelWidth - 1<span style=\"color:blue;\"> Then<\/span>\r\n                         ctl.ColumnHidden = <span style=\"color:blue;\">True<\/span>\r\n                     <span style=\"color:blue;\">End If<\/span>\r\n                     <span style=\"color:blue;\">Exit For<\/span>\r\n                 <span style=\"color:blue;\">End If<\/span>\r\n             <span style=\"color:blue;\">Next<\/span> fld\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> ctl\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Ausblenden der aktuellen Spalten<\/span><\/b><\/p>\n<p>Die Funktion durchl&auml;uft alle Steuerelemente des Formulars in einer <b>For Each<\/b>-Schleife und referenziert das jeweils aktuelle Steuerelement mit der Variablen <b>ctl<\/b>. Dann schalten wir die Fehlerbehandlung aus, denn wir wollen, wenn es sich bei dem Steuerelement um ein gebundenes Steuerelement handelt, den Namen des gebundenen Feldes in der Variablen <b>strControlsource <\/b>speichern. Ist das Steuerelement nicht an ein Feld der Datenherkunft gebunden, l&ouml;st dies einen Fehler aus, der allerdings nicht angezeigt wird, und <b>strControlsource <\/b>beh&auml;lt die zuvor zugewiesene leere Zeichenkette (<b>&#8222;&#8220;<\/b>).<\/p>\n<p>Ist die L&auml;nge der in <b>strControlsource <\/b>enthaltenen Zeichenkette gr&ouml;&szlig;er als <b>0<\/b>, schaut sich die Funktion das Steuerelement genauer an. Nun muss sie n&auml;mlich pr&uuml;fen, ob es sich tats&auml;chlich um ein Steuerelement handelt, das an eines der Felder der Datenherkunft gebunden ist &#8211; es kann ja auch sein, dass das Feld einen berechneten Ausdruck enth&auml;lt.<\/p>\n<p>Dazu durchl&auml;uft die Prozedur in einer <b>For Each<\/b>-Schleife alle Felder des Recordsets des Formulars und gleicht den Inhalt der Variablen <b>strControlsource <\/b>mit dem Namen des aktuellen Feldes ab.<\/p>\n<p>Sind beide Werte gleich, erfolgt eine weitere Pr&uuml;fung &#8211; n&auml;mlich ob die Spalte, auf die sich das Steuerelement bezieht, vom Benutzer markiert wurde. Dazu zieht die Funktion drei Informationen hinzu: Die in der Eigenschaft <b>Column-Order <\/b>des Steuerelements enthaltene Zahl, welche die Reihenfolge repr&auml;sentiert sowie die Eigenschaften <b>SelLeft <\/b>und <b>SelWidth <\/b>des Formulars. <b>SelLeft <\/b>liefert die Zahl der ersten markierten Spalte, <b>SelWidth <\/b>die Anzahl der markierten Spalten.<\/p>\n<p>Dabei beginnt die Z&auml;hlung von <b>SelWidth <\/b>mit dem Wert <b>2<\/b>, die von <b>ColumnOrder <\/b>mit <b>1<\/b>. Dementsprechend pr&uuml;ft das Kriterium der <b>If&#8230;Then<\/b>-Bedingung, ob die <b>ColumnOrder <\/b>des Steuerelements gr&ouml;&szlig;er gleich dem Wert von <b>SelLeft &#8211; 1 <\/b>ist oder ob <b>ColumnOrder <\/b>kleiner oder gleich <b>Me.SelLeft + Me.SelWidth &#8211; 1 <\/b>ist. Ist das der Fall, stellt die Funktion den Wert der Eigenschaft <b>ColumnHidden <\/b>f&uuml;r das aktuelle Steuerelement und somit f&uuml;r die entsprechende Spalte des Datenblatts auf den Wert <b>True <\/b>ein.<\/p>\n<p>Die innere <b>For Each<\/b>-Schleife wird in diesem Fall verlassen, sonst sucht die Funktion weiter nach einem Feldnamen, der mit dem Inhalt von <b>strControlsource <\/b>&uuml;bereinstimmt.<\/p>\n<p>Diese Schritte wiederholt die Funktion f&uuml;r alle Steuerelemente. Auf diese Weise k&ouml;nnen Sie eines oder mehrere Spalten des Datenblatts markieren und per Kontextmen&uuml; ausblenden.<\/p>\n<p><b>Ein-\/Ausblenden-Formular<\/b><\/p>\n<p>Nun stellt sich die Frage: Wie blenden wir die ausgeblendeten Spalten wieder ein &#8211; und k&ouml;nnen wir das Ein- und Ausblenden noch komfortabler gestalten<\/p>\n<p>Dazu bauen wir im Prinzip den Dialog nach, den Access f&uuml;r den Kontextmen&uuml;-Eintrag <b>Felder wieder einblenden <\/b>anzeigt (siehe Screenshot weiter oben).<\/p>\n<p>Zun&auml;chst ben&ouml;tigen wir dazu eine VBA-Funktion, die beim Anklicken des dazu bereits angelegten Kontextmen&uuml;-Eintrags ausgef&uuml;hrt wird.<\/p>\n<p>Die Funktion sieht wie in Listing 3 aus und &ouml;ffnet mit der <b>DoCmd.OpenForm<\/b>-Methode das Formular <b>frmFelderEinAusblenden<\/b> als modalen Dialog. Dabei &uuml;bergibt die Funktion per &ouml;ffnungsargument den Namen des aufrufenden Formulars an das Formular <b>frmFelderEinAusblenden<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>SpaltenDialog()\r\n     DoCmd.OpenForm \"frmFelderEinAusblenden\", WindowMode:=acDialog, OpenArgs:=Me.Name\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Aufrufen des Formulars zum Ein- und Ausblenden von Spalten<\/span><\/b><\/p>\n<p>Dieses Formular sieht im Entwurf wie in Bild 6 aus. Es enth&auml;lt nur zwei Steuerelemente: ein Kontrollk&auml;stchen namens <b>Anzeigen <\/b>und ein Textfeld namens <b>Feldname <\/b>mit jeweils gleichnamigen Steuerelementinhalten.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_03\/pic_936_006.png\" alt=\"Entwurf des Formulars frmFelderEinAusblenden\" width=\"450\" height=\"117,9368\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Entwurf des Formulars frmFelderEinAusblenden<\/span><\/b><\/p>\n<p>Damit kommen wir gleich zur Datenherkunft: Diese besteht aus einer Abfrage, welche die Tabelle <b>tblFelder <\/b>als Datenquelle einsetzt (s. Bild 7). Diese Tabelle enth&auml;lt die folgenden Felder:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_03\/pic_936_007.png\" alt=\"Entwurf der Tabelle tblFelder\" width=\"450\" height=\"352,0295\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Entwurf der Tabelle tblFelder<\/span><\/b><\/p>\n<ul>\n<li><b>FeldID<\/b>: Prim&auml;rschl&uuml;sselfeld der Tabelle<\/li>\n<li><b>Feldname<\/b>: Name des Feldes<\/li>\n<li><b>Anzeigen<\/b>: <b>Ja\/Nein<\/b>-Feld, das angibt, ob das Feld angezeigt werden soll<\/li>\n<li><b>ReihenfolgeID<\/b>: Reihenfolge-Index des Feldes im Datenblatt des Formulars, das die Felder anzeigt<\/li>\n<\/ul>\n<p>Die Abfrage auf Basis dieser Tabelle enth&auml;lt alle Felder der Tabelle, sortiert die Datens&auml;tze aber zus&auml;tzlich nach dem Wert des Feldes <b>ReihenfolgeID<\/b> (s. Bild 8). Dies geschieht, damit die Datens&auml;tze sp&auml;ter im Formular in der gleichen Reihenfolge angezeigt werden k&ouml;nnen wie im Originalformular.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_03\/pic_936_008.png\" alt=\"Datenherkunft des Formulars frmFelderEinAusblenden\" width=\"450\" height=\"256,8103\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Datenherkunft des Formulars frmFelderEinAusblenden<\/span><\/b><\/p>\n<p>F&uuml;r das Formular stellen Sie au&szlig;erdem die Eigenschaft <b>Standardansicht <\/b>auf <b>Endlosformular <\/b>und <b>Navigationsschaltfl&auml;chen <\/b>und <b>Datensatzmarkierer <\/b>auf <b>Nein <\/b>ein. Au&szlig;erdem soll das Formular keinen neuen Datensatz anzeigen, daher erh&auml;lt die Eigenschaft <b>Anf&uuml;gen zulassen <\/b>ebenfalls den Wert <b>Nein<\/b>.<\/p>\n<p>Schlie&szlig;lich sollten Sie aus optischen Gr&uuml;nden noch die alternierende Hintergrundfarbe auf Wei&szlig; einstellen (gilt nur f&uuml;r neuere Access-Versionen).<\/p>\n<p><b>F&uuml;llen des Ein-\/Ausblenden-Formulars<\/b><\/p>\n<p>Die Hauptarbeit bei der Programmierung des Formulars <b>frmFelderEinAusblenden <\/b>liegt im Ermitteln der Datenherkunft f&uuml;r das Formular.<\/p>\n<p>Die Tabelle <b>tblFelder <\/b>ist n&auml;mlich noch nicht von vornherein gef&uuml;llt, sondern soll erst noch mit den Feldern der Datenblattansicht des Formulars und den entsprechenden Eigenschaften ausgestattet werden.<\/p>\n<p>Diese Aufgabe erledigt die Ereignisprozedur aus Listing 4, die durch das Ereignis <b>Beim Laden <\/b>des Formulars ausgel&ouml;st wird. Die Prozedur f&uuml;llt zun&auml;chst die Variable <b>db <\/b>mit einem Verweis auf das aktuelle <b>Database<\/b>-Objekt. Dann leert sie die Tabelle <b>tblFelder<\/b>, die gegebenenfalls noch die Daten vom vorherigen Aufruf des Formulars <b>frmFelderEinAusblenden <\/b>enth&auml;lt. Beim Aufruf des Formulars hat das aufrufende Formular seinen Namen per &ouml;ffnungsargument &uuml;bergeben. Dieses wird nun aus der Eigenschaft <b>OpenArgs <\/b>ausgelesen und in die Variable <b>strFormular <\/b>eingetragen.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Data8String\r\n     <span style=\"color:blue;\">Dim <\/span>intReihenfolgeID<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strControlsource<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>ctl<span style=\"color:blue;\"> As <\/span>Control\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     db.Execute \"DELETE FROM tblFelder\", dbFailOnError\r\n     strFormular = Me.OpenArgs\r\n     <span style=\"color:blue;\">Set<\/span> frm = Forms(strFormular)\r\n     strDatenherkunft = Forms(strFormular).RecordSource\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(strDatenherkunft, dbOpenDynaset)\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">InStr<\/span>(1, strDatenherkunft, \" WHERE \") = 0<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> <span style=\"color:blue;\">Left<\/span>(strDatenherkunft, 7) = \"SELECT \"<span style=\"color:blue;\"> Then<\/span>\r\n             strDatenherkunft = \"SELECT * FROM \" & strDatenherkunft & \" WHERE 1=2\"\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         strDatenherkunft = strDatenherkunft & \" AND 1=2\"\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     For Each fld In rst.Fields\r\n         bolAnzeigen = <span style=\"color:blue;\">True<\/span>\r\n         intReihenfolgeID = 0\r\n         For Each ctl In frm.Controls\r\n             On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n             strControlsource = \"\"\r\n             strControlsource = ctl.ControlSource\r\n             <span style=\"color:blue;\">If <\/span>strControlsource = fld.Name<span style=\"color:blue;\"> Then<\/span>\r\n                 bolAnzeigen = <span style=\"color:blue;\">Not<\/span> ctl.ColumnHidden\r\n                 intReihenfolgeID = ctl.ColumnOrder\r\n                 <span style=\"color:blue;\">If <\/span>intReihenfolgeID = 0<span style=\"color:blue;\"> Then<\/span>\r\n                     intReihenfolgeID = 100\r\n                 <span style=\"color:blue;\">End If<\/span>\r\n                 <span style=\"color:blue;\">Exit For<\/span>\r\n             <span style=\"color:blue;\">End If<\/span>\r\n             <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n         <span style=\"color:blue;\">Next<\/span> ctl\r\n         db.Execute \"INSERT INTO tblFelder(Feldname, Anzeigen, ReihenfolgeID) VALUES(''\" & fld.Name & \"'', \" _\r\n             & CInt(bolAnzeigen) & \", \" & intReihenfolgeID & \")\", dbFailOnError\r\n     <span style=\"color:blue;\">Next<\/span> fld\r\n     Me.Requery\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: F&uuml;llen der Datenherkunft des Formulars frmFelderEinAusblenden<\/span><\/b><\/p>\n<p>Da wir in der vorliegenden Prozedur und auch noch in einer weiteren Prozedur auf die Steuerelemente dieses Formulars zugreifen m&uuml;ssen, speichern wir einen Verweis auf dieses Formular in der wie folgt im Kopf des Klassenmoduls <b>Form_frmFelderEinAusblenden <\/b>deklarierten Variablen:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>frm<span style=\"color:blue;\"> As <\/span>Form<\/pre>\n<p>Diese f&uuml;llt die Prozedur dann mit dem entsprechenden Element der Forms-Auflistung. Nun ermittelt die Prozedur aus der Eigenschaft <b>RecordSource <\/b>die Datenherkunft des Formulars und speichert diese in der Variablen <b>strDatenherkunft<\/b>.<\/p>\n<p>Auf Basis der Datenherkunft erstellt die Prozedur anschlie&szlig;end ein Recordset-Objekt. Da wir allerdings nur an den Feldern der Datenherkunft interessiert sind und nicht an den enthaltenen Daten, wollen wir der Datenherkunft noch die Bedingung <b>1=2 <\/b>hinzuf&uuml;gen, damit das im Anschluss erstellte Recordset keine Datens&auml;tze zur&uuml;ckliefert.<\/p>\n<p>Nun kann es sich bei der Datenherkunft um einen Tabellen- oder Abfragenamen handeln oder auch um eine <b>SELECT<\/b>-Abfrage. Das nun folgende verschachtelte <b>If&#8230;Then<\/b>-Konstrukt pr&uuml;ft zun&auml;chst, ob die Datenherkunft mit <b>SELECT <\/b>beginnt.<\/p>\n<p>Falls nein, stellt sie dem Ausdruck in <b>strDatenherkunft <\/b>ein <b>SELECT * FROM <\/b>voran und f&uuml;gt hinten ein <b>WHERE 1=2 <\/b>an. So wird aus <b>tblArtikel <\/b>die Datenherkunft <b>SELECT * FROM tblArtikel WHERE 1=2<\/b>. Enth&auml;lt <b>strDatenherkunft <\/b>hingegen bereits den Ausdruck <b>WHERE<\/b>, h&auml;ngt die Prozedur lediglich das Kriterium <b>1=2 <\/b>mit dem <b>AND<\/b>-Operator an die bestehende <b>WHERE<\/b>-Klausel an.<\/p>\n<p>Nun erstellt die Prozedur ein Recordset auf Basis von <b>strDatenherkunft<\/b> und durchl&auml;uft in einer <b>For Each<\/b>-Schleife alle <b>Field<\/b>-Elemente der <b>Fields<\/b>-Auflistung des Recordsets. Wir gehen grunds&auml;tzlich davon aus, dass ein Feld eingeblendet werden soll und stellen die Variable <b>bolAnzeigen <\/b>auf den Wert <b>True <\/b>ein. Au&szlig;erdem legen wir f&uuml;r die Reihenfolge den Wert <b>0 <\/b>fest &#8211; f&uuml;r den Fall, dass diese nicht ermittelt werden kann.<\/p>\n<p>Nun durchl&auml;uft die Prozedur alle Elemente der <b>Controls<\/b>-Auflistung des Formulars mit der Datenblattansicht. Bei ausgeschalteter Fehlerbehandlung liest die Prozedur dann den Steuerelementinhalt des aktuell mit <b>ctl<\/b> referenzierten Steuerelements in die Variable <b>strControlSource <\/b>ein &#8211; oder weist dieser eine leere Zeichenkette f&uuml;r den Fall zu, dass das Steuerelement keinen <b>Steuerelementinhalt <\/b>aufweist.<\/p>\n<p>Dies ist wieder das gleiche Spiel, das Sie bereits weiter oben in &auml;hnlicher Form kennengelernt haben: Nun pr&uuml;ft die Prozedur n&auml;mlich, ob der <b>Steuerelementinhalt <\/b>des aktuellen Steuerelements mit dem Namen des aktuell mit <b>fld <\/b>referenzierten Feldes der Datenherkunft &uuml;bereinstimmt. Falls ja, stellt die Prozedur den Wert von <b>bolAnzeigen <\/b>auf den negierten Wert der Eigenschaft <b>ColumnHidden <\/b>des Steuerelements und somit der entsprechenden Spalte im Formular ein. <b>intReihenfolge <\/b>erh&auml;lt den Wert der Eigenschaft <b>Column-Order <\/b>des Steuerelements.<\/p>\n<p>F&uuml;r Steuerelemente, deren Reihenfolge nicht ermittelt werden konnte, stellt die Prozedur den Wert <b>100 <\/b>f&uuml;r <b>intReihenfolgeID <\/b>ein. In diesem Fall verl&auml;sst die Prozedur nun die innere <b>For Each<\/b>-Schleife &uuml;ber die Steuerelemente des Formulars.<\/p>\n<p>Nun hat die Prozedur die erforderlichen Informationen zusammen, um einen Datensatz in die Tabelle <b>tblFelder <\/b>zu schreiben. Dies geschieht mit einer <b>INSERT INTO<\/b>-SQL-Anweisung, die in einem Beispiel etwa so aussieht:<\/p>\n<pre>INSERT INTO tblFelder(Feldname, Anzeigen, ReihenfolgeID) VALUES(''ArtikelID'', 0, 2)<\/pre>\n<p>Das Feld <b>Anzeigen <\/b>des Datensatzes f&uuml;r das Feld <b>ArtikelID <\/b>erh&auml;lt den Wert <b>0<\/b>, was bedeutet, dass das Feld aktuell ausgeblendet ist. Die Reihenfolge ist gegen&uuml;ber der Originalreihenfolge ver&auml;ndert, weshalb das Feld <b>ReihenfolgeID <\/b>den Wert <b>2 <\/b>enth&auml;lt und nicht <b>1<\/b>. Die Anweisung f&uuml;r die folgende Spalte sieht etwa wie folgt aus:<\/p>\n<pre>INSERT INTO tblFelder(Feldname, Anzeigen, ReihenfolgeID) VALUES(''Artikelname'', -1, 1)<\/pre>\n<p>Damit h&auml;tten wir auch gleich das Feld, das als erste Spalte angezeigt wird. Das Feld <b>Anzeigen <\/b>erh&auml;lt den Wert <b>-1<\/b>, die Spalte ist also aktuell eingeblendet.<\/p>\n<p>Nach dem Durchlaufen aller Felder der Datenherkunft des aufrufenden Formulars, hier <b>frmArtikel<\/b>, aktualisiert die Prozedur noch die Datenherkunft des Formulars <b>frmFelderEinAusblenden <\/b>mit der <b>Requery<\/b>-Methode.<\/p>\n<p>Das Ergebnis sieht nun wie in Bild 9 aus &#8211; die nicht sichtbaren Spalten werden ohne Haken im Kontrollk&auml;stchen angezeigt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_03\/pic_936_009.png\" alt=\"Das Formular frmFelderEinAusblenden im Einsatz\" width=\"700\" height=\"379,9724\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Das Formular frmFelderEinAusblenden im Einsatz<\/span><\/b><\/p>\n<p>Nun fehlt noch eine Ereignisprozedur, die daf&uuml;r sorgt, dass der Benutzer durch Aktivieren oder Deaktivieren der einzelnen Kontrollk&auml;stchen Spalten ein- und ausblenden kann. Diese Prozedur soll durch das Ereignis <b>Nach Aktualisierung <\/b>des Kontrollk&auml;stchens ausgef&uuml;hrt werden und sieht wie in Listing 5 aus.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Anzeigen_AfterUpdate()\r\n     <span style=\"color:blue;\">If <\/span>Me.Anzeigen = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n         frm.Controls(Me.Feldname).ColumnHidden = <span style=\"color:blue;\">False<\/span>\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         frm.Controls(Me.Feldname).ColumnHidden = <span style=\"color:blue;\">True<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: Ein- und Ausblenden von Spalten per Klick auf ein Kontrollk&auml;stchen<\/span><\/b><\/p>\n<p>Die Prozedur pr&uuml;ft, ob der Wert des Feldes <b>Anzeigen True <\/b>oder <b>False <\/b>ist. In ersterem Fall stellt sie die Eigenschaft <b>ColumnHide <\/b>des Feldes mit dem in Feldname gespeicherten Namen im Zielformular auf <b>False <\/b>ein und umgekehrt.<\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Mit diesen beiden Funktionen haben wir bereits einen Teil des Kontextmen&uuml;s f&uuml;r Datenbl&auml;tter nachgebildet, das in der Runtime-Version von Access nicht angezeigt wird.<\/p>\n<p>Die &uuml;brigen Befehle lassen sich auf &auml;hnliche Weise nachbauen &#8211; wir werden in einer der folgenden Ausgaben von <b>Access im Unternehmen <\/b>darauf eingehen.<\/p>\n<p>Au&szlig;erdem f&uuml;gen wir dort noch entsprechende Icons zum Kontextmen&uuml; hinzu.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>DatenblattInDerRuntime.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{F21E548E-3FB7-4F88-88CE-9251FB553A2B}\/aiu_936.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn Sie die Daten einer Tabelle oder Abfrage in einem Formular in der Datenblattansicht anzeigen, k&ouml;nnen Sie &uuml;ber das Kontextmen&uuml; komfortabel damit arbeiten &#8211; beispielsweise, um Spalten ein- oder auszublenden. Dieses Kontextmen&uuml; fehlt leider komplett, wenn Sie die Runtime-Version von Access verwenden. Der Benutzer hat dann keine M&ouml;glichkeit, die Spalten nach seinen eigenen W&uuml;nschen ein- oder auszublenden. Dieser Beitrag reicht eine L&ouml;sung nach, mit der Sie auch dieses Feature in Runtime-Datenbanken anbieten k&ouml;nnen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662014,66032014,44000028],"tags":[],"class_list":["post-55000936","post","type-post","status-publish","format-standard","hentry","category-662014","category-66032014","category-Ergonomie_und_Benutzeroberflaeche"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Datenblattspalten in der Runtime - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Datenblattspalten_in_der_Runtime\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Datenblattspalten in der Runtime\" \/>\n<meta property=\"og:description\" content=\"Wenn Sie die Daten einer Tabelle oder Abfrage in einem Formular in der Datenblattansicht anzeigen, k&ouml;nnen Sie &uuml;ber das Kontextmen&uuml; komfortabel damit arbeiten - beispielsweise, um Spalten ein- oder auszublenden. Dieses Kontextmen&uuml; fehlt leider komplett, wenn Sie die Runtime-Version von Access verwenden. Der Benutzer hat dann keine M&ouml;glichkeit, die Spalten nach seinen eigenen W&uuml;nschen ein- oder auszublenden. Dieser Beitrag reicht eine L&ouml;sung nach, mit der Sie auch dieses Feature in Runtime-Datenbanken anbieten k&ouml;nnen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Datenblattspalten_in_der_Runtime\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T21:20:45+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/47941458c1824a8891f4916b64ca0277\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"15\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattspalten_in_der_Runtime\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattspalten_in_der_Runtime\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Datenblattspalten in der Runtime\",\"datePublished\":\"2020-05-22T21:20:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattspalten_in_der_Runtime\\\/\"},\"wordCount\":2737,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattspalten_in_der_Runtime\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/47941458c1824a8891f4916b64ca0277\",\"articleSection\":[\"2014\",\"3\\\/2014\",\"Ergonomie und Benutzeroberfl\u00e4che\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattspalten_in_der_Runtime\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattspalten_in_der_Runtime\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattspalten_in_der_Runtime\\\/\",\"name\":\"Datenblattspalten in der Runtime - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattspalten_in_der_Runtime\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattspalten_in_der_Runtime\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/47941458c1824a8891f4916b64ca0277\",\"datePublished\":\"2020-05-22T21:20:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattspalten_in_der_Runtime\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattspalten_in_der_Runtime\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattspalten_in_der_Runtime\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/47941458c1824a8891f4916b64ca0277\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/47941458c1824a8891f4916b64ca0277\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Datenblattspalten_in_der_Runtime\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Datenblattspalten in der Runtime\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Datenblattspalten in der Runtime - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Datenblattspalten_in_der_Runtime\/","og_locale":"de_DE","og_type":"article","og_title":"Datenblattspalten in der Runtime","og_description":"Wenn Sie die Daten einer Tabelle oder Abfrage in einem Formular in der Datenblattansicht anzeigen, k&ouml;nnen Sie &uuml;ber das Kontextmen&uuml; komfortabel damit arbeiten - beispielsweise, um Spalten ein- oder auszublenden. Dieses Kontextmen&uuml; fehlt leider komplett, wenn Sie die Runtime-Version von Access verwenden. Der Benutzer hat dann keine M&ouml;glichkeit, die Spalten nach seinen eigenen W&uuml;nschen ein- oder auszublenden. Dieser Beitrag reicht eine L&ouml;sung nach, mit der Sie auch dieses Feature in Runtime-Datenbanken anbieten k&ouml;nnen.","og_url":"https:\/\/access-im-unternehmen.de\/Datenblattspalten_in_der_Runtime\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T21:20:45+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/47941458c1824a8891f4916b64ca0277","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"15\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Datenblattspalten_in_der_Runtime\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Datenblattspalten_in_der_Runtime\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Datenblattspalten in der Runtime","datePublished":"2020-05-22T21:20:45+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Datenblattspalten_in_der_Runtime\/"},"wordCount":2737,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Datenblattspalten_in_der_Runtime\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/47941458c1824a8891f4916b64ca0277","articleSection":["2014","3\/2014","Ergonomie und Benutzeroberfl\u00e4che"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Datenblattspalten_in_der_Runtime\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Datenblattspalten_in_der_Runtime\/","url":"https:\/\/access-im-unternehmen.de\/Datenblattspalten_in_der_Runtime\/","name":"Datenblattspalten in der Runtime - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Datenblattspalten_in_der_Runtime\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Datenblattspalten_in_der_Runtime\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/47941458c1824a8891f4916b64ca0277","datePublished":"2020-05-22T21:20:45+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Datenblattspalten_in_der_Runtime\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Datenblattspalten_in_der_Runtime\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Datenblattspalten_in_der_Runtime\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/47941458c1824a8891f4916b64ca0277","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/47941458c1824a8891f4916b64ca0277"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Datenblattspalten_in_der_Runtime\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Datenblattspalten in der Runtime"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000936","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000936"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000936\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000936"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000936"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000936"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}