| |
VB.NET - Fortgeschritteneunnö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. | |
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. | |
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. | |
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 | |
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 | |
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. | |
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) | |
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 | |
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. | |
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 | |
| 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 |
|
|
sevAniGif (VB/VBA)
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|