none
Absturz bei Formularerzeugung (VBA-Access 2003)

    Frage

  • Hallo Leute,

    ich möchte das Ergebnis einer beliebigen Abfrage (der Benutzer gibt das SQL Statement ein) als Unterformular in der Datenblattansicht anzeigen.

    Dazu habe ich folgende Methode geschrieben:

    Public Sub modifyAuswertungForm(F_Name As String, SQL As String)
    Dim ctl As TextBox, f As Form
    Dim rs As Recordset, FeldNr As Integer, FeldName As String
    Set rs = CurrentDb.OpenRecordset(SQL)

    DoCmd.Close acForm, F_Name, acSaveNo
    DoCmd.OpenForm F_Name, acDesign


    Set f = Forms(F_Name)
    f.RecordSource = ""
    For FeldNr = f.Controls.Count - 1 To 0 Step -1
    FeldName = f.Controls(FeldNr).Name
    DeleteControl F_Name, FeldName
    Next

    For FeldNr = 0 To rs.Fields.Count - 1
    FeldName = rs.Fields(FeldNr).Name
    Set ctl = CreateControl(F_Name, acTextBox, acDetail, , FeldName, FeldNr * 110, 0, 100, 100)
    ctl.Name = FeldName
    Set ctl = Nothing
    Next
    f.RecordSource = SQL
    DoCmd.Close acForm, F_Name, acSaveYes
    End Sub

    Wird die Funktion mit mit F5 aus dem VB-Editor heraus aufgerufen klappt alles.

    Public Sub test()
    modifyAuswertungForm "F_QueryResults", "Select 1 as Nr1, 100 as Nr2, #2010/1/1# as dat1, TabField1, TabField2 from T_TabTest"
    End Sub

    Ich versuche nun diese Funktion aus einem geöffneten Formular heraus aufzurufen. Es erscheint kurz der Rahmen des Formulares und danach stürzt Access ab. (Access hat einen Fehler verursacht ...)

    In einer leeren Datenbank und einem neuen Formular mit nur einem Schalter klappt es. Nur in meiner Anwendung gibt immer einen Absturz. Im Debug-Modus wird der Code bis

     f.RecordSource = ""

    ausgeführt. Dann erfolgt der Absturz.

    Zwei Fragen:

    1. Hat jemand eine Idee woran das liegen könnte und wie ich es vermeiden kann?

    2. Gibt es eine andere Möglichkeit die Daten einer beliebigen und vorher nicht bekannten Abfrage in einem Formular (das dann als Unterformular verwendet werden kann) anzuzeigen.

    Schon im Voraus herzlichen Dank für Eure Tipps.

    Niels

     

     

     

     

     

    Montag, 2. August 2010 20:36

Antworten

  • Hallo!

    NielsUrig schrieb:

    Ich habe mit den Formularen in Datenblattansicht noch nicht viel gemacht, aber man muss doch zunächst für jedes darzustellende Feld ein Control einfügen - oder? Ziel meines Codes war es, die erforderlichen Controls eines Formulars zu erstellen, das später in der Datenblattansicht angezeigt wird.

    Du könntest auch vorab im Formularentwurf ausreichen Steuerelemente einfügen, die du dann zur Laufzeit ein- bzw. ausblendest.

    Beispiel: Dynamische Datenblattansicht

    Du kannst das Formular in Datenblattansicht auch ganz weglassen und als SourceObject des Unterformular-Steuerelements eine gespeicherte Abfrage verwenden.

    mfg
    Josef

    • Als Antwort markiert NielsUrig Mittwoch, 4. August 2010 07:07
    Dienstag, 3. August 2010 20:39

Alle Antworten

  • Hallo, Niels,
     
    NielsUrig:
     
    >  modifyAuswertungForm "F_QueryResults", "Select 1 as Nr1, 100 as Nr2, #2010/1/1# as dat1, TabField1, TabField2 from T_TabTest"
     
    > Ich versuche nun diese Funktion aus einem geöffneten Formular heraus aufzurufen. Es erscheint kurz der Rahmen des Formulares und danach stürzt
    > Access ab. (Access hat einen Fehler verursacht ...)
     
    hast Du mal das Übliche probiert (decompile, alle Objekte in neue DB
    etc.)?
     
    > In einer leeren Datenbank und einem neuen Formular mit nur einem Schalter klappt es. Nur in meiner Anwendung gibt immer einen Absturz. Im
    > Debug-Modus wird der Code bis
    >
    >  f.RecordSource = ""
    >
    > ausgeführt. Dann erfolgt der Absturz.
    >
    > Zwei Fragen:
    >
    > 1. Hat jemand eine Idee woran das liegen könnte und wie ich es vermeiden kann?
     
    grundsätzlich gilt dabei: Du kannst nicht beliebig löschen und neu
    erstellen, Access merkt sich auch die gelöschten (!) Controls (iirc
    bis zu einem decompile). Ich habe daher für so etwas immer ein leeres
    Templateformular, das ich kopiere (und vorher natürlich das alte
    lösche).
     
    > 2. Gibt es eine andere Möglichkeit die Daten einer beliebigen und vorher nicht bekannten Abfrage in einem Formular (das dann als Unterformular
    > verwendet werden kann) anzuzeigen.
     
    ein Unterformular in Datenblattansicht, dem Du Deinen SQL-String als
    neue Datenquelle zuweist.
     
    Gruß - Mark
     
    Dienstag, 3. August 2010 09:26
  • Hallo Mark,

    Danke für Deine Antwort. Ich habe es jetzt eigentlich (fast) aufgegeben und stelle (z.Z.) die Daten per Listbox dar. Ist nicht so wie gewünscht aber ...

    > hast Du mal das Übliche probiert
    > (decompile, alle Objekte in neue DB etc.)?

    Ja. Koprimieren und Reparieren. Objekte übernehmen.
    Was ist decompile? Das gehört für mich noch nicht zu den üblichen Vorgehensweisen. Wie macht man das?

    > ein Unterformular in Datenblattansicht, dem Du Deinen SQL-String
    > als neue Datenquelle zuweist.

    Ich habe mit den Formularen in Datenblattansicht noch nicht viel gemacht, aber man muss doch zunächst für jedes darzustellende Feld ein Control einfügen - oder? Ziel meines Codes war es, die erforderlichen Controls eines Formulars zu erstellen, das später in der Datenblattansicht angezeigt wird.

    Danke im Voraus für weitere Tipps.
    Gute Nacht
    Niels
    Dienstag, 3. August 2010 20:30
  • Hallo!

    NielsUrig schrieb:

    Ich habe mit den Formularen in Datenblattansicht noch nicht viel gemacht, aber man muss doch zunächst für jedes darzustellende Feld ein Control einfügen - oder? Ziel meines Codes war es, die erforderlichen Controls eines Formulars zu erstellen, das später in der Datenblattansicht angezeigt wird.

    Du könntest auch vorab im Formularentwurf ausreichen Steuerelemente einfügen, die du dann zur Laufzeit ein- bzw. ausblendest.

    Beispiel: Dynamische Datenblattansicht

    Du kannst das Formular in Datenblattansicht auch ganz weglassen und als SourceObject des Unterformular-Steuerelements eine gespeicherte Abfrage verwenden.

    mfg
    Josef

    • Als Antwort markiert NielsUrig Mittwoch, 4. August 2010 07:07
    Dienstag, 3. August 2010 20:39
  • Guten Morgen Josef,

    danke für Dein Beispiel zum Ein/Ausblenden von Spalten in der Datenblattansicht.

    Das hatte ich auch schon so ähnlich gemacht, allerdings war es mit nicht gelungen die Spaltenköpfe wunschgemäß zu benennen. So gefällts mir.

    >Du kannst das Formular in Datenblattansicht auch ganz weglassen

    >und als SourceObject des Unterformular-Steuerelements

    >eine gespeicherte Abfrage verwenden.

    Mannomann. Danach habe ich die ganze Zeit gesucht.

    Hätte ich es gewußt (die Hilfe spricht nur von Formularen) hätte ich mir einige Stunden herumprobieren erspart. Dann stellt sich nur noch die Frage wofür man dann die Datenblattansicht überhaupt noch braucht ;-)

    Danke für die Hilfe

    Niels

     

    Mittwoch, 4. August 2010 07:04
  • Hallo, Niels,
     
    NielsUrig:
     
    > Was ist decompile?
     
     
    Ansonsten hat ja Josef schon weiter geholfen.
     
    Gruß - Mark
     
    Mittwoch, 4. August 2010 08:20
  • Hallo Mark,

    danke, dass Du nochmal reingeschaut hast. Ich werde es mal ausprobieren.

    Schöne Grüße

    Niels


    Mittwoch, 4. August 2010 11:48