2 Werte in eine Spalte schreiben

  • VB.NET

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von Vatter.

    2 Werte in eine Spalte schreiben

    Hallo Community,
    Ich bin gerade an einem Update für mein Programm am arbeiten.
    Da stellt sich mir ein problem das denke ich relativ simpel ist zu lösen.
    Ich will 2 Comboboxen in ein und die gleiche Spalte schreiben.

    Die Datenbank ist so aufgebaut:
    Nummer
    Ort
    Melder
    Meldung
    Wachen

    In die Spalte wachen, will ich die 2 Comboboxen schreiben. Aber der clue dabei ist, das es nicht immer so sein soll sondern immer nur dann, wenn eine Checkbox Aktiviert bzw Angehakt ist und somit die Combobox2 Enabled = Ture wird.

    Hoffe ihr könnt mir den ein oder anderen ansporn geben.

    Ich habe es schon so versucht:
    (im insert befehl) combobox1.selecteditem.tostring & combobox2.selecteditem.tostring doch das funzt nicht soviel ich gesehen habe.

    Google habe ich auch schon gefragt doch mit meinen Suchbegriffen die ich wusste kam ich nicht weit.

    Garkeinen fehler bekomme ich.

    Ich habe eine normale INSERT INTO zeile und nun will ich eine "Multialamierung" einbauen damit man 2 Wachen gleichzeitig Alamieren kann.

    Mein Problem besteht darin das es nicht so will wie ich.

    Wenn ich combobox1.Selectedimtem & "','" schreibe ist jede Combo ein eigener wert und ich will das combo 1 und 2 quasi einer wert sind somit sollen die in ein und die gleiche zeile schreiben

    VB.NET-Quellcode

    1. Dim szSQL as String
    2. Dim adoCon As New SqlClient.SqlConnection ' SQL Connection
    3. Dim adoCmd As New SqlClient.SqlCommand ' SQL Command
    4. Try
    5. adoCon.ConnectionString = "DEIN CONNECTION STRING"
    6. adoCon.Open()
    7. szSql = "insert into Tabelle (Nummer, Ort, Melder, Meldung, Wachen) values (@nummer, @ort, @melder, @meldung, @wachen)"
    8. adoCmd.Connection = adoCon
    9. adoCmd.CommandType = CommandType.Text
    10. adoCmd.CommandText = szSQL
    11. adoCmd.Parameters.Clear()
    12. adoCmd.Parameters.Add("@nummer_id", SqlDbType.Int).Value = 0
    13. adoCmd.Parameters.Add("@ort", SqlDbType.VarChar).Value = "Ort"
    14. adoCmd.Parameters.Add("@melder", SqlDbType.VarChar).Value = "Melder"
    15. adoCmd.Parameters.Add("@meldung", SqlDbType.VarChar).Value = "Meldung"
    16. If Checkbox1.Checked Then
    17. adoCmd.Parameters.Add("@wachen", SqlDbType.VarChar).Value = combobox1.selecteditem.tostring & " - " & combobox2.selecteditem.tostring
    18. Else
    19. adoCmd.Parameters.Add("@wachen", SqlDbType.VarChar).Value = combobox1.selecteditem.tostring
    20. End If
    21. adoCmd.ExecuteNonQuery()
    22. Catch ex as exception
    23. end try


    Mit DB-Paramters igeht das Easy
    Code müsste passen ist aber ungetestet

    ög
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Der code funktioniert ja.
    Doch wie bekomme ich nun in einem zweiten programm das die DB ausliest die werte für jede wache ??
    Ich lese die Datenbank mit einer Normalen Lesezeile aus und gebe dann die werte an Labels weiter.

    Ich hab schon versucht das , oder den - zu replacen, was aber nicht funktioniert hat

    Ich habe den Code dort wo du ein - gemacht hast, da habe ich ein , genommen (sieht meiner seits schöner aus).

    Werde es mal mit dem Spliten versuchen

    *EDIT*
    Ich hab das mit dem Spliten mal versucht bekomme es aber irgendwie nich auf die reihe. Google spukt mir auch nichts hilfreiches aus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Patrick1993“ ()

    Soweit klappt der code nur irgendwie spukt der mit das ein Index auserhalb von dem array ist aus.
    Makiert bekomme ich debug.writeline(szarray(1))

    Jo is klar. Du musst eine Routine einbauen die prüft ob überhaupt ein Trennzeichen vorhanden ist (ist ja kein Muss).
    die 1 ist ja nur der Index im Array. Wenn das Array nur 1 Item besitzt gibt es szarray(1) nicht und du bekommst die Exception.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Ich mache das immer mit einem Tabulator:

    VB.NET-Quellcode

    1. Dim ZweiWerte = combobox1.listitem & chr(9) & combobox2.listitem


    Auswerten kannst dus so:

    VB.NET-Quellcode

    1. Dim Auswerter = Split(ZweiWerte, chr(9))
    2. Dim Wert1 = Auswerter(0)
    3. Dim Wert2 = Auswerter(1)


    Lässt sich beliebig einsetzen und verwenden

    Du kannst statt dem Tabulator (also Chr(9) ) z. B. auch Zeichen nehmen, die du sinst nicht verwendest Bspw: "#" oder "%", geht mit allen Zeichen!
    Wie würde denn soeinae Routine aussehen ?
    Routinen hab ich noch nie was mit zu tun gehabt daher frage ich

    Naja einfach abfragen.
    Bsp.:

    VB.NET-Quellcode

    1. dim test as string = " Hallo ihr da-Toll heute"
    2. dim array() as string
    3. array = test.Split("-")
    4. for i as integer = 0 to array.count -1
    5. debug.writeline(array(i))
    6. next


    Nun wird die Schleife so oft durchlaufen wie es Items im Array gibt.

    Andere Möglichkeit wär mit test.Contains("-") abzufragen ob es den dein Trennzeichen gibt.
    Noch eine andere Möglichkeit ist es mit RegEx zu machen was aber etwas komplizierter ist.

    Mit Routine meinte ich nur ein/e Mechanismus/Prozedur der/die abfragt und gewährleistest, dass du auf dein gewünschtes Ergebnis kommst.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Also müsste es in meinem fall ungefäh so aussehen.

    VB.NET-Quellcode

    1. dim test as string = " ,"
    2. dim array() as string
    3. array = test.Split(",")
    4. for i as integer = 0 to array.count -1
    5. debug.writeline(array(i))
    6. next


    Werde es gleich mal Testen

    Ich hab mir mal hinter die Routine geklemmt was allerdings zu keinem ergebniss kam.

    @VanDerLars:
    Wenn du die Werte Definierst wie willst du die dann nutzen ?

    Muss ich zugeben, hab ich nicht verstanden.

    Welche Werte?
    Wert1 und Wert2 sind Strings!

    Ich meinte, dass du deine beiden Combobox-Werte in eine Spalte schreibst (erstes CodeBeispiel)
    Und wenn du die Werte dann wieder verarbeiten muust, du (mit dem zweiten Codebeispiel von mir) diese ganz leicht wieder trennen kannst - in zwei Strings, statt in Einen!
    Ich hab jetzt nicht alles gelesen, falls meine Idee schon irgendwo gebracht wurde dann ignoriert den Post einfach.

    Wieso tust du nicht einfach für jede Wache einen neuen Eintrag in der DB erstellen?

    Sprich:

    Alamierung an Wache 1 - 4 + 7
    Nimm deine Alamierung und schreib sie fünf mal in die Tabelle jedes mal mit der anderen Wachennummer, also einmal für 1 einmal für 2 einmal für 3 einmal für 4 und einmal für 7.

    So müsstest du am auslesen garnichts ändern sondern hättest eben dann 5 mal die selbe Alamierung für unterschiedliche Wachen.
    Aber ein Tabellenfeld sollte immer noch eine Information enthalten.

    lg.
    lg.

    LucaWelker

    LucaWelker schrieb:

    Wieso tust du nicht einfach für jede Wache einen neuen Eintrag in der DB erstellen?


    Weil das ganze dann 2 verschiedene Einsatznummern sind. Und genau das will ich nicht.

    *EDIT*
    Werde das mit den 2 Werten mal testen.

    Patrick1993 schrieb:

    Weil das ganze dann 2 verschiedene Einsatznummern sind. Und genau das will ich nicht.

    Weil dein Datenmodell wahrscheinlich daneben ist...

    Es könnte folgende Tabellen geben:
    Tabelle mit Einsätzen und deren spezifischen Eigenschaften
    Tabelle Wachen mit deren Nummern usw
    Tabelle Alarmierungen, die Zeiten, Wache_ID und Einsatz_ID enthält.

    Damit stehen Einsätze und Wachen in einem m:n Verhältnis zueinander. Die Mittlertabelle ist dann die Tabelle Alarmierungen. Es entfällt also die umständliche Frickelei mit 2 Wachen in einer Tabellenspalte usw. (Wer weiss, was noch alles kommt) Es ist in jedem Fall besser, das datenmodell anzupassen, als irgendwelche Krücken zu bauen, die sich früher oder später um deine Beine wickeln. Irgandwann liegst du rücklings vor dem Klo und versuchst über deine Schulter hinweg das Toilettenbecken zu treffen. Das ist dann ein weiter und unappetitlicher Weg 8-) .
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Ich poste mal hier wie die Tabelle aufgebaut ist.

    Name: Einsätze
    Spalten: Nummer,Ort,PLZ,Stichwort,Wache usw

    nun soll in die Spalte "Wache" der wert eingetragen werden was auf problemlos geht.
    .

    Das problem an einem hier im Thread beschriebenen Post ist, das ich das eintragen problemlos hinbekomme nur das Auswerten nicht so wirklich kapiere.

    Ausgewertet werden die Werte so:

    VB.NET-Quellcode

    1. Dim Auswerter = Split(ZweiWerte, ",")
    2. Dim Wert1 = Auswerter(0)
    3. Dim Wert2 = Auswerter(1)


    Dort ist im Auswerter der Zweiwerte bereich in einem anderen Programm somit ist es nicht ganz übergreifend