Anfängerfrage

Egbert111

Grünschnabel
Hallo esrt mal,
bin hier neu.
Habe schon öffters als Gast hier vorbeigeschaut um Erfahrungen zu sammel.
Nun half mir Google nicht mehr weiter.

Habe mir einen Beispielprojkt zum üben heruntergelade und es für meine ersten Schritte geändert.
Es lief nach Anfangsproblemen ganz gut.
Nun komme ich an meine Grenzen.

ADO Verbindung mit Datenbak:
Es klappt alles soweit.
Aber jetzt ist es so, wenn ich auf den Button speichern drücke werden gleich mehrere Einträge in die DB gemacht.
Finde den Fehler nicht. Kann mir jemand helfen?


Private Sub cmdSave_Click()
Dim Cmd As ADODB.Command

Set Cmd = New ADODB.Command
With Cmd
.ActiveConnection = Cn
.CommandType = adCmdStoredProc

If bAdd Then ' Name der StoredProcedure
.CommandText = "sp_Add_Person"
Else
.CommandText = "sp_Edit_Person" ' Beim Ändern muß die ID übergeben werden
.Parameters.Append cParam("@iPerson", adInteger, Rs.Fields("Personen_ID"))
End If
' Parameter für die StoredProcedure werden übergeben.
.Parameters.Append cParam("@sDatum", adVarChar, SetText(Me.txtDatum.Text), 50)
.Parameters.Append cParam("@sNName", adVarChar, SetText(Me.txtNName.Text), 50)
.Parameters.Append cParam("@sStrasse", adVarChar, SetText(Me.txtStrasse.Text), 50)
.Parameters.Append cParam("@iHausNr", adInteger, SetText(Me.txtHausnummer.Text))
.Parameters.Append cParam("@sOrt", adVarChar, SetText(Me.txtOrt.Text), 50)
.Parameters.Append cParam("@sBetreff", adVarChar, SetText(Me.txtBetreff.Text), 50)
.Parameters.Append cParam("@sWeiter", adVarChar, SetText(Me.txtWeiter.Text), 50)
.Execute ' StoredProcedure wird ausgeführt
End With

Rs.Requery
bAdd = False
Call CntLock(True)

End Sub

Private Sub cmdUndo_Click()
Call CntLock(True)
Call GetValues
bAdd = False
End Sub

Private Sub Command1_Click()
Call Unload(Me)
End Sub


Private Sub Command2_Click()
Form2.Show
End Sub

Private Sub Form_Load()

Set Cn = New ADODB.Connection
With Cn
.CursorLocation = adUseClient
.Mode = adModeShareDenyNone
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Properties("Data Source") = App.Path & "\postbuch.mdb"
.Open
End With

Set Rs = New ADODB.Recordset
With Rs
.ActiveConnection = Cn
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Source = "SELECT * FROM tbl_Personen"
.Open
End With

Set Me.DataGrid1.DataSource = Rs ' Daten in Grid
Call CntLock(True) ' Controls sperren
bAdd = False

End Sub

Private Sub MonthView1_DateClick(ByVal DateClicked As Date)
txtDatum.Text = MonthView1.Value
End Sub

Private Sub MonthView2_DateClick(ByVal DateClicked As Date)
txtWeiter.Text = MonthView2.Value
End Sub

Private Sub Rs_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, _
ByVal pError As ADODB.Error, _
adStatus As ADODB.EventStatusEnum, _
ByVal pRecordset As ADODB.Recordset)

GetValues
End Sub

'********************************************************************************
' Beschreibung: Um mehrfach gleichen Code zu vermeiden wird zentral über diese
' Funktion das Formular mit Daten aus der DB gefüllt.
'********************************************************************************
Private Sub GetValues()

With Me
.txtDatum.Text = GetText(Rs.Fields("Datum"))
.txtNName.Text = GetText(Rs.Fields("NName"))
.txtStrasse.Text = GetText(Rs.Fields("Strasse"))
.txtHausnummer.Text = GetText(Rs.Fields("HausNr"))
.txtOrt.Text = GetText(Rs.Fields("Ort"))
.txtBetreff.Text = GetText(Rs.Fields("Betreff"))
.txtWeiter.Text = GetText(Rs.Fields("Weiter"))
End With

End Sub

Private Sub CntLock(Optional bLock As Boolean = False)
Dim oCont As Control

For Each oCont In Me.Controls
If TypeOf oCont Is TextBox Then
oCont.Enabled = Not bLock
End If
Next oCont

With Me
.cmdEdit.Enabled = bLock
.cmdNew.Enabled = bLock
.cmdSave.Enabled = Not bLock
.cmdUndo.Enabled = Not bLock
End With

End Sub
 

Neue Beiträge

Zurück