AW: Nach 1 kommt 10
23.05.2021 21:08:28
Ronald
Ich muß zugeben, daß ich wieder auf das KD- vor den Kundennummern zurück gekrebst bin.
Ein Grund dafür ist, daß es nicht so kurz aussieht. Man vergleiche:
Kundennummer: KD-00001
Kundennummer: 1
Und hierbei spielt es ja keine Rolle, ob ich 2 oder 3 oder 4 führende Nullen vor der 1 hab. Nur eine 1 sieht nunmal so kurz aus, wie sie es auch ist.
Und ich wollte auch nicht erst bei 500 anfangen zu zählen. :-)
Ich habe momentan noch einige Leichenprozeduren drin, die ich alle mal raushauen muß, sodaß nur die funktionellen und benutzten Prozeduren drin
bleiben. Ich gehe davon aus, daß es für VB6 und VBA noch keine Lösung gibt, kein ausführbares Snippet, welches ungenutzten Code aufspürt, richtig? :-)
Daher spare ich es mir für den Moment. das Projekt hochzuladen (ich versuche es, in den nächsten Tagen das bereinigte Projekt hochzuschaufeln) und begnüge mich fürs Erste mit dem Code für "neuen Kunden":
Private Sub cmdNeuerKunde_Click()
Call mod_1_Kundenverwaltung.Felder_Leeren_KV
Call TopKdNr_holen
Call mod_1_Kundenverwaltung.h_KDNummern_Format
txtKundeSeit_KV.SetFocus
End Sub
...
Public Sub Felder_Leeren_KV()
frmMain.txtKundennummer_KV.Text = ""
frmMain.cboStatus_KV.Value = ""
frmMain.txtKundeSeit_KV.Text = ""
frmMain.txtEintragsdatum_KV.Text = ""
frmMain.txtAenderungsdatum_KV.Text = ""
frmMain.txtDomain_KV.Text = ""
frmMain.cboKategorie_KV.Value = "Auswahl treffen"
frmMain.txtOrt_KV.Text = ""
frmMain.txtAnrede_KV.Text = ""
frmMain.txtNachname_KV.Text = ""
frmMain.txtVorname_KV.Text = ""
frmMain.txtVorname2_KV.Text = ""
End Sub
...hierbei ist die Verbindung zur DB noch offen. Hier wird aus KD-00005 (letzter/höchster DB-Eintrag für Kundennummer) eine 5 gemacht. Danke für die
Vorlage. Funktioniert prächtig.
Private Function TopKdNr_holen() As Long
strQuery = "SELECT Max(cLng(Mid([fKdNummer],4))) as MaxKdn FROM tKunden;"
Set rs = cn.Execute(strQuery)
If Not rs.EOF Then TopKdNr_holen = rs("MaxKdn")
strNeueKdNr = CStr(TopKdNr_holen + 1)
End Function
Hier wurde die "Kundennummer um 1 erhöht, um jetzt weiterverarbeitet zu werden. KD plus die führenden Nullen. Dies wird dann auch hier
entsprechend der T extbox zugewiesen, damit der Bediener sich keine Gedanken darum zu machen braucht, wie es ja eigentlich auch sein sollte.
Public Sub h_KDNummern_Format()
If Len(strNeueKdNr) = 1 Then
strNeueKdNr = "KD-0000" & strNeueKdNr
ElseIf Len(strNeueKdNr) = 2 Then
strNeueKdNr = "KD-000" & strNeueKdNr
ElseIf Len(strNeueKdNr) = 3 Then
strNeueKdNr = "KD-00" & strNeueKdNr
ElseIf Len(strNeueKdNr) = 5 Then
strNeueKdNr = "KD-0" & strNeueKdNr
ElseIf Len(strNeueKdNr) = 5 Then
strNeueKdNr = "KD-" & strNeueKdNr
End If
frmMain.txtKundennummer_KV = strNeueKdNr
End Sub
Jetzt sollte der Bediener alle bekannten Informationen eingeben und dann auf "Speichern" klicken:
Private Sub cmdSpeichern_Click()
Call mod_1_Kundenverwaltung.Daten_In_DB_schreiben
End Sub
Jetzt wird ein separates Recordset benutzt. Eine Kollision wird es mit dem anderen "noch offenen" Recordset, welches nur rs heißt, wird es wohl nicht geben, da bei adLockPessimistic erst gesperrt wird, wenn der Update-Befehl ausgeführt wird.
Public Sub Daten_In_DB_schreiben()
Dim sqlQuery As String
Dim nConnection As New ADODB.Connection
Dim rsWrite As New ADODB.Recordset
nConnection.Open "provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\waelty\Downloads\_Privat\_Holzzzwerk\Projekt Büro Holzzzwerk\Holzzzwerk ERP\Softwerk\SoftWERK_ERP.mdb" & ";JET OLEDB:Database"
sqlQuery = "SELECT * FROM tKunden"
rsWrite.Open Source:=sqlQuery, ActiveConnection:=nConnection, CursorType:=adOpenKeyset, LockType:=adLockOptimistic
With rsWrite
.AddNew
If frmMain.txtKundennummer_KV.Text = "" Then
'Diese Abfrage würde wegfallen, wenn die Textbox auf Locked=True steht.
Else
.Fields("fKdNummer").Value = CInt(frmMain.txtKundennummer_KV.Text)
End If
.Fields("fKdStatus").Value = frmMain.cboStatus_KV.Value
'Hier wäre es auch sinnvoll, die Abfrage reinzumachen, oder einen Standardwert _
vorzugeben, damit der Wert nicht einfach "nichts" ist.
If frmMain.txtKundeSeit_KV.Text = "" Then
Else
.Fields("fKdKundeSeit").Value = CDate(frmMain.txtKundeSeit_KV.Text)
End If
If frmMain.txtAenderungsdatum_KV.Text = "" Then
Else
.Fields("fKdEintragsdatum").Value = CDate(frmMain.txtAenderungsdatum_KV.Text)
End If
.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
nConnection.Close
End Sub
Sicherlich gibt es auch bei diesem Code(s) hier Verbesserungspotential.
Gruß Ronald