| 

.NET C# Java Javascript Exception

1
Hallo finde das Problem nicht wo es hängt - Combobox zeigt jetzt doppelte Einträge an.

Me.cboSNR.DataBindings.Clear() , Open Close gesetzt...


Gruss

CODE:

Private Sub ServiceBericht_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)
'*************************************************************************

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

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

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

'### Combobox SNR an Datenquelle binden
Me.cboSNR.DataBindings.Add("Text", viewServiceLaufendeNummer, "Zeahler")
Me.cboSNR.DataSource = viewServiceLaufendeNummer
Me.cboSNR.DisplayMember = "Zeahler"
'## an Textfeld binden
Me.txtSNR.DataBindings.Add("Text", viewServiceLaufendeNummer, "Zeahler")

Me.cboSNR.Refresh()



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



'letzte Nummer aufrufen S2018-99
PositionAnzeigen()

'Schliessen der Verbindung zur Datenbank

objConnection.Close()



End Sub
News:
19.04.2018
tsmeier 51 1 3
3 Antworten
0
Hier könnte das Problem liegen... Fill

objDataAdapter.Fill(objDataSet, "tabServiceLaufendeNummer")
'######################### Hier liegt das Problem doppelte Daten Anzeige cbobox!!!

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


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

End Sub


End Class
23.04.2018
tsmeier 51 1 3
0
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.
24.04.2018
edvservice 1,3k 1 6

Stelle deine --Frage jetzt!