Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Variablen verlieren wert

Begonnen von elvodia, Dezember 27, 2011, 11:07:38

⏪ vorheriges - nächstes ⏩

elvodia

ich möchte über If abfragen erkenen ob werte geändert wurden. Dazu gibt es ein Form was wenn es geöffnet wird einen bestimmten Datensatz auswählt.

Private Sub Form_Load()
   Dim VAR_patient_alt As String
   Dim VAR_behandlungsart_alt As String
   Dim VAR_RZ_ID_alt As String
   VAR_patient_alt = Me.tf_patient
   VAR_behandlungsart_alt = Me.tf_behandlungsart
   VAR_RZ_ID_alt = Me.tf_RZ_ID
   MsgBox VAR_patient_alt & ", " & VAR_behandlungsart_alt & ", " & VAR_RZ_ID_alt
End Sub


Die MsgBox zeigt mir sauber die werte an.



Wenn ich nun auf speichern Drücke möchte ich wissen ob die werte der Felder sich geändert haben dies versuche ich folgender Maßen:
Private Sub button_behandlung_bearbeiten_save_Click()
   Dim VAR_patient_neu As String
   Dim VAR_behandlungsart_neu As String
   Dim VAR_RZ_ID_neu As String
   
   VAR_patient_neu = Me.tf_patient
   VAR_behandlungsart_neu = Me.tf_behandlungsart
   VAR_RZ_ID_neu = Me.tf_RZ_ID
   MsgBox VAR_patient_neu & "=" & VAR_patient_alt
   If IsNull(VAR_patient_neu) = True Then
       MsgBox ("Patient auswählen.")
   Else
       If IsNull(VAR_behandlungsart_neu) = True Then
           MsgBox ("Behandlung auswählen.")
       Else
           If IsNull(VAR_RZ_ID_neu) = True Then
               MsgBox ("Rezept auswählen.")
           Else
               If VAR_patient_neu <> VAR_patient_alt Then
                   
                   If VAR_behandlungsart_neu <> VAR_behandlungsart_alt Then
                       
                       If VAR_RZ_ID_neu <> VAR_RZ_ID_alt Then
                           
                           MsgBox "Rezept ist anders ," & VAR_RZ_ID_neu & ",  " & VAR_RZ_ID_alt
                       Else
                       
                       MsgBox "Behandlung ist anders"
                       End If
                   Else
                   MsgBox "Patient ist anderrs"
                   End If
               Else
                       
               End If
                       
           'CurrentDb.Execute "AKT_ABF_behandlung_plus_1"
           DoCmd.RunCommand acCmdSaveRecord
           DoCmd.Close acDefault
           DoCmd.Requery FM_behandlungen
           MsgBox ("Änderung gespeichert.")
               
           End If
       End If
   End If

End Sub



In der msgbox nachd er zuordnung der neuen daten hat er aber den Wert der _alt Variable vergessen und meine Abfragen können nciht funktionieren.

Gibt es da einen anderen  weg?

Stapi

Guten Morgen elvodia

Du must die Variabel auch in der Funktion : "Private Sub button_behandlung_bearbeiten_save_Click() " deklarieren, du hast sie lediglich beim Laden des Formular zu gewiesen.

Gruß Stefan
Grüße aus dem schönen NRW
Stefan

elvodia

#2
Aber wenn ich sie dort Deklariere haben sich ja die werte bereits geändert wenn man auf den save button klickz dann ahben ja neu und alt immer den selben wert. Daher dachte ich mir die Alten deklariere ich bein laden des forms.

Habe

Dim VAR_patient_alt As String
    Dim VAR_behandlungsart_alt As String
    Dim VAR_RZ_ID_alt As String


nun im save mit drin hat sich nix verändert.

Stapi

Hallo elvodia

Wenn du prüfen möchtest ob eine Änderung in deinem Datensatz statt gefunden hat, dann ist es über den "Button Speichern" nicht der richtige Weg. Jede Änderung eines Datensatz wird in den Tabellen automatisch gespeichert, dafür im Grundsatz ist ein "Speicher Button" nicht nötig. Ein Prüfung könnte stattfinden z.b "nach Focus verlust" oder "nach Aktualiesierung" eines im Formular befindlichen Feld.

Gruß stefan
Grüße aus dem schönen NRW
Stefan

daolix

Variablen welche du in einer Sub oder Funktion deklariest sind auch nur innerhalb diese gültig. Du must bei funktionsübergreifende Variablen diese ausserhalb dieser deklarieren. einfach unter z.b. Obtion explicit diese durch
Private VAR_patient_alt As String
Private VAR_behandlungsart_alt As Strind
Private VAR_RZ_ID_alt As String
deklarieren

elvodia

Wo genau Deklairei ich den Funktionsübergreifend? Arbeite wenig mit Funktionen udn befinde mich meist Im Klassenobjekt des Formulares. Kann ich die dort im Kopf deklarieren?

daolix

ja, am einfachsten unter
Option Compare Database
Option Explicit

elvodia

"Sie haben als Einstellung der Ereigniseigenschaft den Ausdruck beim klicken eingegeben. Dieser Ausdruck hat einen Fehler Verusacht: Benutzerdefinierter Typ nicht definiert."

Dieser Fehler kommt nun egal welchen button ich drücke.

Folgendes steht imKopf:


Option Compare Database
Option Explicit

Private VAR_patient_alt As String
Private VAR_behandlungsart_alt As Strind
Private VAR_RZ_ID_alt As String

Stapi

Hallo elvodia

Du hast die Variabel nun Funktionsübergreifend gemacht, damit darf sie in keiner anderen Funktion "klick Befehl" mit dem gleichen Namen vorkommen.

Es sei an dieser Stelle nochmals der Hinweiß gestattet, die Prüfung nicht durch einen "Save Button " zu machen sondern gleich nach verlassen des Feld oder deren Änderung.

Gruß Stefan
Grüße aus dem schönen NRW
Stefan

DF6GL

Hallo,


korrigier mal den Tippfehler:


Private VAR_behandlungsart_alt As Strind
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

daolix

Wenn du jetzt meinen Text kopiert hast, dann ist da jetzt ein schreibfehler drinne. Den Datentyp Strind kennt er ja nicht, das muß String lauten.    ;D

Stapi

Hallo

Franz ist mal wieder unglaublich  ;D ;D

Mal sollte auch seine Brile aufsetzen  :D

Gruß Stefan
Grüße aus dem schönen NRW
Stefan

elvodia

Auf was man nciht alles achten muß. Das war ein fehler nun habe ich einen Neuen. Er meckern bei sämmtlichen variablen rum. Nachdem ich alle Variablen Deklariert habe was ich wie ich gerade festgestellt habe wegen "Option Explicit" machen muss sagt er

DoCmd.Requery FM_behandlungen

Variable nicht definiert.

Die Werte hat er jedoch noch immer verloren.

DF6GL

#13
Hallo,


DoCmd.Requery "FM_behandlungen"


wenn dieser Code in diesem Formular abläuft, wäre besser:
Me.Requery


wobei, wenn ich den Anfangs-Thread lese, nicht ganz von der Methodik der "Datenverarbeitung" überzeugt bin.. soll heißen, ich versteh den dahinter liegenden Sinn/Problematik  nicht.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

elvodia

ich habe Option Explicit aus Kopf geschmissen. nun kann ich docmd.requery wieder benutzen wie ich mag und er meckert nicht mehr wegen Variablen wenn ich da ein Form name eintrage.