vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
unnötige Datensätze löschen 
Autor: ERBRU
Datum: 08.05.17 17:23

Hallo Forum,

ich habe eine Tabelle Meldung und eine Tabelle Maßnahmen

eine Meldung hat eine oder mehr Maßnahmen zur Problemabstellung. Diese Maßnahmen werden terminiert.
User soll nun Problem abstellen wenn Maßnahme umgesetzt und die Wirksamkeit OK. Das habe ich so gelöst

 'Maßnahmen pruefen
 Public Sub Maßnahmen_pruefen()
 If BS_TPMMaßnahme_TypRow Is Nothing Then Return
 Dim Zustand_Checkbox As Boolean = chb_Meldung_erledigt.Checked
 Dim abfr_MeldeID As Integer
 Dim abfr_TPMKarte As String = tbx_Meldung_TPMKarte.Text
 Dim NL = Environment.NewLine
 abfr_MeldeID = CInt(tbx_Meldung_ID.Text)
 'Abfrage ob Maßnahmen zur Meldung abgearbeitet sind
 Dim AbfrageMaßnahme = _
 From Reihe In TPMDB.TPMMaßnahme Where Reihe.RowState <> _
 DataRowState.Deleted AndAlso (Reihe.TPMMeldungID = abfr_MeldeID) AndAlso ( _
 Reihe.abgearbeitet <> True)
 Select Reihe.ID, Reihe.Maßnahme
 If AbfrageMaßnahme.Count > 0 Then
 Dim Form_Rueckgabewert As Boolean
 Using Dialog_Form As New frm_Dialog()
 With Dialog_Form
 .ShowInTaskbar = True
 'Titel an frm_Dialog übergeben
 .lbl_Titel.Text = "offene Maßnahmen!"
 'Meldung an frm_Dialog übergeben
 Dim sbMeldung As New System.Text.StringBuilder
 sbMeldung.AppendFormat("{0} {1}", "Die Problemmeldung: ", abfr_TPMKarte)
 sbMeldung.AppendLine()
 sbMeldung.AppendFormat("{0} {1} {2}", "zeigt noch ", AbfrageMaßnahme.Count, "" & _
   "offene Maßnahmen.")
 sbMeldung.AppendLine()
 sbMeldung.AppendLine()
 sbMeldung.Append("Bitte erst die Maßnahmen abarbeiten, dann Problem" & _
   "abschließen.")
 .lbl_Meldung.Text = sbMeldung.ToString
 .lbl_Infobox.Text = "Problem trotzdem abschliessen?"
 'Alle Maßnahmen an frm_Dialog übergeben
 .ListBox_Daten.Items.AddRange(AbfrageMaßnahme.ToArray)
 'frm_Dialog anzeigen
 .ShowDialog(Me)
 'Abfragen, ob Ja oder Nein geklickt wurde
 Form_Rueckgabewert = Dialog_Form.return_wert
 If Form_Rueckgabewert = True Then
 MessageBox.Show(String.Concat("Problem wird abgestellt. ", NL, _
 "Zeitstempel: " & Dialog_Form.TextBox1.Text, NL, " wird gespeichert"), _
 "Meldung", MessageBoxButtons.OK, MessageBoxIcon.Information)
 Dim Dt As Date = Convert.ToDateTime(Dialog_Form.TextBox1.Text)
 Dt = Date.Parse(Dt.ToString("dd.MM.yyyy"))
 tbx_Meldung_abgestellt.Text = Dialog_Form.TextBox1.Text
 BS_TPMMeldung_TypRow.erledigt = True
 BS_TPMMeldung_TypRow.abgestellt = Dt
 
 Me.Cursor = Cursors.WaitCursor
 'Alles speichern
 Me.Validate()
 BS_TPMMeldung.EndEdit()
 dict_BS_Pos.Clear()
 dict_BS_Pos.Add(BS_TPMMeldung, BS_TPMMeldung.Position)
 If mod_Saver.SaveDataset(Me.TPMDB, dict_BS_Pos, _
   TPMMeldungTableAdapter.Adapter) = False Then
 Return
 End If
 Me.Cursor = Cursors.Default
 dgv_TPM_Meldungen.Refresh()
 dgv_TPM_Meldungen.Enabled = True
 pnl_TPM_Meldung_Menue.Enabled = True
 Else
 dgv_TPM_Meldungen.Refresh()
 dgv_TPM_Meldungen.Enabled = True
 pnl_TPM_Meldung_Menue.Enabled = True
 End If
 End With
 End Using
 End If
 'Abfrage Null Rückgabe ausgeben, wenn keine offenen Maßnahmen gefunden wurden
 If AbfrageMaßnahme.Count = 0 Then
 Dim Form_Rueckgabewert As Boolean
 Using Dialog_Form As New frm_Dialog()
 With Dialog_Form
 .ShowInTaskbar = True
 'Titel an frm_Dialog übergeben
 .lbl_Titel.Text = "keine offenen Maßnahmen!"
 'Meldung an frm_Dialog übergeben
 
 End Sub
Nun kann es ja sein das 3,4 Maßnahmen gesetzt werden das Problem evtl. mit der 2,3 Maßnahme abgeschlossen werden könnte, wie in der Prüfung zu sehen.

wie könnte man da nun die verbleibenen Maßnahmen die noch nicht abgearbeitet wurden entfernen die werden ja nicht mehr benötigt? Und müssten so auch aus den offenen Maßnahmen verschwinden da entfernen erlaubt wird (wurde). Problem wird abgeschlossen mit Stempel wie in der Prüfung zu lesen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: unnötige Datensätze löschen 
Autor: Manfred X
Datum: 08.05.17 18:03

Hallo!

Du erwartest, daß jemand sich durch diesen unübersichtlich
gestalteten Code müht ??? Ich habe Zweifel ...

Mache die Blockstrukturen im Code deutlich, gib an wie und wo
die verwendeten Variablen deklariert sind.

Erläutere, wie diese Tabellen aufgebaut sind und was die Spalten
bedeuten, soweit sie für Deine Fragestellung relevant sind.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: unnötige Datensätze löschen 
Autor: sv00010
Datum: 08.05.17 18:07

ERBRU schrieb:
Zitat:

wie könnte man da nun die verbleibenen Maßnahmen die noch nicht abgearbeitet wurden entfernen die werden ja nicht mehr benötigt?

Es ist etwas schwierig, weil dein Code so unübersichtlich ist, bzw. die Definition der Typen nicht ersichtlich ist.

Als erstes mal eine entsprechende Struktur oder Klasse erstellen z.B.
Structure struct_for_Maßnahmen_pruefen(Of T)
   Dim strProblemmeldung           As String
   Dim List_AbfrageMaßnahme        As System.Collections.Generic.List(Of T)
End Structure
Wenn du die Structure erstellt hat, dann erstellst du eine Liste vom Typ dieser Structure (ähnlich wie die Liste in der Structure).
Dann die Liste komplett füllen mit allen Problemmeldungen und den Listen für die Abfrage-Maßnahmen in der Structure.
Da die Problemmeldung und die Liste der Abfrage-Maßnahmen je Problemmeldung jetzt in der Structure sind, reicht es aus in der Hauptliste mit den gesamten Problemmeldungen, den einzelnen Eintrag welcher gelöst wurde, zu löschen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: unnötige Datensätze löschen 
Autor: ERBRU
Datum: 08.05.17 18:58

Danke, doch mit System.Collections.Generic.List(Of T)habe ich keine Erfahrungen das wäre jetzt neu für mich. Evtl. ist deshalb mein Code so unübersichtlich für euch. Denn funktionieren tut es ja.

das sind die Tabellen mit den typ angaben

'typisierte Tabelle Meldungen
ID	                 Typ eindeutig Int32
Standort	     Typ String
Erstelldatum	     Typ Datetime
Auftragstyp	     Typ String
Meldung	             Typ String
TPMKarte             Typ String	
Anlage	             Typ String
Arbeitsfolge         Typ String 	
gemeldetvon	     Typ String
abgestellt	     Typ Datetime
erledigt             Typ Boolean
AuftragsartID        Typ Int32 aus Fremdtabelle 	
MaschinenID	     Typ Int32 aus Fremdtabelle 
ArbeitsfolgeID       Typ Int32 aus Fremdtabelle 
 
'typisierte Tabelle Maßnahmen
ID	             Typ eindeutig Int32
TPMMeldungID     Typ Int32 aus Tabelle Meldung	
MaßnahmeDatum    Typ Datetime	
Maßnahme         Typ String	
Verantwortlich   Typ String	
TerminStart      Typ Datetime	
TerminEnde       Typ Datetime	
erledigt         Typ Datetime	
Status	         Typ String
Notizen	         Typ String
StatusID         Typ Int32 aus Fremdtabelle	
abgearbeitet     Typ Boolean	
MaschinenID      Typ Int32 aus Fremdtabelle
evtl. hilft es euch
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: unnötige Datensätze löschen 
Autor: sv00010
Datum: 09.05.17 18:34

Ich habe mal ein Beispiel erstellt.

Module Beispiel
 
    Structure Meldungen
        'Jede ID darf nur einmal vergeben werden
        '(in der Liste darf nicht zweimal die selbe Zahl sein)
        Dim ID                  As System.Int32
        Dim Liste_Maßnahmen     As System.Collections.Generic.List(Of Maßnahmen)
 
 
        Dim Standort	     As System.String
        Dim Erstelldatum     As System.Datetime
        Dim Auftragstyp	     As System.String
        Dim Meldung	     As System.String
        Dim TPMKarte         As System.String	
        Dim Anlage	     As System.String
        Dim Arbeitsfolge     As System.String
        Dim gemeldetvon	     As System.String
        Dim abgestellt	     As System.Datetime
        Dim erledigt         As System.Boolean
        Dim AuftragsartID    As System.Int32
        Dim MaschinenID	     As System.Int32 
        Dim ArbeitsfolgeID   As System.Int32
    End Structure
 
    Structure Maßnahmen
        'Die JobID braucht hier nicht rein, weil diese Structure
        'als Member von der Structure struct_Meldungen verwendet werden soll.
        Dim TPMMeldungID     As System.Int32	
        Dim MaßnahmeDatum    As System.Datetime
        Dim Maßnahme         As System.String
        Dim Verantwortlich   As System.String	
        Dim TerminStart      As System.Datetime	
        Dim TerminEnde       As System.Datetime	
        Dim erledigt         As System.Datetime	
        Dim Status	     As System.String
        Dim Notizen	     As System.String
        Dim StatusID         As System.Int32
        Dim abgearbeitet     As System.Boolean
        Dim MaschinenID      As System.Int32
    End Structure
 
    Sub Beispiel_Meldungen()
        Dim Liste_Meldungen             As System.Collections.Generic.List(Of _
          Meldungen) = Nothing
        Dim Beispieleintrag_Meldung     As Meldungen = Nothing
        Dim Beispieleintrag_Maßnahmen1  As Maßnahmen = Nothing    
        Const BEISPIEL_ID               As System.Int32 = 123
 
 
        Liste_Meldungen = New System.Collections.Generic.List(Of Meldungen)
 
        Beispieleintrag_Meldung.ID = BEISPIEL_ID
        Beispieleintrag_Meldung.Liste_Maßnahmen = New _
          System.Collections.Generic.List(Of Maßnahmen)
        Beispieleintrag_Meldung.Erstelldatum    = System.DateTime.Now
 
        '************************************************************
        'Hier jetzt noch weitere Member von Structure Meldungen mit 
        ' Beispielwerten füllen
        '*************************************************************
 
        'Beispielwerte für  Structure Maßnahmen einfüllen
        Beispieleintrag_Maßnahmen1.MaschinenID = 178
        Beispieleintrag_Maßnahmen1.MaßnahmeDatum = System.DateTime.Now
 
        '************************************************************
        'Hier jetzt noch weitere Member von Structure Maßnahmen mit 
        ' Beispielwerten füllen
        '*************************************************************
 
        'Beispieleintrag_Maßnahmen1 in Liste_Meldungen eintragen
        Beispieleintrag_Meldung.Liste_Maßnahmen.Add(Beispieleintrag_Maßnahmen1)
 
         '************************************************************
        'Hier jetzt noch einen Breakpoint mit F9 hinsetzen, um die Ergebnisse 
        ' der Liste anzuschauen.
        '*************************************************************
        Dim Breakpoint As Integer = 0
 
 
 
    End Sub
 
 
 
End Module
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: unnötige Datensätze löschen 
Autor: ERBRU
Datum: 09.05.17 19:47

wow das schau ich mir in aller Ruhe an, brauche eine Weile bis ich deine vorgehensweise verstanden habe
Danke dir schon mal, melde mich dann später mal ob ich den Rest hinbekomme.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: unnötige Datensätze löschen 
Autor: sv00010
Datum: 09.05.17 20:30

Ich habe gerade gemerkt, dass ich im Beispiel noch ein Add an einer Liste vergessenen hatte.

So muss es sein:
       'Beispieleintrag_Maßnahmen1 in Liste_Maßnahmen eintragen
        Beispieleintrag_Meldung.Liste_Maßnahmen.Add(Beispieleintrag_Maßnahmen1)
 
        'Beispieleintrag_Meldung in Liste_Meldungen eintragen
        Liste_Meldungen.Add(Beispieleintrag_Meldung)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: unnötige Datensätze löschen 
Autor: ERBRU
Datum: 10.05.17 06:13

Danke, wie muss das über eine Form mit DGV laufen?
da habe ich noch ?? da ich das Konzept so in VB noch nie gemacht habe arbeite ja mit Dataset und Datatable

möchte ein Testprojekt draus machen um es zu verstehen
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: unnötige Datensätze löschen 
Autor: sv00010
Datum: 10.05.17 08:59

ERBRU schrieb:
Zitat:

da ich das Konzept so in VB noch nie
gemacht habe arbeite ja mit Dataset und Datatable

Mit DataTable brauchst du nur in einer Schleife die gesamte DataTable der Maßnahmen durchlaufen und alle Eintäge raus löschen bei welchen die gleiche ID drin steht, wie in dem Eintrag, welchen du erledigt hast.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: unnötige Datensätze löschen 
Autor: ERBRU
Datum: 10.05.17 17:51

Na Danke, dann habe ich es doch richtig umgesetzt es funktioniert

nach meiner Maßnahmen_Prüfung, weiß ich ob Problem abgeschlossen wurde ist dem so und noch Maßnahmen offen lösche ich die raus.

  'Code Maßnahmen_prüfen
  'nicht mehr benötigte Maßnahmen löschen wenn Problem abgestellt wurde
        If BS_TPMMeldung_TypRow.erledigt = True Then
            entferne_Nicht_benötigte_Maßnahmen()
        End If
und hier wäre dann die Lösch Prozedur, habe ich gestern Abend getestet.
OK wenn User nicht aufpasst dann lösche ich auch alle Maßnahmen der Meldung eine sollte eigentlich stehen bleiben. Aber der User muss auch eine Aufgabe haben. Und es wird ja abgefragt in speziellen Runden ob Problem mit einer Maßnahme x abgeschlossen werden konnte.

Obwohl ich deine Variante gerne mal probieren möchte, dazu müsste ich wissen wie da der Plan in einer Form aussehen könnte.


 Private Sub entferne_Nicht_benötigte_Maßnahmen()
        Dim abfr_MeldeID As Integer
        abfr_MeldeID = CInt(tbx_Meldung_ID.Text)
 
        Dim NL = Environment.NewLine
 
        Dim Abfrage = From Eintrag In BS_TPMMaßnahme_Liste
                      Where Eintrag.RowState <> DataRowState.Deleted _
                      AndAlso (Eintrag.TPMMeldungID = abfr_MeldeID) _
                      AndAlso (Eintrag.abgearbeitet = False) _
                      Select Eintrag
 
        If Abfrage.Count = 0 Then Exit Sub
 
        For Each Eintrag In Abfrage : Eintrag.Delete() : Next
 
        'Änderungen Speichern
        Me.Cursor = Cursors.WaitCursor
        Me.Validate()
        BS_TPMMaßnahme.EndEdit()
        dict_BS_Pos.Clear()
        dict_BS_Pos.Add(BS_TPMMaßnahme, BS_TPMMaßnahme.Position)
        mod_Saver.SaveDataset(Me.TPMDB, dict_BS_Pos, _
          TPMMaßnahmeTableAdapter.Adapter)
        Me.Cursor = Cursors.Default
 
        'Information zurückgeben an User
        MessageBox.Show(String.Concat("Problem wurde abgestellt. ", NL, _
                                      "nicht mehr benötigte Maßnahmen, ", NL, "" & _
                                      "wurden entfernt!"), _
                                      "Information-Meldung", _
                                      MessageBoxButtons.OK, _
                                      MessageBoxIcon.Information)
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel