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