Office: Access Abfragen führen zu Crash oder Fehler

Helfe beim Thema Access Abfragen führen zu Crash oder Fehler in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo, ich bin relativ neu in diesem Gebiet und probiere mich zzt. an einer kleinen Datenbank. Ich habe ein Endlosformular mit 2... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von floomat, 23. März 2011.

  1. floomat Neuer User

    Access Abfragen führen zu Crash oder Fehler


    Hallo,

    ich bin relativ neu in diesem Gebiet und probiere mich zzt. an einer kleinen Datenbank.

    Ich habe ein Endlosformular mit 2 Ja/Nein-Feldern, von welchen ich jeweils die Summe der "Ja" in einem anderen Feld im Detailbereich berechne und dann miteinander verrechne. Das sieht dann so aus:

    Code:
    =Summe([Fertig2])-Summe([Fertig1])
    Das Funktioniert soweit, auch wenn ich das ganze lieber im VBA-Code per Variablen realisiert hätte. Aber das hat nicht funktioniert und sah so aus:

    Code:
    Function fnHoleVar()
       Dim FSum1 As String
       Dim FSum2 As String
       FSum1 = Me.Fertig1
       FSum2 = Me.Fertig2
       
       Dim F1_Ja As Integer
       Dim F2_Ja As Integer
       
        If (Me.Fertig1 = True) Then
            F1_Ja = DSum([FSum1], "T_Aufträge Profiler", "[Fertig1]")
        End If
        
        If (Me.Fertig2 = True) Then
            F2_Ja = DSum([FSum2], "T_Aufträge Profiler", "[Fertig2]")
        End If
    
    fnHoleVar = (F2_Ja) - (F1_Ja)
    End Function
    Hier bekomme ich dann z.B.
    Mit F2_Ja = -24 und F1_Ja = -31 das Ergebnis fnHoleVar = 7 oder fnHoleVar = 31, wie er grad lust hat... ich habe keine ahnung woran das liegt.

    Ich benötige eigentlich den Wert des berechneten Feldes beim Öffnen (Also Anfangswert) und beim Schließen oder Klicken (Endwert) eines Aktualisierungsfeldes.

    Also z.B. beim öffnen 7 und beim Schließen/Klicken 5.

    Am ende soll die differenz (also hier 2) übernommen werden und von einem anderen Feld in einem anderen Formular die Menge (z.B. 2 * 4 benötigte Teile) abgezogen werden.

    Ich dachte dann einfach da das mit den Variablen nicht geht benutze ich das berechnete Feld und übernehme den Wert in eine andere Tabelle:

    Code:
    Private Sub Form_Open(Cancel As Integer)
    strSQL = "UPDATE T_CVP21_Zwischenwert " & _
    "Set Wert2 = '" & Me!SummeCVP & "' "
    CurrentDb.Execute strSQL
    End Sub
    funktionierte aber insgesamt 1 mal, ansonsten bekam ich immer 0 statt 7 da das feld beim öffnen 0 beeinhaltet bis es berechnet wird.

    dann hab ichs so versucht, weil es soll ja schließlich immer funktionieren:

    "Kleiner-Als-Zeichen" ist eigentlich < aber irgendwie ging das hier im forum nicht.

    Code:
    Private Sub Form_Open(Cancel As Integer)
    ' Kurze Pause bis alles geladen hat
        Dim i As Double
        i = Timer
        Do While Timer "Kleiner-Als-Zeichen" i + 1  'Sekunden
            DoEvents
        Loop
    ' Kleiner "Loop" bis der Wert über 0 ist
    NeuBerechnen:
    If (Me!SummeCVP > 0) Then
    strSQL = "UPDATE T_CVP21_Zwischenwert " & _
    "Set Wert2 = '" & Me!SummeCVP & "' "
    CurrentDb.Execute strSQL
    Else
    GoTo NeuBerechnen
    End If
    End Sub
    Das funktioniert soweit, aber hin und wieder crasht das Access komplett und wird von windows abgeschossen...
    und eigentlich jedesmal wenn ich die DB neu öffne
    verstehe einfach nicht wieso sowas passiert.

    Das einzige was funktioniert ist:

    Code:
    Private Sub Form_Close()
        strSQL = "UPDATE T_CVP21_Zwischenwert " & _
            "Set Wert = '" & Me!SummeCVP & "' "
        CurrentDb.Execute strSQL
    End Sub
    Naja ich hoffe einfach mal, dass das jemand kapiert und mir helfen kann! :)
    Wenn irgendwas unklar ist werde ich gerne fragen beantworten.

    Mit freundlichen Grüßen
    Flo
     
    floomat, 23. März 2011
    #1
  2. miriki Erfahrener User
    Bevor ich mich durch alle Ansätze durchpflüge, mal so ein paar grundlegende Gedanken von mir...

    Wenn es Ja/Nein-Felder sind, dann kann man die zwar auch aufsummieren, begeht damit aber einen schmalen Grat. Sinnvoller wäre, die Felder mit "ja" und "nein" mittels DCount() zu zählen. Dann gibt's auch garantiert keine negativen Ergebnisse.

    Die Datenbank kennt keinen "vorher" Status. Du kannst immer nur den "jetzt" Status abrufen. Wenn Du also einen "vorher" Status brauchst, mußt du den vorher irgendwo wegspeichern. Das kannst Du per VBA und Variablen machen, aber auch per SQL und einer Hilfstabelle. Wichtig ist dabei nur, daß immer gewährleistet ist, daß "vorher" und "nachher" auch wirklich zusammen gehören. Sollte beim Erstellen des "vorher" Murks passieren, hätte das ggf. fatale Folgen beim Auswerten mit dem "nachher".

    Ist denn gewährleistet, daß das Formular auch wirklich jedesmal "geöffnet" wird? Oder wird es vielleicht nur "aktiviert" oder "angezeigt"? Eine kleine Messagebox beim Erstellen des "vorher" Status kann da hilfreich sein...

    Es geht sicher irgendwie beides, wobei ich vielleicht den Weg über eine Tabelle bevorzugen würde. Aber bei "kleineren" Operationen ist der Weg über Variablen auch völlig ok.

    Für das Speichern von Werten würde ich übrigens auch nicht auf die Felder des Formulars zurückgreifen. Wie Du ja festgestellt hast, sind die Ergebnisse nicht unbedingt dann verfügbar, wenn Du sie brauchst... (Schau Dir mal die Ereignis-Reihenfolge beim Öffnen eines Formulars an - Open, Load, Resize, Activate, Current) Berechne Deine Werte selbst über die entsprechenden Funktionen wie DSum, DCount usw. und speichere das dann weg.

    Gruß, Michael
     
    miriki, 30. März 2011
    #2
  3. floomat Neuer User
    Vielen Dank erstmal!

    DCount funktioniert wunderbar, geht jetzt auch nichtmehr ins negative :D dankeschön!

    Ja genau, ich brauche den "Jetzt"-Status beim öffnen und beim schließen :D
    nur wenn ich das mache, bekomme ich meistens 0 weil beim öffnen das feld noch 0 ist, das ergebnis ist erst nach ein paar sekunden da. das warten bis das feld über 0 ist führte zum crash.

    danke für das, jetzt fällt mir auf das das mit dem öffnen garnicht funktioniert, denn das fenster kann auch mal nur inaktiv geschaltet werden.

    dann werd ich das mal so übernehmen und die werte besser aus Variablen statt feldern nehmen.

    mfg


    EDIT: das mit dem beim öffnen klappt jetzt auch, da ich die werte im code über variablen berechnen lasse und diese nichtmehr im feld berechnet werden. crasht auch nix mehr. :)

    Leider komm ich aber grad nicht weiter, ich hab ja diese Ja/Nein Felder und ich möchte das wenn man im Endlosformular ein paar ändert die anzahl der geänderten (also z.B. ändere ich 2 von nein auf ja) dann soll diese anzahl einem anderen feld abgezogen oder dazugerechnet werden, je nachdem ob von ja auf nein oder umgekehrt.

    ist das irgendwie möglich?
     
    floomat, 31. März 2011
    #3
  4. miriki Erfahrener User

    Access Abfragen führen zu Crash oder Fehler

    Du könntest das "BeiÄnderung", bei CheckBoxen ggf. auch "BeimKlicken" Ereignis der relevanten Felder anzapfen, um die Neuberechnung anzuschubsen.

    Du läßt da jetzt ja schon die Berechnung durchlaufen. Lager diese Routine in eine Extra-Prozedur aus und dann kannst Du diese auch aus anderen Ereignissen her aufrufen.

    So a la:
    Code:
    private sub neuberechnung()
        [...]
    end sub
    
    private sub form_open(cancel as integer)
        neuberechnung
    end sub
    
    private sub kontrollkästchen0_click()
        neuberechnung
    end sub
    Gruß, Michael
     
    miriki, 18. April 2011
    #4
Thema:

Access Abfragen führen zu Crash oder Fehler

Die Seite wird geladen...
  1. Access Abfragen führen zu Crash oder Fehler - Similar Threads - Access Abfragen führen

  2. automatische Abfrage URL via Artikelnummer

    in Microsoft Access Hilfe
    automatische Abfrage URL via Artikelnummer: Guten Tag Bei der Aktualisierung der Homepage und aufgrund eines Plugin-Wechsels des Üebersetzungstools hat wordpress alle Permalinks der Produkte verändert. Unserem Webmaster war nicht bekannt,...
  3. Import Daten aus Access Abfrage klappt nicht

    in Microsoft Excel Hilfe
    Import Daten aus Access Abfrage klappt nicht: Moin, ich habe ein Problem. Ich habe eine Datenbank in Access mit diversen Tabellen und Abfragen. Jetzt habe ich eine neue Abfrage erstellt und muß das Ergebnis täglich in eine Exceldatei...
  4. Auslesen einer Abfrage in VBA Modul

    in Microsoft Access Hilfe
    Auslesen einer Abfrage in VBA Modul: Hallo zusammen, ich wünsche allen ein frohes und gesundes Jahr 2024. Ich habe eine alte Access 2003 und da habe ich zur Ermittlung von Planungsdaten folgende Funktion genutzt, jetzt mit Office 365...
  5. Access gefilterten Endlosformular die ID (Autowert) in eine Abfrage zu übergeben

    in Microsoft Access Hilfe
    Access gefilterten Endlosformular die ID (Autowert) in eine Abfrage zu übergeben: Hallo Zusammen, ist es möglich, aus einem gefilterten Endlosformular die ID (Autowert) in eine Abfrage zu übergeben? Das habe ich schon ausprobiert: In der Abfrage als Kriterium eingegeben...
  6. Listenfeld im Endlosformular

    in Microsoft Access Hilfe
    Listenfeld im Endlosformular: Hallo in die Runde! Ich stehe gerade furchtbar auf dem Schlauch und hoffe, ihr könnt mir helfen: Problemkind ist eine Art Zimmerverwaltung: - jedes Zimmer hat eine ID und ist einem Objekt...
  7. 3 Accesstabellen in eine neue Access Tabelle (nicht Abfrage) zusammenfügen

    in Microsoft Access Hilfe
    3 Accesstabellen in eine neue Access Tabelle (nicht Abfrage) zusammenfügen: Hallo, ich habe folgendes Problem: Ich habe 3 Tabellen in Access importiert und möchte diese ohne Abfrage in eine neue Accesstabelle zusammenfügen. Es müssen auch mehr Tabellen zusammengefügt...
  8. Access Abfrage mit SharePoint Liste synchronisieren

    in Microsoft Access Hilfe
    Access Abfrage mit SharePoint Liste synchronisieren: Hallo Zusammen, mich möchte eine ACCESS Abfrage „Offene Aufträge“ mit einer SharePoint Liste synchronisieren. Funktioniert das, und wenn wie? Kann mir da jemand Hilfestellung geben? vielen Dank...
  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