Kann ich diese Funktion so lassen

04/02/2009 - 15:37 von Leuenberger Christian | Report spam
In einem Feld werden die Werte so eingeben 312 + 123 + 1 + 2
für die weitere Verwendung benötige ich die Werte einzeln.
Replace für den Leerschlag passiert in der Abfrage.

Kann ich folgende Funktion so stehen lassen, oder muss ich grundsàtzlich
etwas àndern.

Private Function Split_Schalter()
Dim var As Variant
Dim i As Integer
Dim ID As Long

Dim rs As DAO.Recordset
Dim rst As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("qry_Schalter_doppelt", dbOpenDynaset)
Set rst = CurrentDb.OpenRecordset("Schalter", dbOpenDynaset)
DoCmd.SetWarnings False
If Not rs.EOF Then
rs.MoveFirst
With rst
Do Until rs.EOF
ID = rs!ID
var = Split(rs!Schalter_Neu, "+")
For i = LBound(var) To UBound(var)
.AddNew
!Zàhler = rs!Zàhler
!Zeit_Schalter = rs!Zeit_Schalter
!Ort = rs!Ort
!Schalter = var(i)
!Was = rs!Was
!Zeit_Schalter1 = rs!Zeit_Schalter1
!Was1 = rs!Was1
!Mitternacht = rs!Mitternacht
!Mitternacht_vor = rs!Mitternacht_vor
.Update
Next i
DoCmd.RunSQL ("Delete * from Schalter WHERE ID =" & ID)
rs.MoveNext
Loop
End With
End If
DoCmd.SetWarnings True
rs.Close: Set rs = Nothing
rst.Close: Set rst = Nothing
End Function

Gruss
Christian
 

Lesen sie die antworten

#1 Stefan Hoffmann
04/02/2009 - 15:51 | Warnen spam
Leuenberger Christian schrieb:
In einem Feld werden die Werte so eingeben 312 + 123 + 1 + 2
für die weitere Verwendung benötige ich die Werte einzeln.
Replace für den Leerschlag passiert in der Abfrage.

Kann ich folgende Funktion so stehen lassen, oder muss ich grundsàtzlich
etwas àndern.

Dim var As Variant


Mache es typsicher:

Dim var() As String

Und gegebenenfalls umbenennen von var in zb.

Dim Schalter() As String

Set rst = CurrentDb.OpenRecordset("Schalter", dbOpenDynaset)


Nachdem du spàter in selbiger Tabelle per SQL löscht, sollte es
dbOpenSnapshot sein.

If Not rs.EOF Then
rs.MoveFirst


Ersetze es mit

If Not rs.Bof And Not rs.Eof Then

Nur dann sind wirklich Daten im Recordset. Das .MoveFirst ist nicht
notwendig.

With rst


Macht das Lesen zumindest für mich sehr schwer...

Do Until rs.EOF
ID = rs!ID
var = Split(rs!Schalter_Neu, "+")


Es gibt imho keinen Grund das innerhalb der Schleife auszuführen.

!Schalter = var(i)


Besser ein Trim(var(i)) zum Entfernen der unnötigen Leerzeichen.

DoCmd.SetWarnings False


Brauchst du nicht, wenn du statt

DoCmd.RunSQL ("Delete * from Schalter WHERE ID =" & ID)


dann

CurrentDbC.Execute "Delete * from Schalter WHERE ID =" & ID

nimmst. Siehe http://access.joposol.com/artikel/PerfTuning.pdf wegen
CurrentDbC().


mfG

Access-FAQ http://www.donkarl.com/
KnowHow.mdb http://www.freeaccess.de
Newbie-Info http://www.doerbandt.de/Access/Newbie.htm

Ähnliche fragen