AW: Update ADO-Datensatz
20.05.2021 15:53:06
Ronald
Wenn ich Dich recht verstehe, ists sinnvoller, den Index als Zahl zu lassen und nur, wenn diese Zahl nach draußen geht (via Angebot, Rechnung etc.) vorgänging via separate Prozedur die jeweils fehlenden Nullen und das "KD" davor setzen. Ja, ich glaube, dies ist machbar.
Public Sub Privatkundendaten_aus_DB_holen()
'# Aktuelle Prozedur #
Call a_DB_Verbindung_aufbauen
Call b_SQL_Abfrage_PrivatKd
Call c_Handling_der_Datensaetze
End Sub
...
Public Sub a_DB_Verbindung_aufbauen()
With cn
.CursorLocation = adUseClient
.Mode = adModeShareDenyNone
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Softwerk\SoftWERK_ERP.mdb;Persist Security Info=False;"
End With
End Sub
...
Public Sub b_SQL_Abfrage_PrivatKd()
With rs
.ActiveConnection = cn
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockPessimistic
End With
strQuery = "SELECT * FROM tKunden ORDER BY fKdNummer ASC"
'WHERE fKdNummer = " & " '" & strAusgewaehlterDatensatz_KV & "'"
Set rs = cn.Execute(strQuery)
End Sub
...
Public Sub c_Handling_der_Datensaetze()
'suchen und finden von Anfang an
intAnzeigeZaehler = intAnzeigeZaehler + 1
If intAnzeigeZaehler = 1 Then
rs.MoveFirst
Do
rs.MoveNext
Loop Until rs.Fields("fKdNummer").Value = strAusgewaehlterDatensatz_KV Or rs.EOF
'Verwenden
If rs.EOF Then
MsgBox "Kundennummer nicht gefunden!"
Else
frmMain.txtKundennummer_KV.Value = rs.Fields("fKdNummer").Value
frmMain.cboStatus_KV.Value = rs.Fields("fKdStatus").Value
frmMain.txtKundeSeit_KV.Value = rs.Fields("fKdKundeSeit").Value
frmMain.txtEintragsdatum_KV.Value = rs.Fields("fKdEintragsdatum").Value
frmMain.txtAenderungsdatum_KV.Value = rs.Fields("fKdAenderungsdatum").Value
frmMain.txtDomain_KV.Value = rs.Fields("fKdDomain").Value
frmMain.cboKategorie_KV.Value = rs.Fields("fKdKategorie").Value
frmMain.txtOrt_KV.Value = rs.Fields("fKdOrt").Value
frmMain.txtAnrede_KV.Value = rs.Fields("fKdAnrede").Value
frmMain.txtNachname_KV.Value = rs.Fields("fKdNachname").Value
frmMain.txtVorname_KV.Value = rs.Fields("fKdVorname").Value
frmMain.txtVorname2_KV.Value = rs.Fields("fKdVorname2").Value
End If
ElseIf intAnzeigeZaehler > 1 Then
frmMain.txtKundennummer_KV.Value = rs.Fields("fKdNummer").Value
frmMain.cboStatus_KV.Value = rs.Fields("fKdStatus").Value
frmMain.txtKundeSeit_KV.Value = rs.Fields("fKdKundeSeit").Value
frmMain.txtEintragsdatum_KV.Value = rs.Fields("fKdEintragsdatum").Value
frmMain.txtAenderungsdatum_KV.Value = rs.Fields("fKdAenderungsdatum").Value
frmMain.txtDomain_KV.Value = rs.Fields("fKdDomain").Value
frmMain.cboKategorie_KV.Value = rs.Fields("fKdKategorie").Value
frmMain.txtOrt_KV.Value = rs.Fields("fKdOrt").Value
frmMain.txtAnrede_KV.Value = rs.Fields("fKdAnrede").Value
frmMain.txtNachname_KV.Value = rs.Fields("fKdNachname").Value
frmMain.txtVorname_KV.Value = rs.Fields("fKdVorname").Value
frmMain.txtVorname2_KV.Value = rs.Fields("fKdVorname2").Value
End If
frmMain.cmdFelderAktualisieren_KV.Enabled = True
Call d_privKD_Textbox_zu_String 'Sicherheitskopie anlegen, zum Abfragen, ob was geändert wurde
End Sub
Jetzt wurde bemerkt, daß sich was geändert hat und der Update-Vorgang kommt ins Rollen:
Public Sub f_Update_privKD()
With rs
'.Fields("fKdNummer").Value = frmMain.txtKundennummer_KV.Text
.Fields("fKdStatus").Value = frmMain.cboStatus_KV.Value
.Fields("fKdKundeSeit").Value = CDate(frmMain.txtKundeSeit_KV.Text)
.Fields("fKdEintragsdatum").Value = CDate(frmMain.txtAenderungsdatum_KV.Text)
.Fields("fKdAenderungsdatum").Value = CDate(frmMain.txtAenderungsdatum_KV.Text)
.Fields("fKdDomain").Value = frmMain.txtDomain_KV.Text
.Fields("fKdKategorie").Value = frmMain.cboKategorie_KV.Value
.Fields("fKdOrt").Value = frmMain.txtOrt_KV.Text
.Fields("fKdAnrede").Value = frmMain.txtAnrede_KV.Text
.Fields("fKdNachname").Value = frmMain.txtNachname_KV.Text
.Fields("fKdVorname").Value = frmMain.txtVorname_KV.Text
.Fields("fKdVorname2").Value = frmMain.txtVorname2_KV.Text
.Update
End With
End Sub
Zum Einen stellt sich mir die Frage, ob ich bei der Connection bzw. beim Recordset etwas besser hätte machen können. Es bringt schließlich nichts, wenn
man beispielsweise adOpenKeyset an der falschen Stelle einbaut und es später durch einen Standardwert überschrieben wird. Das gilt auch für die
anderen Parameter. Daher meine Frage, ob dies so richtig ist oder wo und wie ich diese sinnvoller einbauen könnte.
Was auch noch erwähnt werden sollte, ist die Tatsache, daß ich im Netz gelesen habe, man müsse .Edit anführen, ehe die Zuweisung der
Steuerelementinhalte zu den Datenbankfeldern erfolgt. Bei mir steht aber nur EditMode zur Verfügung und dieser sei wohl nicht kompatibel. Daher
habe ich den nicht drin. AddNew hab ich nicht drin, weil ich ja nur aktualisieren will.
Gruß Ronald