Code gibt vor: mach 2 Aktionen nacheinander; aber nur 1 wird ausgeführt

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von heinosh.

    Code gibt vor: mach 2 Aktionen nacheinander; aber nur 1 wird ausgeführt

    Hallo
    Ich habe ein Code bekommen, welches ich etwas umgeschrieben habe. Dieses Programm greift auf ein externes Programm zu, um Labels auszudrucken. Funktioniert auch soweit.Nun soll es aber noch in eine Datenbank schreiben. Tut es auch. Aber.....beides geht nicht. Deaktiviere ich das schreiben in der DB, druckt er. Deaktiviere ich das drucken, schreibt er. Nur beides nicht. Ich erhalte auch keine Fehlermeldung.
    Leider weiß ich nicht , wie ich ansetzen soll um den Fehler zu beheben.

    Hier mal der Ausschnitt des Codes

    VB.NET-Quellcode

    1. Friend Class Form1
    2. Inherits System.Windows.Forms.Form
    3. Dim LabelName As String
    4. Dim bLabelInit As Boolean
    5. Dim bNotifyInit As Boolean
    6. Public WithEvents Notify As Legi32.Notification
    7. Public WithEvents Label As Legi32.Label
    8. Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
    9. Me.LS_K_ATableAdapter.Fill(Me.DataLogDataSet.LS_K_A)
    10. Me.LS_PrintTableAdapter.Fill(Me.DataLogDataSet.LS_Print)
    11. Label = New Legi32.Label
    12. 'Instantiate the connectable object.
    13. Notify = New Legi32.Notification
    14. ' Setup the callback events
    15. bNotifyInit = Notify.InitializeConnectionPoints
    16. If bNotifyInit = False Then
    17. MsgBox("Error initializing Notification object")
    18. End If
    19. bLabelInit = Label.InitializeConnectionPoints
    20. If bLabelInit = False Then
    21. MsgBox("Error initializing Label object")
    22. End If
    23. Timer.Enabled = True
    24. Timer.Interval = 36000
    25. Statusbar_LabelFE.Text = FELabel1.Text
    26. ToolStripStatusLabel2.Text = Label3.Text
    27. End Sub
    28. Private Sub Timmer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer.Tick
    29. If IsNumeric(FELabel1.Text) Then
    30. Print()
    31. End If
    32. Me.LS_K_ATableAdapter.Fill(Me.DataLogDataSet.LS_K_A)
    33. Me.LS_PrintTableAdapter.Fill(Me.DataLogDataSet.LS_Print)
    34. Statusbar_LabelFE.Text = FELabel1.Text
    35. ToolStripStatusLabel2.Text = Label3.Text
    36. End Sub
    37. Private Sub Form1_FormClosed(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
    38. If bLabelInit Then
    39. Label.CleanupConnectionPoints()
    40. End If
    41. If bNotifyInit Then
    42. Notify.CleanupConnectionPoints()
    43. End If
    44. 'UPGRADE_NOTE: Das Objekt Label kann erst dann gelöscht werden, wenn die Garbagecollection durchgeführt wurde. Klicken Sie hier für weitere Informationen: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6E35BFF6-CD74-4B09-9689-3E1A43DF8969"'
    45. Label = Nothing
    46. 'UPGRADE_NOTE: Das Objekt Notify kann erst dann gelöscht werden, wenn die Garbagecollection durchgeführt wurde. Klicken Sie hier für weitere Informationen: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6E35BFF6-CD74-4B09-9689-3E1A43DF8969"'
    47. Notify = Nothing
    48. End Sub
    49. Public Sub IDM_EXIT_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles IDM_EXIT.Click
    50. Me.Close()
    51. End Sub
    52. Public Sub IDM_PRINT_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles IDM_PRINT.Click
    53. Print()
    54. End Sub
    55. Public Sub IDM_SELECT_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles IDM_SELECT.Click
    56. Dim nLoaded As Short
    57. 'UPGRADE_WARNING: Filter hat ein neues Verhalten. Klicken Sie hier für weitere Informationen: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="9B7D5ADD-D8FE-4819-A36C-6DEDAF088CC7"'
    58. OpenFileDialog1.Filter = "All Files (*.*)|*.*|Label Files (*.lbl)|*.lbl"
    59. ' Specify default filter.
    60. OpenFileDialog1.FilterIndex = 2
    61. ' Display the Open dialog box.
    62. OpenFileDialog1.ShowDialog()
    63. ' Call the open file procedure.
    64. LabelName = OpenFileDialog1.FileName
    65. nLoaded = Label.LoadLabel(LabelName)
    66. Label2.Text = LabelName
    67. If nLoaded = 0 Then
    68. ' 255 means enumerate all supplied fields
    69. ' Only the 4 least significant bits are looked.
    70. ' 1 => barcodes
    71. ' 2 => graphics
    72. ' 3 => raw
    73. ' 4 => text
    74. nLoaded = Label.EnumSuppliedFieldNames(255)
    75. If nLoaded > 0 Then
    76. MsgBox("Unexpected error enumerating supplied fields")
    77. End If
    78. End If
    79. ' Exit Sub
    80. End Sub
    81. Private Sub Print()
    82. Dim TableID As Integer
    83. TableID = Notify.GetRunObjectTableEntryID
    84. Dim status As Integer
    85. Dim ClientID As Integer
    86. ClientID = 1
    87. status = Label.SetRunningObjectTableEntryID(TableID, ClientID)
    88. If Not status = 0 Then
    89. MsgBox("SetRunningObjectTableEntryID returned an error")
    90. End If
    91. Label.PrintLabel()
    92. printedLbL.Text = "1"
    93. Me.Validate()
    94. LS_K_ABindingSource.EndEdit()
    95. LS_K_ATableAdapter.Update(DataLogDataSet.LS_K_A)
    96. End Sub
    97. Private Sub Notify_LabelPrinted(ByVal uParam As Integer, ByVal bRtn As Boolean) Handles Notify.LabelPrinted
    98. If uParam = 1 Then
    99. If bRtn = True Then
    100. Dim nIndex As Integer
    101. nIndex = 3
    102. Else
    103. nIndex = 1
    104. End If
    105. Else
    106. If bRtn = True Then
    107. nIndex = 2
    108. Else
    109. nIndex = 0
    110. End If
    111. End If
    112. End Sub
    113. End Class


    Bitte entschuldigt, das alles nicht mehr strukturiert ist. Hab alles mögliche , was ich weiß, getestet. Darum sind da einige hohle Labels und befehle drin. :S
    Welche Zeile musst Du denn deaktivieren, damit nicht gedruckt, aber gespeichert wird?
    Wie sah denn der Originalcode aus?
    Ist es gewollt, dass alle 36 Sekunden gedruckt wird?
    Wie lange dauert der Druck?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Folgende Zeile deaktiviere ich, damit nicht gedruckt wird:

    VB.NET-Quellcode

    1. Label.PrintLabel()


    Der Original ist in VB 6 geschrieben. Es ist noch ein Modul vorhanden. Das sieht folgendermaßen aus.

    VB.NET-Quellcode

    1. Module Global_Renamed
    2. Public nIndex As Short
    3. Public Structure RECT
    4. 'UPGRADE_NOTE: Left wurde aktualisiert auf Left_Renamed. Klicken Sie hier für weitere Informationen: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="A9E4979A-37FA-4718-9994-97DD76ED70A7"'
    5. Dim Left_Renamed As Integer
    6. Dim Top As Integer
    7. 'UPGRADE_NOTE: Right wurde aktualisiert auf Right_Renamed. Klicken Sie hier für weitere Informationen: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="A9E4979A-37FA-4718-9994-97DD76ED70A7"'
    8. Dim Right_Renamed As Integer
    9. Dim Bottom As Integer
    10. End Structure
    11. Public Declare Function CreateSolidBrush Lib "gdi32" (ByVal color As Integer) As Integer
    12. 'UPGRADE_NOTE: object wurde aktualisiert auf object_Renamed. Klicken Sie hier für weitere Informationen: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="A9E4979A-37FA-4718-9994-97DD76ED70A7"'
    13. Public Declare Function DeleteObject Lib "gdi32" (ByVal object_Renamed As Integer) As Integer
    14. 'UPGRADE_WARNING: Für die Struktur RECT müssen Marshalling-Attribute möglicherweise als ein Argument in dieser Declare-Anweisung weitergegeben werden. Klicken Sie hier für weitere Informationen: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="C429C3A5-5D47-4CD9-8F51-74A1616405DC"'
    15. Public Declare Function FillRect Lib "user32" (ByVal hdc As Integer, ByRef lpRect As RECT, ByVal clr As Integer) As Integer
    16. End Module


    Das ist alles was ich habe.
    Das Program auf das zugegriffen wird nennt sich Legitronic. Das ist ein Programm womit man Labels editieren kann, das auch zugriff auf eine Datenbank hat. Das funct ebenfals alles reibungslos

    Das alle 36 sek gedruckt werden soll ist gewollt. Da ist aber eine Prüfung dahinter, die schaut ob was zum drucken da ist. Das funktioniert ebenfals.
    Der druck dauer ca 3 sek.

    Ich habe am Freitag mal am Kompiler die optionen verändert. Option Explicit auf OFF usw. gestellt. Da kam ne Fehlermeldung. Nur Leider kann ich es heute nicht mehr nachvollziehen. Ich habe es mir auch nicht notiert.
    Was passiert denn, wenn Du die Reihenfolge vertauschst:

    VB.NET-Quellcode

    1. printedLbL.Text = "1"
    2. Me.Validate()
    3. LS_K_ABindingSource.EndEdit()
    4. LS_K_ATableAdapter.Update(DataLogDataSet.LS_K_A)
    5. Label.PrintLabel()


    Allerdings:

    heinosh schrieb:

    Ich habe ein Code bekommen, welches ich etwas umgeschrieben habe.
    Das aus Post#3 wird ja wohl nicht das sein, was Du zu dem in Post#1 gemacht hast, oder?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Dann mal so rum: Du hast ja nen Button, der beim Klick dazu führt, dass das Label gedruckt wird. Funktioniert der? Wenn Du jetzt noch einen Button hast, der dazu führt, dass die Daten in die Datenbank wandern: Funktioniert das? Kannst Du also einen Button mit Drucken "beauftragen" und einen mit "Daten speichern" und beim jeweiligen Anklicken passiert das, wofür es gedacht ist?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Es erklärt zwar noch nicht die Ursache, aber probier mal:

    VB.NET-Quellcode

    1. Private Async Sub Print()
    2. Dim TableID As Integer
    3. TableID = Notify.GetRunObjectTableEntryID
    4. Dim status As Integer
    5. Dim ClientID As Integer
    6. ClientID = 1
    7. status = Label.SetRunningObjectTableEntryID(TableID, ClientID)
    8. If Not status = 0 Then
    9. MsgBox("SetRunningObjectTableEntryID returned an error")
    10. End If
    11. Label.PrintLabel()
    12. Await Threading.Tasks.Task.Delay(1)
    13. printedLbL.Text = "1"
    14. Me.Validate()
    15. LS_K_ABindingSource.EndEdit()
    16. LS_K_ATableAdapter.Update(DataLogDataSet.LS_K_A)
    17. End Sub


    Das ist mein bei mir beliebter Delay-Workaround, vielleicht reicht das schon.
    Stichwort Async/Await
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hi
    Auch das geht nicht
    Ich hab das speichern ohne den Tabeladapter-Bla Bla Bla gemacht mit
    diesem code

    VB.NET-Quellcode

    1. Dim cn As new SqlConnection
    2. Dim cmd As New SqlCommand
    3. cn = New SqlConnection("Server = SRVDExxx;Initial Catalog=DataLog;Persist Security Info=True;User ID=xxx;Password=xxxxx")
    4. cn.Open()
    5. cmd.Connection = cn
    6. cmd.CommandText = "UPDATE LS_K_A SET printed = " + printedLbL.Text + " WHERE " + IdLabel1.Text + " = id "
    7. cmd.ExecuteNonQuery()
    8. cn.Close()


    gleicher Effekt.Er speichert, druckt aber nicht. ?(
    Wie sieht der mit-Button-erfolgreich-Drucken-Code aus, wie der mit-Button-erfolgreich-Speichern-Code?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Visual Basic-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. printedLbL.Text = "1"
    3. Me.Validate()
    4. LS_K_ABindingSource.EndEdit()
    5. LS_K_ATableAdapter.Update(DataLogDataSet.LS_K_A)
    6. End Sub
    7. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    8. Print()
    9. End Sub
    Das ist etwas verwirrend, weil Print() ja wieder das ganze Gesums aufruft. Was dann entweder nicht speichert oder nicht druckt. Also vermutlich nicht speichert.
    Funktioniert das Nur-Drucken, wenn Du in Button2_Click nur schreibst:

    VB.NET-Quellcode

    1. Dim TableID As Integer = Notify.GetRunObjectTableEntryID
    2. Dim ClientID As Integer = -1
    3. Dim status As Integer = Label.SetRunningObjectTableEntryID(TableID, ClientID)
    4. If Not status = 0 Then
    5. MsgBox("SetRunningObjectTableEntryID returned an error")
    6. Return
    7. End If
    8. Label.PrintLabel()


    Wenn es klappt, wie schnell kannst Du Button2 und Button1 nacheinander drücken, damit es erst druckt, dann speichert.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Wenn ich die Butten schnell nacheinander klicke, funktioniert das auch.

    Irgendwie alles unlogisch. Sorry...So langsam hab ich die faxen satt.

    Ich werd jetzt alles Stück für Stück neu schreiben. Alles was unnötig ist lasse ich weg.
    Wenn es dann immer noch so ist, dann werd ich Bäcker ( Kann mein Müll den ich mache, wenigsten selber aufessen.)
    Hallo

    So...Fehler gefunden. Nach Rücksprache mit Hersteller der Software für den Labeldruck, konnten wir den Fehler finden. Denen ihr Programm nutzt die Datenbank, welche ich auch in meinem Programm verwende, und schließt nicht sofort die Verbindung nach dem drucken.Das wusste ich nicht wirklich. Wann das erterne Programm die Verbindung zur DB schließt konnte man mir auch nicht sagen.
    Sein Vorschlag war, das ich die Labels nicht mit DB-Anbindung erstelle, sonder das ich die Textfelder von meinem Code aus fülle. Einige Objekte lassen sich extern ja aufrufen, wie zum Bsp

    VB.NET-Quellcode

    1. Label.PrintLabel()


    Nun, dann schau ich mal, wie man das bewerkstelligt. Gemacht hab ich das noch nie.
    Vielen Dank für die Hilfe. Das Thema kann geschlossen werden.