Einträge in Datenbank nur spuradisch

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Rainman.

    Einträge in Datenbank nur spuradisch

    Hallo,

    ich habe mich eben angemeldet und habe folgendes Projekt und ein Problem dazu:
    Ich programmiere eine Kassensoftware für unser Azubi-projekt. Ich drucke Preisschilder aus mit entsprechenden Barcodes und kann die auch abscannen. Im Hintergrund läuft eine MariaDB auf einem Linux-Server. Quasi unser digitales Lager. Nun habe ich folgendes Problem, ich möchte neue Artikel in die Datenbank aufnehmen indem ich Barcodes abscanne. Ich speichere wiefolgt in der DB:
    +------------+---------------+------+-------+
    | id_produkt | menge_produkt | wg | preis |
    +------------+---------------+------+-------+
    | 0 | 1 | 0 | 0.00 |
    | 1 | 22 | 170 | 2.00 |
    | 2 | 2 | 4 | 5.00 |
    | 3 | 4 | 3 | 0.20 |
    +------------+---------------+------+-------+
    sorry für die blöde formatierung der db :D

    immer wenn eine neue Kombination aus wg eingelesen wird, wird ein neuer eintrag mit neuer id erstellt. Ansonsten wird nur die Menge erhöht.
    im Code sieht das folgendermaßen aus:

    VB.NET-Quellcode

    1. Try
    2. If dummy = True Then 'dummy-Variable speichert einen Boolschen-Wert, der später abgefragt werden kann
    3. Read_DB("select id_produkt, menge_produkt from produkt where preis = " & preisformat & " and wg = " & wg) 'SQL-Lese-Befehl
    4. While myreader.Read() 'Während in der Datenbank gelesen wird
    5. id_produkt = myreader.GetDouble(0) 'id_produkt wird auf den Wert gesetzt, der ausgelesen wird
    6. menge_produkt = myreader.GetDouble(1) 'menge_produkt wird auf den Wert gesetzt, der ausgelesen wird
    7. End While
    8. myreader.Close() 'Verbindung zum Lese-Befehl wird geschlossen
    9. mycommand = New MySql.Data.MySqlClient.MySqlCommand("update produkt set menge_produkt = " & menge_produkt + 1 & " where id_produkt = " & id_produkt) 'Schreib_Befehl wird erfasst
    10. mycommand.Connection = connection 'Der Ort wo der Schreib-Befehl angewendet werden soll wird bestimmt
    11. mycommand.ExecuteNonQuery() 'Schreib-Befehl wird ausgeführt
    12. 'MsgBox("Anzahl erhöht!")
    13. Else
    14. Read_DB("select MAX(id_produkt) from produkt")
    15. While myreader.Read()
    16. If myreader.HasRows = True Then
    17. id_produkt = myreader.GetDouble(0) + 1
    18. Else
    19. id_produkt = 1
    20. End If
    21. End While
    22. myreader.Close()
    23. mycommand = New MySql.Data.MySqlClient.MySqlCommand("insert into produkt (id_produkt, menge_produkt, wg, preis) values(" & id_produkt & ",1," & wg & "," & preisformat & ")")
    24. mycommand.Connection = connection
    25. mycommand.ExecuteNonQuery()
    26. 'MsgBox("Neuer Eintrag erstellt!")
    27. End If
    28. Catch ex As Exception
    29. MsgBox("Datenbank konnte nicht gelesen werden!", MsgBoxStyle.Information, "JUFI - INFO")
    30. End Try


    Nun mein Problem, immer wenn eine neue id erstellt werden soll, funktioniert es nur, wenn ich im Debug-Modus bin.
    Warum ist das so? Ich fange an solangsam zu verzweifeln.

    Vielen Dank schonmal für eure Hilfe

    Gruß DenSe :P
    Wozu ist dieses ominöse "If dummy = True" denn gut? Ist das evtl. nur gesetzt wenn man mit dem Debugger arbeitet?

    Mit dem globalen Try-Catch bildest du alle Fehler auf den neuen Fehlertext "Datenbank konnte nicht gelesen werden!" ab.
    Fazit: das hilft dir garantiert überhaupt nicht.
    Tipp: Try-Catch komplett weglassen. Oder lernen wie man damit umgeht. Hier im Forum gibts dazu gute Anleitungen.
    An manchen Tagen gibt es zu allem Überfluss auch noch Ärger!
    Verteile eine Anzahl Messageboxen im Sourcecodebereich, wo eine neue ID geschrieben werden soll, dann siehst du schnell wo das Programm langläuft bez. nicht langläuft. Danach hast du wenigstens die eine Zeile, die sich nicht so verhält wie du es erwartest und dann kannst du auch deine Frage konkretisieren.
    Bitte MsgBox() durch MessageBox.Show() ersetzen. MsgBox stammt noch aus VB6.

    ### ups - zu spät :) ###
    An manchen Tagen gibt es zu allem Überfluss auch noch Ärger!