| 

.NET C# Java Javascript Exception

3
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

PositionAnzeige()


Gruss
Thomas Meier
26.04.2018
tsmeier 51 1 3
5 Antworten
0
Ich denke, das Festschreiben fehlt
- AcceptChanges() schreibt alles in einer Transaktion fest

objDataSet.Tables("tabServiceLaufendeNummer").Rows.AcceptChanges()


Das sollte eigentlich genügen.
27.04.2018
edvservice 1,4k 1 6
0
Danke für den Tipp

objDataSet.Tables("tabServiceLaufendeNummer").Rows.AcceptChanges()

objDataSet.Tables("tabServiceLaufendeNummer").AcceptChanges()

Der gleiche Fehlermeldung tritt auf...

Ein Ausnahmefehler des Typs "System.NullReferenceException" ist in Servicebericht.exe aufgetreten.

Zusätzliche Informationen: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Zeile wo es hängt:
objDataAdapter.Update(objDataSet, "tabServiceLaufendeNummer")

Gruss
Thomas Meier
29.04.2018
tsmeier 51 1 3
0
Hab mal das Projekt hier kpl. angehängt zum Downloaden 10 Tage

share.erowa.com/files/2018429131200543/erowa.zip

Gruss
Thomas Meier
29.04.2018
tsmeier 51 1 3
0
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


'ListView.MultiSelect = False '### Multiselect deaktivieren TM 25.10.2017

'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"))

'Stundenzettel einholen ---- Ole Adapter ----
'adapterStundenzettel = New OleDb.OleDbDataAdapter("SELECT * FROM tabStundenzettel", objConnection)
adapterStundenzettel = New OleDb.OleDbDataAdapter("SELECT [SKDN] & ' - ' & [SLeistungsdatum] & ' - ' & [SLeistungsdatumEnd] & ' - ' & [SVon] & ' - ' & [SBis] & ' - ' & [SAuftrag] & ' - ' & [SLeistung] & ' - ' & [Stunden] AS Stundenzettel FROM tabStundenzettel", objConnection)
'adapterStundenzettel = New OleDb.OleDbDataAdapter("SELECT SKDN, [SKDN] & ' - ' & [SVon] & ' - ' & [SLeistungsdatum] & ' - ' & [SLeistungsdatumEnd] & ' - ' & [SBis] & ' - ' & [SAuftrag] & ' - ' & [SLeistung] & ' - ' & [Stunden] AS Stundenzettel FROM tabStundenzettel", objConnection)
adapterStundenzettel.Fill(objDataSet, "tabStundenzettel")
viewStundenzettel = New DataView(objDataSet.Tables("tabStundenzettel"))

'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")

'auf letzten Datensatz springen S2018-99 z.b.:
BindingContext(viewServiceLaufendeNummer).Position = BindingContext(viewServiceLaufendeNummer).Count - 1



'letzte höchste Nummer aufrufen S2018-99

PositionAnzeige()

'Schliessen der Verbindung zur Datenbank

'objConnection.Close()


End Sub
Sub PositionAnzeige()

Dim aktuellerDS As Integer
Dim AnzahlDS As Integer


'aktuellerDS = BindingContext(viewServiceLaufendeNummer).Position + 1
'cboSNR.SelectedIndex.ToString() = 'BindingContext(viewServiceLaufendeNummer).Position + 1
aktuellerDS = cboSNR.SelectedIndex + 1
AnzahlDS = BindingContext(viewServiceLaufendeNummer).Count

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

SAuftrag = (objDataSet.Tables("tabStundenzettel").Rows(BindingContext(viewStundenzettel).Position).Item("Stundenzettel"))


'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")

'objDataSet.Tables("tabServiceLaufendeNummer").AcceptChanges()

'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")

'objDataSet.Tables("tabServiceLaufendeNummer").Rows.AcceptChanges()

'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

'# PositionAnzeige()

'Dim objZeile As DataRow
'objZeile = objDataSet.Tables("Tabellenname").NewRow()
'objZeile.Item("Feldname1") = txtTextfeld1.Text
'objZeile.Item("Feldname2") = txtTextfeld2.Text
'objDataSet.Tables("Tabellenname").Rows.Add(objZeile)
'objDataAdapter.Update(objDataSet, "Tabellenname")


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

End Sub


End Class
02.05.2018
tsmeier 51 1 3
0
Frage wie mache ich es mit If Then Else oder kann man das anders machen "Service Nummer anlegen" wer kann helfen...

share Download: share.erowa.com/files/20185192152530715/erowa.zip

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

Laden()

End Sub
19.05.2018
tsmeier 51 1 3

Stelle deine Access-Frage jetzt!