'Erzeugen des DataSet-Objekts objDataSet = New DataSet()
'Öffnen der Verbindung zur Datenbank objConnection.Open() 'Auf die Verbindung zur Datenbank wird der Daten-Adapter aufgesetzt: objDataAdapter = New OleDb.OleDbDataAdapter("SELECT * FROM tabServiceLaufendeNummer", objConnection) '************************************************************************* 'Neu ab Faktur3: objDataAdapter.SelectCommand = New OleDb.OleDbCommand("SELECT * FROM tabServiceLaufendeNummer", objConnection) objCommandBuilder = New OleDb.OleDbCommandBuilder(objDataAdapter) '*************************************************************************
'Der Daten-Adapter füllt das DataSet-Objekt im Hauptspeicher: objDataAdapter.Fill(objDataSet, "tabServiceLaufendeNummer") 'Ein neuer DataView für das aktuelle DataSet-Objekt wird erzeugt: objDataView = New DataView(objDataSet.Tables("tabServiceLaufendeNummer"))
'Kundendaten einholen adapterKunden = New OleDb.OleDbDataAdapter("SELECT KNR, [zuname] & ', ' & [vorname] AS Name FROM tabKunden", objConnection) adapterKunden.Fill(objDataSet, "tabKunden") viewKunden = New DataView(objDataSet.Tables("tabKunden"))
'Personaldaten einholen tabMonteur adapterMonteur = New OleDb.OleDbDataAdapter("SELECT PID, [VName] & ', ' & [NName] AS Monteur FROM tabMonteur", objConnection) adapterMonteur.Fill(objDataSet, "tabMonteur") viewMonteur = New DataView(objDataSet.Tables("tabMonteur"))
'Artikeldaten einholen adapterArtikel = New OleDb.OleDbDataAdapter("SELECT * FROM tabArtikel", objConnection) adapterArtikel.Fill(objDataSet, "tabArtikel") viewArtikel = New DataView(objDataSet.Tables("tabArtikel"))
'ServiceLaufendeNummmer einholen ----- TM 21032018 ########################## adapterServiceLaufendeNummer = New OleDb.OleDbDataAdapter("Select * FROM tabServiceLaufendeNummer", objConnection) adapterServiceLaufendeNummer.Fill(objDataSet, "tabServiceLaufendeNummer") viewServiceLaufendeNummer = New DataView(objDataSet.Tables("tabServiceLaufendeNummer"))
'Combobox für Kunden an Datenquelle binden Me.cboKunde.DataBindings.Add("Text", viewKunden, "Name") '*** siehe unten... Me.cboKunde.DataSource = viewKunden Me.cboKunde.DisplayMember = "Name"
'Combobox für Service Personal an Datenquelle binden tabMonteur Me.cboMonteur.DataBindings.Add("Text", viewMonteur, "Monteur") Me.cboMonteur.DataSource = viewMonteur Me.cboMonteur.DisplayMember = "Monteur"
'Combobox für Stundenzettel an Datenquelle binden Me.cboSArbeiten.DataBindings.Add("Text", viewStundenzettel, "Stundenzettel") Me.cboSArbeiten.DataSource = viewStundenzettel Me.cboSArbeiten.DisplayMember = "Stundenzettel"
So habe es neu geschrieben jetzt habe ich das Problem wenn die SNR +1 gesetzt wird wird diese nicht in die Access db aktualiert!
Code:
Imports System Imports System.Data Imports System.Text.RegularExpressions
Public Class Test Inherits System.Windows.Forms.Form #Region " Deklarationen für Datenverbindung " Dim dbTreiber As String = "Microsoft.Jet.OLEDB.4.0" Dim dbQuelle As String = Application.StartupPath & "\dbFaktur.mdb"
'1 Connection-Objekt wird benötigt: Dim objConnection As OleDb.OleDbConnection = _ New OleDb.OleDbConnection("Provider=" & dbTreiber & "; Data Source=" & dbQuelle) Dim objDataAdapter As OleDb.OleDbDataAdapter
'5 Datenadapter, jeweils für Kunden-, Artikel- und Umsatztabelle, ServiceLaufendeNummer Dim adapterKunden As OleDb.OleDbDataAdapter Dim adapterMonteur As OleDb.OleDbDataAdapter Dim adapterArtikel As OleDb.OleDbDataAdapter Dim adapterUmsatz As OleDb.OleDbDataAdapter Dim adapterServiceUmsatz As OleDb.OleDbDataAdapter Dim adapterStundenzettel As OleDb.OleDbDataAdapter Dim adapterServiceLaufendeNummer As OleDb.OleDbDataAdapter ' TM 21032018
'1 Dataset, in dem dann 4 Tabellen gespeichert werden Dim objDataSet As DataSet '5 Views, jeweils für Kunden-, Artikel- und Umsatztabelle im DataSet, ServiceLaufendeNummer Dim viewKunden As DataView Dim viewMonteur As DataView Dim viewArtikel As DataView Dim viewUmsatz As DataView Dim viewServiceUmsatz As DataView Dim viewStundenzettel As DataView Dim viewServiceLaufendeNummer As DataView ' TM 21032018
' objDataView Dim objDataView As DataView '#### TM Zeilen Zähler lblPosition
'1 CommandBuilder für Umsatztabelle (nur in diese soll geschrieben werden) Dim objCommandBuilder As OleDb.OleDbCommandBuilder
'Globaler Zähler für Rechnungspositionen Dim Pos As Integer
#End Region
Private Sub Test_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'Säubern der Views viewKunden = Nothing viewMonteur = Nothing viewArtikel = Nothing viewUmsatz = Nothing viewServiceUmsatz = Nothing viewStundenzettel = Nothing viewServiceLaufendeNummer = Nothing ' TM 21032018 'Leeren eines evtl. alten DataViews: 'objDataView = Nothing 'objDataSet = Nothing
'Erzeugen des DataSet-Objekts objDataSet = New DataSet()
'Öffnen der Verbindung zur Datenbank objConnection.Open() 'Auf die Verbindung zur Datenbank wird der Daten-Adapter aufgesetzt: 'objDataAdapter = New OleDb.OleDbDataAdapter("SELECT * FROM tabServiceLaufendeNummer", objConnection) '************************************************************************* 'Neu ab Faktur3: 'objDataAdapter.SelectCommand = New OleDb.OleDbCommand("SELECT * FROM tabServiceLaufendeNummer", objConnection) 'objCommandBuilder = New OleDb.OleDbCommandBuilder(objDataAdapter) '*************************************************************************
'Kundendaten einholen adapterKunden = New OleDb.OleDbDataAdapter("SELECT KNR, [zuname] & ', ' & [vorname] AS Name FROM tabKunden", objConnection) adapterKunden.Fill(objDataSet, "tabKunden") viewKunden = New DataView(objDataSet.Tables("tabKunden"))
'Personaldaten einholen tabMonteur adapterMonteur = New OleDb.OleDbDataAdapter("SELECT PID, [VName] & ', ' & [NName] AS Monteur FROM tabMonteur", objConnection) adapterMonteur.Fill(objDataSet, "tabMonteur") viewMonteur = New DataView(objDataSet.Tables("tabMonteur"))
'Artikeldaten einholen adapterArtikel = New OleDb.OleDbDataAdapter("SELECT * FROM tabArtikel", objConnection) adapterArtikel.Fill(objDataSet, "tabArtikel") viewArtikel = New DataView(objDataSet.Tables("tabArtikel"))
'Servicenummer SNR einholen ---- TM 23.04.2018 Noch in txtSNR ausgeben --- adapterServiceLaufendeNummer = New OleDb.OleDbDataAdapter("SELECT * FROM tabServiceLaufendeNummer", objConnection) adapterServiceLaufendeNummer.Fill(objDataSet, "tabServiceLaufendeNummer") viewServiceLaufendeNummer = New DataView(objDataSet.Tables("tabServiceLaufendeNummer"))
'Combobox für Kunden an Datenquelle binden Me.cboKunde.DataBindings.Add("Text", viewKunden, "Name") '*** siehe unten... Me.cboKunde.DataSource = viewKunden Me.cboKunde.DisplayMember = "Name"
'Combobox für Service Personal an Datenquelle binden tabMonteur Me.cboMonteur.DataBindings.Add("Text", viewMonteur, "Monteur") Me.cboMonteur.DataSource = viewMonteur Me.cboMonteur.DisplayMember = "Monteur"
'Combobox für Stundenzettel an Datenquelle binden Me.cboSArbeiten.DataBindings.Add("Text", viewStundenzettel, "Stundenzettel") Me.cboSArbeiten.DataSource = viewStundenzettel Me.cboSArbeiten.DisplayMember = "Stundenzettel"
'ComboBox SNR --- TM 23.04.2018 ---- cbo zeigt die 6 SNR an ok Me.cboSNR.DataBindings.Add("Text", viewServiceLaufendeNummer, "Zeahler") Me.cboSNR.DataSource = viewServiceLaufendeNummer Me.cboSNR.DisplayMember = "Zeahler" Me.cboSNR.DataBindings.Clear() Me.cboSNR.Update()
'##### Combobox an Kundennummer viewKunden binden wenn Combobox ausgewählt wird ####### NEU TM 27092017 'Me.txtKNR.DataBindings.Add(New Binding("Text", viewKunden, "KNR")) '## Kundennummer Databindings löschen ... Me.txtKNR.DataBindings.Clear() Me.txtKNR.DataBindings.Add("Text", viewKunden, "KNR")
'Service Laufende Nummer in txtSNR anzeigen ---- Me.txtSNR.DataBindings.Clear() Me.txtSNR.DataBindings.Add("Text", viewServiceLaufendeNummer, "Zeahler")
lblPosition.Text = aktuellerDS & " von " & AnzahlDS
End Sub
Private Sub butUebernehmenSA_Click(sender As Object, e As EventArgs) Handles butUebernehmenSA.Click 'lokale Variablen SKDN, SLeistungsdatum, SLeistungsdatumEnd, SVon, SBis, SAuftrag, SLeistung Dim SAuftrag ' As Integer
'Gbetrag = CDbl(objDataSet.Tables("tabArtikel").Rows(BindingContext(viewArtikel).Position).Item("Preis")) * Anz Pos += 1 'ListView-Objekt um neue Zeile ergänzen POS eintragen Dim LVItem As ListViewItem 'Dim Daten As ListViewItem
'Subeinträge der neuen Zeile Dim parts() = cboSArbeiten.Text.Split({"-"}, StringSplitOptions.None) 'TextBox1.Text.Split({"-"}, StringSplitOptions.None) 'Pos eintragen... LVItem LVItem = ListViewTimeWork.Items.Add(Pos.ToString("n0")) ' Positions Nummer eintragen For i = 0 To parts.Length - 1 LVItem.SubItems.Add(parts(i)) Next
'### listview test daten 'LVItem = ListViewTimeWork.Items.Add(Pos.ToString("n0"))
'#### Listview sub items test daten 'LVItem.SubItems.Add(1).Text = "Ich bin ein Test" 'LVItem.SubItems.Add(SLeistungsdatum) = "Ich bin ein Test" 'LVItem.SubItems.Add(2).Text = "Hiho"
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'Löschen der alten Datebindings mit Clear - sonst wird der Inhalt Überschrieben und zeigt falsche Werte an TM 12.04.2018 'Me.cboSNR.DataBindings.Clear() '## letzte Position aufrufen 'PositionAnzeige()
Dim sNumber As String = txtSNR.Text '"S2018-99" Dim sNewNumber As String = "S" & DateTime.Now.ToString("yyyy") Dim Number Dim lPos, lNumber As Integer Dim dr As DialogResult Dim Antwort
lPos = InStr(sNumber, "-") If lPos > 0 Then lNumber = CInt(Mid(sNumber, lPos + 1, 3)) + 1 'Number = Left(sNewNumber, lPos) & Right("00" & CStr(lNumber), 3) Number = (sNewNumber) & "-" & CStr(lNumber) 'MsgBox(Number & (" S Nummer NEU setzten! JA / NEIN")) txtSNR.Text = Number MessageBox.Show("Soll die SNR " & Number & " neu anglegt werden?", "Anlegen Service Nummer", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If dr = DialogResult.Yes Then 'lblA.Text = "Anlegen"
Antwort = " Anlegen" butNeuSNR.PerformClick() ' Click-Ereignis per Code auszulösen Else 'lblA.Text = "Nicht Anlegen" Antwort = " Nicht Anlegen" End If 'Löschen der alten Datebindings mit Clear - sonst wird der Inhalt Überschrieben und zeigt falsche Werte an TM 12.04.2018 Me.cboSNR.DataBindings.Clear() End If End Sub
Private Sub butNeuSNR_Click(sender As Object, e As EventArgs) Handles butNeuSNR.Click Dim objZeile As DataRow objZeile = objDataSet.Tables("tabServiceLaufendeNummer").NewRow() With objZeile .Item("Zeahler") = txtSNR.Text '.Item("ArchivNr") = 1 '#### Noch nicht Implendiert.... End With objDataSet.Tables("tabServiceLaufendeNummer").Rows.Add(objZeile) objDataAdapter.Update(objDataSet, "tabServiceLaufendeNummer")
'Befehle zum Anzeigen der Kundennummer des angehängten Datensatzes (Autowert in MDB!): 'DataSet einmal löschen und neu reinladen: objDataSet.Clear() objDataAdapter.Fill(objDataSet, "tabServiceLaufendeNummer") ' Fill #################################################### cboBox Warum !!!
'auf letzten Datensatz springen: BindingContext(viewServiceLaufendeNummer).Position = BindingContext(viewServiceLaufendeNummer).Count - 1
PositionAnzeige() End Sub
Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click
End Sub
Private Sub Label2_Click(sender As Object, e As EventArgs) Handles Label2.Click
End Sub
Private Sub Label3_Click(sender As Object, e As EventArgs) Handles Label3.Click
End Sub
Private Sub Label4_Click(sender As Object, e As EventArgs) Handles Label4.Click
End Sub
Private Sub Label5_Click(sender As Object, e As EventArgs) Handles Label5.Click
End Sub Private Sub Label6_Click(sender As Object, e As EventArgs) Handles Label6.Click
End Sub
Private Sub cboKunde_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboKunde.SelectedIndexChanged
End Sub
Private Sub cboMonteur_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboMonteur.SelectedIndexChanged
End Sub
Private Sub cboSArbeiten_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboSArbeiten.SelectedIndexChanged
End Sub Private Sub cboSNR_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboSNR.SelectedIndexChanged PositionAnzeige() End Sub
Private Sub txtKNR_TextChanged(sender As Object, e As EventArgs) Handles txtKNR.TextChanged
End Sub Private Sub txtSNR_TextChanged(sender As Object, e As EventArgs) Handles txtSNR.TextChanged
End Sub
Private Sub lblPosition_Click(sender As Object, e As EventArgs) Handles lblPosition.Click
Wenn ich Ihren Quelltext richtig interpretiere, dann liegt das Problem in der Handlerfunktion
butNeuSNR_Click
. Sie haben zwar das Recordset neu geladen, aber nicht das Auswahlfeld neu mit dem Recordset verbunden. Es könnte auch sein, dass die Sicht viewServiceLaufendeNummer nichts mitbekommt.
Vielleicht hilft es ein wenig bei der Fehlersuche, denn ich stecke leider nicht so tief in der Accessprogrammierung.