PDA

Vollständige Version anzeigen : Mldg #Fehler beseitigen - Wie?


Andi-D
04.10.2002, 09:01
Hallo zusammen,
ich habe mir eine Fkt. geschrieben die sobald Werte vorhanden sind bestens funktioniert. Gibt es jedoch keine Werte in der Tabelle kommt auf dem Form im entprechenden Feld die Mldg #Fehler!
Kann ich das unter den Eigenschaften ändern: Ich habe das so probiert,jedoch ohne Erfolg:
Steuerelementinhalt
=Wenn(ISTFEHLER(Fkt());"";Fkt())
Schon mal Danke wenn jemand helfen kann!
Gruß Andi aus Ffm

Morli
04.10.2002, 09:57
Hallo Andi,

poste doch mal die Funktion!

Gruß

Rainer

Andi-D
04.10.2002, 11:05
hallo Rainer,
die Fkt ist etwas komplex aber funktioniert richtig. Hier ein Auszug:

Public Function MedianOfRst(RstName As String, fldName As String) As Double

Dim strSQL As String
strSQL = "SELECT [" & fldName & "] FROM [" & RstName & "]"
usw.
MedianOfRst = MedianTemp

End Function

Karlheinz
04.10.2002, 11:12
Hallo Andi,

Fang doch den Fehler in der Funktion ab, indem du als Rückgabewert 0 setzt. Das läßt sich dann auch besser auswerten.

Public Function MedianOfRst(RstName As String, fldName As String) As Double

.
.
.
if mediantmp Zahlvorhanden then
MedianOfRst = MedianTemp
else
MedianOfRst=0
end if

Gruß Karlheinz

Andi-D
04.10.2002, 11:23
Hallo KarlHeinz,
da hast du recht bloß wie sieht das Kriterium aus das prüft ob Zahlvorhanden?
mit .value ?
If IsNull(MedianTemp) fkt. nicht!

MarioR
04.10.2002, 11:28
Hallo Andi,

vielleicht hilft Dir IsNumeric weiter.

Karlheinz
04.10.2002, 11:29
Hallo,

wo/wie bekommst du denn die Zahlen für dein MedianTemp?
Ich benötige schon ein klein wenig mehr Info.

Gruß Karlheinz

Andi-D
04.10.2002, 11:40
hier der gesamte Code:
Public Function MedianOfRst(RstName As String, fldName As String) As Double

Dim MedianTemp As Double
Dim RstOrig As Recordset

Dim strSQL As String
Dim Criteria As String

Criteria = Me.Filter 'Wichtig, wenn Medianberechnung nur für Auswahl einer Datenmenge erfolgen soll: hier wird dem Bericht das Filterergebnis des Forms übergebenen und daraus der Median berechnet!

strSQL = "SELECT [" & fldName & "] FROM [" & RstName & "]"

If Len(Criteria) > 0 Then
strSQL = strSQL & " WHERE " & Criteria & " AND ([" & fldName & "]Is Not Null)" ' Nur die Felder berücksichtigen, die nicht leer sind !!!
Else
strSQL = strSQL & " WHERE [" & fldName & "]Is Not Null" ' Nur die Felder berücksichtigen, die nicht leer sind !!!

End If

strSQL = strSQL & " ORDER BY [" & fldName & "]"


Set RstOrig = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
RstOrig.Sort = fldName
Dim RstSorted As Recordset
Set RstSorted = RstOrig.OpenRecordset()
If RstSorted.RecordCount Mod 2 = 0 Then
RstSorted.AbsolutePosition = (RstSorted.RecordCount / 2) - 1
MedianTemp = RstSorted.Fields(fldName).Value
RstSorted.MoveNext
MedianTemp = MedianTemp + RstSorted.Fields(fldName).Value
MedianTemp = MedianTemp / 2
Else
RstSorted.AbsolutePosition = (RstSorted.RecordCount - 1) / 2
MedianTemp = RstSorted.Fields(fldName).Value
End If



MedianOfRst = MedianTemp

End Function

Karlheinz
04.10.2002, 12:04
Hallo Andi,

hast du schon Mario's Vorschlag ausprobiert?

Sonst würde ich mal im Debug-Modus nachschauen, was für einen Wert/Ausdruck bei MedianTemp im Testfenster steht, wenn keine Werte enthalten sind.

Gruß Karlheinz

Andi-D
04.10.2002, 12:13
Also das geht nicht:
If IsNumeric(MedianTemp) = True Then

MedianOfRst = MedianTemp
Else
MedianOfRst = ""
End If

Karlheinz
04.10.2002, 12:20
Hallo Andi,


Public Function MedianOfRst(RstName As String, fldName As String) As Double

Double="" gibt garantiert eine Fehlermeldung
Typen unverträglich oder etwas ähnliches.

Teste doch die Funktion wie im vorigen Beitrag beschrieben und teile mir das Ergebnis mit.

Gruß Karlheinz

Andi-D
04.10.2002, 12:28
Meinst du haltepunkte setzen oder das direktfenster- sorry für die Anfängerfrage ich probier eben immer direkt am code aus und benutze nicht die Testmöglichkeiten.

Karlheinz
04.10.2002, 12:31
Hallo Andi,

ja

setzte einen Haltepunkt auf

MedianTemp = RstSorted.Fields(fldName).Value

und dann weiter im Einzelschritt

Gruß Karlheinz

Andi-D
04.10.2002, 13:01
Hallo Karlheinz,
also leider springt er nicht soweit:
RstOrig = Nothing
RstOrig.Sort=0
MedianTemp=0
Ab hier springt er nach Einzellschritt wieder nach oben:
RstSorted.AbsolutePosition = (RstSorted.RecordCount / 2) - 1
Gruß und Danke Andi

Karlheinz
04.10.2002, 13:50
Hallo Andi,

Set RstOrig = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)

If RstOrig = Nothing then
MedianOfRst = 0
Exit Function
End If

Versuch's mal so, sonst kannst du mir die DB
auch zusenden, wenn nichts dagegen spricht.

Gruß Karlheinz

Andi-D
04.10.2002, 14:31
Hallo Karlheinz,
das hatte ich auch bereits ohne Erfolg versucht. Ich probiere mal weiter und melde mich Montag wieder und gebe dir ggf. einen Auszug der mdb.
Danke für das Angebot
und Gruß Andi