Abfrage vor dem speichern?

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von carwashbuxtehude.

    Abfrage vor dem speichern?

    Hallo,

    wie stelle ich es an, das vor dem speichern geprüft wird ob das Datum schon vorhanden ist?

    Private Sub speichern()

    Dim dbinsert As New OleDb.OleDbCommand

    con.Open()

    Try
    dbinsert.CommandText = "INSERT INTO Umsatzdaten11 (Datum,Bearbeiter,Waschzahlen,Umsatzgesamt,Aufbereitung,Anhaenger,Personal,Aushilfen,Stillstand,Wetter,Barausgaben,Schäden,Kulanz,WaAnfang,WaEnde,Verbrauch) VALUES (DateTimePicker1.Text,ComboBox1.Text,TextBox3.Text,TextBox4.Text,TextBox5.Text,TextBox6.Text,TextBox7.Text,TextBox8.Text,TextBox9.Text,ComboBox2.Text,TextBox10.Text,TextBox11.Text,TextBox12.Text,TextBox13.Text,TextBox14.Text,TextBox15.Text)"

    dbinsert.CommandType = CommandType.Text
    dbinsert.Connection = con

    dbinsert.Parameters.Add(dbinsert.CreateParameter).ParameterName = "Datum"
    dbinsert.Parameters.Item("Datum").Value = DateTimePicker1.Text
    dbinsert.Parameters.Add(dbinsert.CreateParameter).ParameterName = "Bearbeiter"
    dbinsert.Parameters.Item("Bearbeiter").Value = ComboBox1.Text
    dbinsert.Parameters.Add(dbinsert.CreateParameter).ParameterName = "Waschzahlen"
    dbinsert.Parameters.Item("Waschzahlen").Value = TextBox3.Text
    dbinsert.Parameters.Add(dbinsert.CreateParameter).ParameterName = "Umsatzgesamt"
    dbinsert.Parameters.Item("Umsatzgesamt").Value = TextBox4.Text
    dbinsert.Parameters.Add(dbinsert.CreateParameter).ParameterName = "Aufbereitung"
    dbinsert.Parameters.Item("Aufbereitung").Value = TextBox5.Text
    dbinsert.Parameters.Add(dbinsert.CreateParameter).ParameterName = "Anhaenger"
    dbinsert.Parameters.Item("Anhaenger").Value = TextBox6.Text
    dbinsert.Parameters.Add(dbinsert.CreateParameter).ParameterName = "Personal"
    dbinsert.Parameters.Item("Personal").Value = TextBox7.Text
    dbinsert.Parameters.Add(dbinsert.CreateParameter).ParameterName = "Aushilfen"
    dbinsert.Parameters.Item("Aushilfen").Value = TextBox8.Text
    dbinsert.Parameters.Add(dbinsert.CreateParameter).ParameterName = "Stillstand"
    dbinsert.Parameters.Item("Stillstand").Value = TextBox9.Text
    dbinsert.Parameters.Add(dbinsert.CreateParameter).ParameterName = "Wetter"
    dbinsert.Parameters.Item("Wetter").Value = ComboBox2.Text
    dbinsert.Parameters.Add(dbinsert.CreateParameter).ParameterName = "Barausgaben"
    dbinsert.Parameters.Item("Barausgaben").Value = TextBox10.Text
    dbinsert.Parameters.Add(dbinsert.CreateParameter).ParameterName = "Schäden"
    dbinsert.Parameters.Item("Schäden").Value = TextBox11.Text
    dbinsert.Parameters.Add(dbinsert.CreateParameter).ParameterName = "Kulanz"
    dbinsert.Parameters.Item("Kulanz").Value = TextBox12.Text
    dbinsert.Parameters.Add(dbinsert.CreateParameter).ParameterName = "WaAnfang"
    dbinsert.Parameters.Item("WaAnfang").Value = TextBox13.Text
    dbinsert.Parameters.Add(dbinsert.CreateParameter).ParameterName = "WaEnde"
    dbinsert.Parameters.Item("WaEnde").Value = TextBox14.Text
    dbinsert.Parameters.Add(dbinsert.CreateParameter).ParameterName = "Verbrauch"
    dbinsert.Parameters.Item("Verbrauch").Value = TextBox15.Text

    With dbinsert.Parameters
    .Clear()
    .Add("", OleDb.OleDbType.Date).Value = DateTimePicker1.Text
    .Add("", OleDb.OleDbType.VarChar).Value = ComboBox1.Text
    .Add("", OleDb.OleDbType.Integer).Value = TextBox3.Text
    .Add("", OleDb.OleDbType.Char).Value = TextBox4.Text
    .Add("", OleDb.OleDbType.Char).Value = TextBox5.Text
    .Add("", OleDb.OleDbType.Char).Value = TextBox6.Text
    .Add("", OleDb.OleDbType.Integer).Value = TextBox7.Text
    .Add("", OleDb.OleDbType.Integer).Value = TextBox8.Text
    .Add("", OleDb.OleDbType.Double).Value = TextBox9.Text
    .Add("", OleDb.OleDbType.VarChar).Value = ComboBox2.Text
    .Add("", OleDb.OleDbType.Char).Value = TextBox10.Text
    .Add("", OleDb.OleDbType.Integer).Value = TextBox11.Text
    .Add("", OleDb.OleDbType.Integer).Value = TextBox12.Text
    .Add("", OleDb.OleDbType.Double).Value = TextBox13.Text
    .Add("", OleDb.OleDbType.Double).Value = TextBox14.Text
    .Add("", OleDb.OleDbType.Double).Value = TextBox15.Text

    End With

    dbinsert.ExecuteNonQuery()


    MessageBox.Show("Daten wurden übernommen")


    Catch ex As Exception
    'MessageBox.Show(ex.Message)
    MessageBox.Show("Bitte Felder übeprüfen ob Daten vorhanden")

    End Try
    ds.Clear()
    da.Fill(dt)

    con.Close()





    ?(

    Matthias
    auch das neue forum hat einen Quellcode-Editor. Auch darin kann man seinen Code vernünftig formatieren, sodass die Einrückungen korrekt dargestellt sind.
    DAss man ihn lesen kann.

    Dann kannste noch einen Spoiler drumrum machen, für Leuts, die sich nicht gleich in die 150 Zeilen vertiefen mögen.

    btw: Warum verwendest du kein typisiertes Dataset? keine DataAdapter? kein Databinding?

    carwashbuxtehude schrieb:

    Hallo, wie stelle ich es an, das vor dem speichern geprüft wird ob das Datum schon vorhanden ist?

    Meinst du jetzt, ob das Datum im DateTimePicker geändert wurde? msdn.microsoft.com/de-de/libra…cker.value(v=vs.110).aspx
    Sonst wiederhole ich den letzten Satz oben von @ErfinderDesRades

    ErfinderDesRades schrieb:

    auch das neue forum hat einen Quellcode-Editor. Auch darin kann man seinen Code vernünftig formatieren, sodass die Einrückungen korrekt dargestellt sind.
    DAss man ihn lesen kann.

    OK!

    Dann kannste noch einen Spoiler drumrum machen, für Leuts, die sich nicht gleich in die 150 Zeilen vertiefen mögen.
    Werde ich nächstes Mal machen
    btw: Warum verwendest du kein typisiertes Dataset? keine DataAdapter? kein Databinding?

    Bin froh, das ich es so hinbekommen habe.
    Aber für jeden Tipp dankbar!
    ich kann mich nur anschließen...

    mach das, was ErfinderDesRades geschrieben hat...
    arbeite dein Programm aus und verwende typisierte datasets...

    ich hab mich anfangs strikt geweigert und bin letztendlich nicht drum rum gekommen...und jetz bin ich froh darüber und verwende sie überall...

    Destiny schrieb:

    Willst du jetzt vor dem speichern wissen ob das Datum überhaupt gefüllt ist, oder ob in der DB schon ein Eintrag zu dem Datum ist?




    Ich möchte vor dem speichern überprüfen, ob das Datum was im DateTimePicker1 gewählt ist schon in der DB vorhanden ist.
    Wenn ja, soll eine Meldung erscheinen, das das Datum schon vorhanden ist.

    :?:
    Matthias

    carwashbuxtehude schrieb:

    Wenn ja, soll eine Meldung erscheinen
    Besteht der Hintergrund dieses Anliegens darin, dass pro Kalendertag nur ein neuer Datenbankeintrag zulässig sein soll?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Dann mach diese Spalte in Deiner Datenbank zum Primary Key und feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    OK!
    Das geht.
    Wie kann ich es den jetzt noch für den Benutzer sichtbar machen, das der Tag schon vorhanden ist?
    Jetzt kommt nur die allgemeine Meldung ("Bitte Felder übeprüfen ob Daten vorhanden"), die auch erscheinen würde, wenn vergessen wurde ein Feld auszufüllen!



    Matthias

    carwashbuxtehude schrieb:

    Wie kann ich es den jetzt noch für den Benutzer sichtbar machen, das der Tag schon vorhanden ist?
    Schaue dir das DataGridView.DataError-Event einmal an. Da kannst du dann die abgefangenen Exceptions auf deine eigenen Meldedialoge umlenken...
    Die Daten sind doch erst nach dem speichern im DGW zu sehen?
    Die Daten werden über TextBoxen eingetragen und dann gespeichert.
    Nun soll eine Meldung kommen, das das Datum schon in der Datenbank vorhanden ist.
    Also wenn der Speicherbutton gedrückt wurde und das Datum schon in der DB vorhanden ist, soll die Meldung erscheinen.


    Matthias
    Die Daten sind doch erst nach dem speichern im DGW zu sehen?

    Also, wenn du ein Dataset mit den darin befindlichen Tabellen verwendest, hast du die Daten im Dataset, die von der DB mit Dataadapter gefüllt wurden. Die DGV's sind an die Tabellen gebunden, d.h. die Daten, die du im DGV siehst und bearbeitest sind auch in den Tabellen enthalten. Wenn du nun doppelte PrimeKeys eingibst, wie oben das Datum, dann wird eine Exception ausgelöst vom Dataset und die kannst du dann, wie oben erwähnt, abfangen und für deine Bedürfnisse umlenken...(wie Hinweis, dieses Datum darf in dieser spalte nur einmal vorkommen etc...)
    also wenn ich deine anneren Posts recht verstanden habe, dann hast du eine Wasch-Straße, und die schreibt jeden Tag einen Datensatz in die DB.
    Und der User kann diese Datensätze abrufen und manipulieren.

    Dann verhindere doch einfach, dass der User sich neue Datensätze ausdenken darf, und dann kann es doch gar nimmermehr auftreten, dass ein User einen neuen DS zu einem Datum inserten will, wasses schon gibt.
    das nächst-einfache wäre, du rufst immer die Top 10 Datensätze ab. Da kann der User einen von aussuchen und editieren, oder er fügt ein noch unbekanntes Datum hinzu.
    Beides schreibt dir derselbe DataAdapter korrekt in die DB zurück.

    Normalerweise hätte man wohl eh 2 Datetimepicker, über die man einen Zeitbereich definiert, und dann die Datensätze dieses Zeitbereiches abruft.

    Das kann man noch verfeinern, nämlich mit DateTimePicker.ShowCheckbox kann der User einen der Picker disablen, und das bedeutet dann "bis heute", bzw. beim anneren DTP "vom Anbeginn der Zeiten".
    Sodasss der User normal nur einen DTP bedienen muss.