Hallo hab hier ein Problem mit dem objDataAdapter.Update neue Daten können nicht hinzu gefügt werden!!!
Access db heisst : dbFaktur.mdb Tabelle: tabServiceLaufendeNummer Feldname: Zeahler Text Feldname: ArchivNr Text
Bleibt hier hängen: objDataAdapter.Update(objDataSet, "tabServiceLaufendeNummer")
CODE:
Dim sNumber As String = txtSNR.Text '"S2018-99" Dim sNewNumber As String = "S" & DateTime.Now.ToString("yyyy") Dim Number As String Dim lPos As Integer Dim 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
' txtSNR.Text = Number Dim objZeile As DataRow objZeile = objDataSet.Tables("tabServiceLaufendeNummer").NewRow() With objZeile .Item("Zeahler") = (sNewNumber) & "-" & CStr(lNumber) 'txtSNR.Text .Item("ArchivNr") = "15" 'txtSLeistungsdatum '.Item("SVon") = MaskedSVon.Text 'txtSVon '.Item("SBis") = MaskedSBis.Text 'txtSBis ' .Item("SAuftrag") = txtSAuftrag.Text '.Item("SLeistung") = txtSLeistung.Text 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") 'auf letzten Datensatz springen: BindingContext(objDataView).Position = BindingContext(objDataView).Count - 1
So hab mal das Programm geändert - jetzt wird zwar geschrieben in db aber die Felder
cboKunde, cboMonteur, txtKNR werden nach dem schreiben nicht aktualisiert.
Link: share.erowa.com/files/2018521410110589/erowa.zip 10 Tage Verfügbar Gruss Thomas Meier
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 As String Dim lPos As Integer Dim 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 Windows.Forms.DialogResult.Yes Then
' txtSNR.Text = Number Dim objZeile As DataRow objZeile = objDataSet.Tables("tabServiceLaufendeNummer").NewRow() With objZeile .Item("Zeahler") = (sNewNumber) & "-" & CStr(lNumber) 'txtSNR.Text '.Item("Zeahler") = "Test" .Item("ArchivNr") = "Test" 'txtSLeistungsdatum '.Item("SVon") = MaskedSVon.Text 'txtSVon '.Item("SBis") = MaskedSBis.Text 'txtSBis ' .Item("SAuftrag") = txtSAuftrag.Text '.Item("SLeistung") = txtSLeistung.Text End With objDataSet.Tables("tabServiceLaufendeNummer").Rows.Add(objZeile) 'objDataSet.Tables("tabServiceLaufendeNummer").Rows.AcceptChanges(objZeile) 'objDataSet.Tables("tabServiceLaufendeNummer").AcceptChanges() '#### Aus Codkicker edvservice, schreibt trotzdem nicht in db!!! 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") 'auf letzten Datensatz springen: 'BindingContext(objDataView).Position = BindingContext(objDataView).Count - 1
PositionAnzeige()
End If
'If dr = DialogResult.Yes Then 'lblA.Text = "Anlegen"
'Antwort = " Anlegen" 'butNeuSNR.PerformClick() ' Click-Ereignis per Code auszulösen 'Else ': dr = DialogResult.No '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") = "15" 'txtSLeistungsdatum '.Item("SVon") = MaskedSVon.Text 'txtSVon '.Item("SBis") = MaskedSBis.Text 'txtSBis ' .Item("SAuftrag") = txtSAuftrag.Text '.Item("SLeistung") = txtSLeistung.Text 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") 'auf letzten Datensatz springen: BindingContext(objDataView).Position = BindingContext(objDataView).Count - 1
PositionAnzeige()
'auf letzten Datensatz springen: '# BindingContext(viewServiceLaufendeNummer).Position = BindingContext(viewServiceLaufendeNummer).Count - 1
Alle Dateien verbleiben maximal 10 Tage auf dem Server.
Gruss Meier Thomas ---------------------------------------------------- Code - No Ablehnung funktioniert nicht:
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 As String Dim lPos As Integer Dim lNumber As Integer
lPos = InStr(sNumber, "-") If lPos > 0 Then lNumber = CInt(Mid(sNumber, lPos + 1, 3)) + 1 Number = (sNewNumber) & "-" & CStr(lNumber)
txtSNR.Text = Number MessageBox.Show("Soll die SNR " & Number & " neu anglegt werden?", "Anlegen Service Nummer", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If Windows.Forms.DialogResult.Yes Then
' txtSNR.Text = Number Dim objZeile As DataRow objDataAdapter.Fill(objDataSet, "tabServiceLaufendeNummer") objZeile = objDataSet.Tables("tabServiceLaufendeNummer").NewRow() With objZeile .Item("Zeahler") = (sNewNumber) & "-" & CStr(lNumber) 'txtSNR.Text .Item("ArchivNr") = "Test" End With objDataSet.Tables("tabServiceLaufendeNummer").Rows.Add(objZeile)
' Speichern und ändern #### SchlüsselSpaltenInformation !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 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") 'auf letzten Datensatz springen: 'BindingContext(objDataView).Position = BindingContext(objDataView).Count - 1 '### sonst Error!!!!
PositionAnzeige()
Else
MessageBox.Show("Die SNR " & Number & " wird nicht neu anglegt", "Anlegen Service Nummer Nein", MessageBoxButtons.OK, MessageBoxIcon.Warning)
End If
'Löschen der alten Datebindings mit Clear - sonst wird der Inhalt Me.cboSNR.DataBindings.Clear() End If