Office: (Office 2010) Variable Bedingung in Kreuztabelle für Unterformular

Helfe beim Thema Variable Bedingung in Kreuztabelle für Unterformular in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo Alle zusammen, ich habe ein Problem mit meiner Datenbank. dazu habe ich schon einige Beiträge gelesen und wirklich sehr (!) viel rumprobiert.... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von Phil_Acc, 8. Juli 2017.

  1. Variable Bedingung in Kreuztabelle für Unterformular


    Hallo Alle zusammen,

    ich habe ein Problem mit meiner Datenbank.
    dazu habe ich schon einige Beiträge gelesen und wirklich sehr (!) viel rumprobiert.

    Daher komme ich nun auf euch zu:


    Es generiert sich aus einer Tabelle mit Bewerbern und deren Attributen eine Kreuztabelle über deren Abschlüsse und über Einstellung (Ja/nein) der Bewerbung.
    Weiterhin gibt es u.a. das Feld "Eingang" über welches dann gefiltert werden soll.
    Das Filtern an sich klappt (also als festes Kriterium).
    Bau ich als Filter allerdings eine Variable ein gibt es Probleme.
    Eigentlich möchte ich die Variable aus einem Textfeld meines Unterformulars auslesen, aber selbst die Pop-Up-Abfrage würde jetzt erstmal genügen.

    Gebe ich also nun ein Kriterium ein und lege dies auch unter Parametern fest, werde ich (mehrfach) nach dem entsprechedem Kriterium gefragt.

    Die reine Abfrage funktioniert dann hiermit.

    Sobald ich aber die Abfrage in mein Formular als Unterformular einbauen möchte, bekomme ich folgende Fehlermeldung:

    "Sie können weder eine SQL-Pass-Through-Abfrage noch eine Kreuztabellenabfrage, für die keine Spaltenüberschriften festgelegt ist, als Datensatzquelle eines Unterformulares oder Unterberichtes verwenden".

    Seltsamerweise geht das allerdings schon, wenn ich kein Kriterium hinterlege, dann wird die Abfrage sauber im Unterformular dargestellt.
    Sobald die Variable als Kriterium hinzu kommt, passt sich zwar die Abfrage selbst alleine an, im Unterformular gibt es dann aber obige Fehlermeldung.

    Ich habe auch schon verschiedene fixierte Spaltenüberschriften in den Formulareigenschaften probiert, aber der Fehler bleibt.


    Kann mir da jemand helfen?
    Wie gesagt, ich habe bereits viel dazu gelesen, finde aber kein Trouble-Shooting oder wirkliches Workaround.

    Ich würde mich sehr über eure Hilfe freuen.

    :)
     
    Phil_Acc, 8. Juli 2017
    #1
  2. Wenn der Ausdruck Variable als Synonym für Parameter verwendet wird, könnte die FAQ 3.18 helfen.
     
    Nouba, 10. Juli 2017
    #2
  3. Das hab ich bereits gemacht,

    meinte ich mit:
    sonst würde allgemein ja eine Parameterabfrage nicht funktionieren.

    Das geht ja, nur wenn ich diese Abfrage, mit definiertem Parameter in ein Formular einbaue, dann kommt es zum Fehler.
    Sobald ich die Parameterabfrage entferne, also die Abfrage (Kreuztabelle ohne Bedingung einbaue) geht's auch.



    Also zur kurzen Übersicht:

    Kreuztabelle mit "variablen" Kriterium über Pop-Up: funktioniert
    Kreuztabelle ohne Kriterium in Unterformular: funktioniert
    Kreuztabelle mit "Variablen" Kriterium über PopUp in Unterformular: funktioniert nicht
     
    Phil_Acc, 10. Juli 2017
    #3
  4. Variable Bedingung in Kreuztabelle für Unterformular

    Ich nutze Kreuztabellenabfragen eigentlich nie direkt in Unterformularen, sondern erstelle einmalig ein Formular mit einer ausreichenden Anzahl von Steuerelementen, welches dann über ein Recordset seine Daten bezieht.
     
    Nouba, 10. Juli 2017
    #4
  5. Hi, dass Recordset könnte eine Lösung sein.
    Das Beispiel mit den Überlebenden wäre ja genau das, was ich suche.
    Muss ich nur erstmal verstehen. Bin ja auch noch recht frisch in Access und "leider" schon sehr weit gekommen, ohne alles im Detail verstanden zu haben, grade was Basics angeht *wink.gif*
    Schon mal vielen Dank für den Hint!
     
    Phil_Acc, 10. Juli 2017
    #5
  6. Hi nochmal,

    ich hab mich nun den Tag damit beschäftigt das ganze zu verstehen und den Code entweder umzuschreiben, oder aber erstmal zu replizieren.

    Irgendwie bin ich dafür aber zu blöd.


    Ich bau ein Formular und setzte da als Code dann was ein um eine Kreuztabelle als Recordset anzeigen zu lassen?

    Gefunden hab ich nun das (mit meinem Kreuztabellennamen):


    PHP:
             Private Sub Form_Load()

    Dim db As DAO.Database

    Dim rst 
    As DAO.Recordset

    Set db 
    CurrentDb

    Set rst 
    db.OpenRecordset("qry_21_BewAbschl"dbOpenDynaset)

    End Sub
     
    Phil_Acc, 11. Juli 2017
    #6
  7. Im Hauptformular ist ein Unterformularsteuerelement eingebettet, welches die Daten der Kreuztabellenabfrage über das Formular frmResult darstellt.

    In frmResult müssen genügend Textfeldsteuerelemente vorrätig sein, um alle Felder der Kreuztabellenabfrage darstellen zu können.

    Jedem Textfeld ist noch ein Bezeichnungsfeld zugeordnet, um Überschriften individuell gestalten zu können.

    Im Modul mSupport ist eine Prozedur, mit der ein solches Formular erzeugt werden kann. Kopiere CreateResultForm in Deine Datenbank und führe die Prozedur einmalig z. Bsp. im VBA-Direktbereich aus. Es wird dann ein Formular frmResult mit 64 Textfeldsteuerelementen (T1 - T64) und 64 Bezeichnungsfeldsteuerelementen (L1 - L64) angelegt. Benötigst Du mehr oder weniger Steuerelemente, setze das Argument NumTextLabelPairs beim Aufruf auf den entsprechenden Wert. Die Prozedur kann dann wieder gelöscht werden.

    Jetzt erstellst Du Dein Hauptformular und fügst ein Unterformularsteuerelement im Detailbereich ein, welches als Herkunftsobjekt das soeben erstellte Formular enthält.

    In meinem Beispiel wird der variable Parameter der Kreuztabellenabfrage (das ist ja das eigentliche Thema des Threads) über das Kombifeld im Kopfbereich des Hauptformulars eingestellt. Im Nach Aktualisierung Ereignis des Kombifelds wird das Befüllen des Unterformulars jeweils ausgelöst.

    Im Beim Laden Ereignis des Formulars wird zunächst der Wert des Kombifelds auf 1 (All) festgelegt und die Prozedur zum Befüllen manuell angestoßen. Hier dazu der effektive Code: Code:
    Die Klasse UserColumnSettings ist Beiwerk und speichert nur die vom Benutzer gesetzten Spaltenbreiten - kann als vernachlässigt werden.

    Die eigentliche Arbeit wird nun in PopulateResult verrichtet. Zuerst wird der Name der Kreuztabellenabfrage als Konstante deklariert, sowie einige Variablennamen festgelegt. Code:
    Jetzt wird das Kombifeld ctlState ausgewertet und der Wert in State gespeichert. Code:
    Nun kann die Kreuztabellenabfrage geladen, der Parameter zugewiesen und das Recordsetset geöffnet werden. Code:
    In fields_count wird die Anzahl der vorhandenen Felder gespeichert. Code:
    Ich nehme im weiteren die zuvor erwähnte Klasse aus dem Code herraus. Das Unterformularsteuerelement heißt ctlResult. Auf das darin enthaltene Formular wird sich im folgenden Code bezogen. Es werden alle Steuerelementpaare, die ja eine fortlaufende Zahl als Endung haben, in einer Schleife abgearbeitet. Ziel 1 ist es, nur die Steuerelemente einzublenden, die auch im Recordset vorkommen. Dazu wird die ColumnHidden-Eigenschaft verwendet. Im nächsten Schritt wird der Steuerelementinhalt (ControlSource) auf den korrespondierenden Namen des Recordsets festgelegt bzw. gelöscht. Die Fields-Auflistung des Recordets ist 0-basiert. Ich lege dann noch optional die Textausrichtung für die Spalten fest (1 = linksbündig, 3 = rechtsbündig). Nun wird noch die Überschrift in die Bezeicnungsfelder eingetragen. Weil in meinem Fall Punkte vorkommen und diese zuvor in der Kreuztabellenabfrage durch Unterstriche ersetzt wurden, ersetze ich die Unterstriche wieder durch Punkte. Ganz am Ende wird nun das zuvor geöffnete Recordset (rs) an das Recordset des Formulars übermittelt. Code:
     
    Nouba, 11. Juli 2017
    #7
  8. Variable Bedingung in Kreuztabelle für Unterformular

    Vielen Dank für die ausführliche Erläuterung.

    Leider habe ich aber schon zu beginn ein Problem:

    Wenn ich den Code von "CreateResultForm" im Direktbereich mit "Sub" etc eingebe, kommt der Fehler, dass das so nicht erlaubt ist.
    Ok, hab ich Sub und End Sub entfernt (wie es ja wohl richtig ist), passiert allerdings auch nach dem Enter nichts.

    Dann hab ich den gesamten Code mal in ein Public Sub beim Öffnen eines Formulares kopiert bzw. versuchsweise auch mal auf einen Button in einem Formular, dann kommt der Fehler:


    PHP:
             Sie haben als Einstellung der Ereignisprozedur den Ausdruck Bei Laden eingegebenDieser Ausdruck hat einen Fehler verursachtDeklaration der Prozedur entspricht nicht der Beschreibung des Ereignisses oder einer Prozedur mit demselben Namen
     
    Phil_Acc, 11. Juli 2017
    #8
  9. Wenn Du das komplette Modul kopiert hast, ändere die Konstante in: Code:
    Ansonsten wird der nachfolgende Code nicht gesehen. Siehe auch Bedingte Kompilierung.

    Du kannst aber auch nur die Prozedur selbst in ein allgemeines Modul kopieren - dann hast Du damit nicht zu kämpfen.
     
    Nouba, 11. Juli 2017
    #9
  10. Hi,

    Ja, ich hatte es dann in ein eigenes Modul kopiert. Ging trotzdem nicht.
    Nachdem ich die On Error-Marke inkl. Sprung rausnahm, konnte ich dann die Prozedur ablaufen lassen und es entstand auch das frmResult.

    Ich hab nun nach der Anleitung zwar noch immer Fehler, aber ich versuche die erstmal zu finden um dann ein Replikat zu haben, an dem ich dann meine Anpassungen vornehmen.

    Auf jeden Fall nochmal und soweit schonmal vielen vielen Dank.

    Ggf. komm ich aber noch mal drauf zurück!
     
    Phil_Acc, 11. Juli 2017
    #10
  11. Falls es nicht weiter geht, kannst Du ja auch ein Minimal-Beispiel mit anonymisierten Daten hochladen.
     
  12. Ich hab nun das ganze erstmal nachgebaut.
    Allerdings kommt da nun mein bekannter Fehler (wie in meiner ersten eigenen Datenbank), dass fixierte Spalten für eine Kreuztabellenabfrage fehlen, was ja genau durch diese Form gelöst werden sollte.

    Ich hänge daher mal meinen "Nachbau" an.
    Irgendwas scheint da ja nicht koscher... ;(


    Ansonsten häng ich auch gerne mein Problem meiner Datenbank an.
    Hab das mal um so gut wie alles bereinigt und ein paar Dummy-Daten ergänzt.
    Ggf. ist das ja viel einfacher zu lösen, als der Fall Titanic.

    Ich habe also eine Tabelle 00_Bewerber
    Darin sind alle (und jetzt auch z.T. unnötigen) Daten.

    Daraus habe ich eine Abfrage gebaut, die mir nur noch anzeigt:
    Abschluss, Eingangdatum, Ob der Vertrag angenommen wurde und die "von bis" Spalten, die mehr zu Versuchszwecken waren.

    Ebenfalls habe ich zwei Kreuztabellenabfragen gebaut.
    (qry_21_BewAbschl und qry_21x_BewAbschl)
    Die erste gibt alles in einer Kreuztabelle aus, die zweite ist noch um die Bedingung erweitert, dass der Eingang nach einem Parameter sein muss. (VonVar), dieser wird auch per PopUp abgefragt.

    Im Formular (frm_21_BewAbschl) sind dann beide Abfragen eingebunden.
    Die untere ist die ohne Bedinungen, die obere mit.
    Da es hier eine Bedingung gibt, kommt das PopUp-Fenster (warum auch imemr 2 mal) und dann der Fehler, womit die Abfrage nicht angezeigt wird.
    Und genau dieser Fehler kommt ja auch im Titanic-Beispiel-Nachbau.

    Im Grunde möchte ich also über die Felder im Formular den Bereich als Bedingungen vorgeben, in dem Sich das Eingangsdatum befinden muss und darüber die Kreuztabelle befüllen.
     
    Phil_Acc, 12. Juli 2017
    #12
  13. Variable Bedingung in Kreuztabelle für Unterformular

    Ich habe ein eigenes Formular erstellt, weil Dein Formular nicht auf meinem 13" Notebóok Platz findet.

    PS: Über die verwendeten Namen (Sonder- und Leerzeichen, sowie führende Ziffern in Tabellennamen) und die Verwendung von Nachschlagefeldern solltest Du noch einmal nachdenken.
     
  14. Wow!
    Vielen vielen Dank!
    Das hilft mir so ungemein weiter.


    Ja, das wurde mir mit der Zeit dann auch klar.
    Ist mein erste Access-Arbeit überhaupt und habe versucht schnell zum Ergebnis zu kommen. Quasi ein Lernprozess der hier gut abgebildet ist *biggrin.gif*
    Hatte begonnen und alles erst durch learing-by-doing angefangen zu verstehen und dann erst einige Probleme und Konventionen dadurch kennengelernt.
    Werde wohl einiges jetzt auch noch anpassen, aber bei der nächsten Datenbank wird sowas dann auch von Beginn an richtig gemacht.

    Aber nochmals herzlichsten Dank!
     
    Phil_Acc, 12. Juli 2017
    #14
  15. Hallo nochmal.

    Leider ist mir noch ein Problem aufgefallen. (Hab nun aber sonst soweit alles fertig und es funktioniert bis auf dieses Punkt auch alles)

    In dem eigentlichen Ergebnisformular (frmMain) gibt es "doppelte" Abschlüsse.
    In deiner rückgesendeten Datenbank ist das auch schon zu sehen.

    Wenn man also in frmMain direkt auf z.B. den 21.10.2016 geht, erhält man 2x M.Sc. als Abschluss. (Ich dachte erst, das wäre eine Problematik des Eintrages in der Urtabelle, lässt sich aber mit jedem anderen Abschluss reproduzieren)

    Habe versucht mir das anhand der Kreuztabelle anzuschauen, aber nicht das wirkliche Problem gefunden. Scheint doch alles richtig auf Gruppierung zu sein?
    Vielleicht weißt du da direkt schon das Problem?


    Variable Bedingung in Kreuztabelle für Unterformular dplabschluss_frmmain46uqg.jpg



    Variable Bedingung in Kreuztabelle für Unterformular dplabschluss_frmmain2ycub4.jpg



    Variable Bedingung in Kreuztabelle für Unterformular dplabschluss_frmmain3r4ju5.jpg
     
    Phil_Acc, 16. Juli 2017
    #15
Thema:

Variable Bedingung in Kreuztabelle für Unterformular

Die Seite wird geladen...
  1. Variable Bedingung in Kreuztabelle für Unterformular - Similar Threads - Variable Bedingung Kreuztabelle

  2. Combobox einbinden

    in Microsoft Excel Hilfe
    Combobox einbinden: Hallo, ich bastele an einer Funktion, bei der ich an einer Stelle im Programm eine Combobox aufrufen möchte, die dann mit bestimmten Werten aus einer Tabelle gefüllt ist und dann den gewählten...
  3. VBA:Laufzeitfehler beim Einlesen in Variable

    in Microsoft Excel Hilfe
    VBA:Laufzeitfehler beim Einlesen in Variable: Hallo Excel Freaks, ich habe eine Frage, ein Problem wo ich nicht mehr weiter weis.... In eine Exceldatei kopiere ich mir über Makro auf ein Tabellenblatt von anderen Exceldateien das...
  4. Adressen in eine Zelle bei Übereinstimmung eindeutiger Werte einer anderen Spalte

    in Microsoft Excel Hilfe
    Adressen in eine Zelle bei Übereinstimmung eindeutiger Werte einer anderen Spalte: Hallo zusammen, wer letzteren Thread kennt, hier eine Neuauflage. Problem: Aus Array-Berechnungen (Variablen von Let) ein weiteres Array zu erzeugen, welches für alle eindeutigen Werte aus G die...
  5. Variable Anzahl immer 9er Kombination StellenBerechnung

    in Microsoft Excel Hilfe
    Variable Anzahl immer 9er Kombination StellenBerechnung: Hallo schönen Guten Abend mit Bauchweh, das ich bereits habe bei meiner Nicht weiter kommenden Formel. Folgendes Es lässt sich Schwer beschreiben doch ich versuche es Ich habe in J3 einen Wert...
  6. Makro für variable Anzahl von Datensätzen

    in Microsoft Excel Hilfe
    Makro für variable Anzahl von Datensätzen: Hallo zusammen, ich habe wieder einmal ein kleines Excel-Problem, bei dem Ihr mir sicherlich helfen könnt. Ich habe eine Excel-Liste, das ist ein Export aus einem anderen Programm (siehe...
  7. Variable Länge

    in Microsoft Excel Hilfe
    Variable Länge: Hallo zusammen, ich habe mal eine Frage. In einer Tabelle sind Spalten und Zeilen angegeben. Die Zeilen werden beispielsweise mit A1:H5 angegeben. Nun werden zwei Spalten mit Werten hinzugefügt....
  8. Schuldenplan, Variable Rückzahlung

    in Microsoft Excel Hilfe
    Schuldenplan, Variable Rückzahlung: Erstmal Hallo in die Runde und schönen 2. Advent, Ich habe mal eine Frage und brauche mal ein wenig Schwarm wissen. Ich möchte gerne einen Schuldenzahlungsplan mit mehreren Gläubigern anlegen....

Users found this page by searching for:

  1. access vba parameter an kreuzabfrage übergeben

  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden