Neuigkeiten:

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

Mobiles Hauptmenü

Access 2000: Abfragen führen zu Crash oder Fehler

Begonnen von floomat, März 24, 2011, 11:34:45

⏪ vorheriges - nächstes ⏩

floomat

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:

=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:

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:

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:

Private Sub Form_Open(Cancel As Integer)
' Kurze Pause bis alles geladen hat
    Dim i As Double
    i = Timer
    Do While Timer < 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:

Private Sub Form_Close()
    strSQL = "UPDATE T_CVP21_Zwischenwert " & _
        "Set Wert = '" & Me!SummeCVP & "' "
    CurrentDb.Execute strSQL
End Sub


Naja ich hoffe einfach mal, dass jemand kapiert was mein problem ist und mir helfen kann! :)
Wenn irgendwas unklar ist werde ich gerne fragen beantworten.

Mit freundlichen Grüßen
Flo

DF6GL

Hallo,

mhmm, ich befürchte, da ist so ziemlich alles verkorkst...., sorry.   :(



Was soll denn die kleine Datenbank überhaupt machen?

Wie sehen die Tabellen dazu aus (Tabellennamen, Tabellenfelder, Primär- und Fremdschlüssel, Beziehungen )

(Formulare sind erst mal sekundär)


floomat

Hallo, erstmal danke für die antwort. so in etwa habe ich die antwort ja schon erwartet :(

verstehe nur nicht was ich falsch mache, wäre nett wenn du mir einen kleinen hinweis gibst :D

bin da eben relativ neu. also nicht böse sein wenn ich was auf anhieb nicht weiß.

also die datenbank ist im grunde ein lagerprogramm.

also tabellennamen sind ganz normale sachen:

1. Tabelle: ID, Kunde, Ort, Fertig1/Fertig2 (die 2 genannten Ja/Nein Felder) , Bemerkungen.
Primärschlüssel ist hier ID aber ich glaube irgendwie, dass das falsch ist, weil ich ID nicht verwende.

2. Tabelle:
NR#, Bezeichnung, Gruppe, Preis, Bestand, Distri.    Primäschlüssel ist hier NR#

was ist denn unter beziehungen zu verstehen?

mfg

DF6GL

Hallo,

keiner ist hier böse...  :)

Und diese zwei Tabellen sollen ein "Lagerprogramm" darstellen?



Keine Ahnung, das frage ich mich ja auch  ;)


So wie ich die Tabellen interpretiere, wird in Tabelle 1 ein Kunde "fertiggemacht" (vermutlich sogar an einem bestimtmen Ort).


in Tabelle 2 stehen irgendwelche Preise für irgendwelche Bezeichnungen drin..


Und jetzt zur Frage: "was ist denn unter beziehungen zu verstehen?"

Was haben diese beiden Tabellen (datenmäßig)  denn gemeinsam, bzw. was verbindet denn die beiden?




(btw: Sonderzeichen wie "#"  sollten dringend vermieden werden.)


floomat

Hallo,
Danke :)

Ja habe ja gesagt es ist eine kleine Datenbank :D

Also, das mit Kunde, Ort, etc. ist nur eine Kundenliste, dort werden die einzelnen Bestellungen von Kunden aufgelistet mit Kunde, Ort, Lieferdatum, Fertig1/Fertig2.

Das andere ist die Lagerliste, mit den verschiedenen Bauteilen die für das bestellte Gerät gebraucht werden.

so hoffentlich verständlicher :) stand gestern etwas auf dem schlauch :D


Diese beiden Tabellen haben eigentlich (datenmäßig) wirklich wenig miteinander zu tun.
einziger zusammenhang sind eben die berechnungen, die ich dann in das andere Formular übernehme.
Die berechneten Werte werden in eine Extra "Tabelle" geschrieben. (T_CVP21_Zwischenwert , Wert / Wert2)


Hoffe das ist nun verständlicher. :D

Danke für den Tipp, werde es korrigieren :)

DF6GL

Hallo,

mhmm, nichts ist klarer...


"einziger zusammenhang sind eben die berechnungen"

Rechenergebnisse können keinen datenäßigen Zusammenhang der Ursprungsdaten in den Tabellen erzeugen.

Entweder Du verschweigst mir einen Großteil der weiterhin vorhanden Tabellen, oder das ganze Konzept ist marode und so nicht umsetzbar.


floomat

ohje, ich habs bestimmt etwas schräg erklärt :D

also nochmal zur erläuterung:

Ich habe 2 Tabellen, wie oben beschrieben. Aus diesen beiden erstelle ich 2 Formulare.
Ich versuche einen wert im ersten Endlosformular zu berechnen, dieser Wert besteht aus den Summen der "Ja" von 2 Ja/Nein-Feldern im Detailbereich, wie oben beschrieben Ja_Sum1-Ja_Sum2 oder so. Diesen Wert versuch ich zu berechnen sobald ich das formular öffne, also z.B. beim öffnen 7. Dann ändere ich ja vllt etwas an den Feldern und bekomme beim Schließen oder beim drücken eines Buttons den neuen Wert 5. Diese beiden Werte werden per Funktion "UPDATE" in eine zusätzliche unabhängige Zwischenwert-Tabelle geschrieben um sie dann aus der Zwischenwert-Tabelle in das 2te Formular zu übernehmen.

Sonst besteht kein datenmäßiger Zusammenhang.

Nein ich verschweige nichts.
ich glaube einfach du hast mit letzterem recht, dass ich das einfach falsch aufbaue und es so nicht funktionieren wird.

DF6GL

Hallo,

naja, irgendwas ist da faul an Deinem Konzept..


Den ganzen Klatteradatsch brauchst Du gar nicht...

Ich habe allerdings immer noch nicht begriffen, worum es insgesamt geht.  Dass es Berechungen geben soll, habe ich verstanden, aber für welchen Zweck die gemacht werden und was dabei herauskommen soll, nicht.

Wie auch immer, wenn beim Schließen des 1. Forms ein Update der 2. Tabelle erfolgen soll, dann etwa so im 1. Form, wobei die zwischenzeitlich gemachten Änderungen völlig uninteressant sind, weil die schon in die Tabelle abgespeichert wurden und die Summierung über sämtliche Datensätze der Tabelle1 passieren soll:

Sub Form_Close()
Docmd.RunSQl "Update T_CVP21_Zwischenwert  set  Wert1 = - " & nz(DSum("[Fertig1]","tblTabelle1"),0)  & ", Wert2 = -" & nz(DSum("[Fertig2]","tblTabelle1") ,0)
End Sub

floomat

ja irgendwas ist faul :D

also vielen dank schonmal :)

ich erklärs kurz, das hab ich glaub wirklich oben vergessen.

zur Kundentabelle/Formular: (Endlosformular)

Fertig1 ist ein Ja/Nein Feld, das gedrückt wird sobald der Kunde bestellt hat(Die Bestellung sicher ist, wenn unsicher/unbezahlt kein haken, ganz einfach)

Fertig2 wird gedrückt sobald das Gerät bei uns eben Fertig ist. durch drücken hier soll in der Lagertabelle automatisch der Bestand um 1*"Gebrauchte Teile" abgezogen werden, also braucht man 3 für 1 Gerät, werden 3 abgezogen.
Geht nicht, das war ja meine Frage.
Dazu brauch ich ja den Wert den es anfangs(beim öffnen) hat und beim schließen oder drücken eines buttons um die differenz zwischen vorher und nachher zu haben um die menge zu bekommen die man dann in der Lagertabelle abziehen muss.

Das Ganze mit der Summe im ersten Formular ist dazu da, das mir die zu Bestellende Menge ausgerechnet wird, diese wird im zweiten Formular mit "Gebrauchte Teile" multipliziert. Das funktioniert sogar wirklich! :D

mfg und danke !

floomat

*push* :) weiß denn jemand noch einen rat?

Sub Form_Close()
Docmd.RunSQl "Update T_CVP21_Zwischenwert  set  Wert1 = - " & nz(DSum("[Fertig1]","tblTabelle1"),0)  & ", Wert2 = -" & nz(DSum("[Fertig2]","tblTabelle1") ,0)
End Sub


versteh ich nicht ganz wie du darauf gekommen bist, aber irgendwie stimmt das nicht ganz mit meiner letzten beschreibung überein :)

DF6GL

Hallo,

es tut mir Leid, ich hinterblicke nicht die Logik dieser "Lagerhaltung".

Zitat
Fertig1 ist ein Ja/Nein Feld, das gedrückt wird sobald der Kunde bestellt hat(Die Bestellung sicher ist, wenn unsicher/unbezahlt kein haken, ganz einfach)

Was hat dieses Feld in der Kundentabelle zu suchen, wenn es den Status eines "Bestellvorgangs" kennzeichnet?

ZitatFertig2 wird gedrückt sobald das Gerät bei uns eben Fertig ist.

Was hat dieses Feld in der Kundentabelle zu suchen, wenn es den Status eines Produktionsauftrages (Fertigungsauftrages) darstellt??

Zitat
Dazu brauch ich ja den Wert den es anfangs(beim öffnen) hat


Welcher Wert? Aus welchem Datensatz?  Das Form zeigt beim Öffnen den "ersten" (oder einen/mehrere gesondert bestimmte/n) DS aus der Tabelle an.

Wie kommst Du auf dadrauf, dass die Summe der Ja/Nein-Felder aus der Kundentabelle irgendwas mit einem Lagerbestand , bzw. "gebrauchte Teile" zu tun haben könnten?


Vermutlich hast Du die Tabellensituation nur fragmentiert beschrieben, oder das ganze Tabellen- und Ablaufkonzept ist wirklich unbrauchbar.