tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
13
ZUGRIFFE
1460
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Questionmark Questionmark ist offline Mitglied
    Registriert seit
    May 2010
    Beiträge
    14
    Hallo,

    ich arbeite mit VB.net 08 und access und habe eine datagridview eingerichtet, in welche eine Datenbanktabelle geladen wird. Der user kann dann in ein TExtfeld einen Namen eingeben und wenn man auf einen button einfügen klick dann wird der name in der gridview angezeigt. beim button speichern speichert er das aus der datagridview in die db.

    Nun mein Problem: wie gestalte ich den code so, dass er zunächst prüft ob der datensatz aus der textbox bereits vorhanden ist und wenn ja nicht speichert. Sonst hab ich ja datensätze doppelt.

    Danke für die Hilfe.

    Questionmark
     

  2. #2
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Indem du zum Beispiel dieses Feld mit einem Primary Key versiehst. Oder indem du in einer Liste die Hashes aller Strings (optimalerweise in ToUpper oder ToLower) speicherst und dann entsprechend abfragst ob da schon was drin ist.
     

  3. #3
    Questionmark Questionmark ist offline Mitglied
    Registriert seit
    May 2010
    Beiträge
    14
    geht das auch einfacher?! also vllt mit einer if anweisung also ich bin da nicht so bewandert und deswegen sagt mir das garnichts was du mir da geschrieben hast...
    also vllt bevor ich einfügen in das datagridview klicke soll er prüfen ob der value in der textbox bereits in datenbank vorhanden...wenn ja msgbox("datensatz existiert") geht das so in der art?
     

  4. #4
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Ja, eben, das ist Variante 2.

    if(listHashes.Contains(eingabeWert.ToLower().GetHashCode()))
    vorhanden
    else
    nicht vorhanden
     

  5. #5
    Questionmark Questionmark ist offline Mitglied
    Registriert seit
    May 2010
    Beiträge
    14
    habs genauso eingefügt und es geht nicht. außerdem kenn ich die gnzen begriffe nicht... ich weiß, aber ich bin halt weiblich und nicht so bewandert darin...
    und so ganz einfach gehts nciht? ein auf if txtkname.value = Datagridview.value then Msgbox("Name berets vorhanden")
     

  6. #6
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Zitat Zitat von Questionmark Beitrag anzeigen
    [...]ich bin halt weiblich[...]
    Also das hat ja mal gar keinen Einfluss :P

    Wie fügst du denn deine ganzen Einträge ins DataGridView? Über eine DataTable?
     

  7. #7
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Du könntest noch code-Tags verwenden, dann ist der Code auch lesbar

    Du kannst die DataTable mit einem PrimaryKey versehen:
    Code :
    1
    2
    3
    
                DataTable tbl = set.Tables[0];
                tbl.PrimaryKey = new DataColumn[1];
                tbl.PrimaryKey[0] = tbl.Columns[0];

    Das setzt beispielweise die erste Kolonne als PrimaryKey. Natürlich solltest du da immer noch Exceptions abfangen.
     

  8. #8
    Questionmark Questionmark ist offline Mitglied
    Registriert seit
    May 2010
    Beiträge
    14
    was für code-tags?! naja...
    aber ich habe ja die spalte nr, die versteckt ist als primarykey in der db.
     

  9. #9
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    [ code]
    [/ code]

    ohne die Leerzeichen. Werden denn die Primary-Keys aus der Datenbank auch in die Datatable übernommen? Ich denke nicht.
     

  10. #10
    Questionmark Questionmark ist offline Mitglied
    Registriert seit
    May 2010
    Beiträge
    14
    doch na klar weil nämlich die nr ein autowert ist und somit ich kein txtfeld brauche und somit keine eingaben. cool ne hab ich alleine gemacht.
    solche tags?

    [Public Class Form3
    Dim con As New OleDb.OleDbConnection
    Dim cmd As New OleDb.OleDbCommand
    Dim da As New OleDb.OleDbDataAdapter
    Dim cmb As New OleDb.OleDbCommandBuilder(da)
    Dim dset As New DataSet
    Dim kst_name As String
    Dim kst_verantn As String
    Dim kst_verantvorn As String
    Dim kst_Nr As Integer
    Dim antwort As Integer

    Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=C:\temp\Kst_Bud.accdb"
    cmd.Connection = con
    cmd.CommandText = "Select * from Kostenstelle"
    da.SelectCommand = cmd
    da.Fill(dset)
    DataGridView1.DataSource = dset.Tables(0)

    'Blendet die Kostenstellen_Nr Spalte aus
    DataGridView1.Columns(0).Visible = False

    End Sub

    Private Sub cmdeinfügen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdeinfügen.Click

    If txtkname.Text = "" Then
    MsgBox("Bitte einen Kostenstellennamen eingeben!")
    ElseIf txtkname.Text = "" Then
    MsgBox("Bitte einen Kostenstellennamen eingeben!")

    Exit Sub
    End If
    If txtkverantvorn.Text = "" Then
    MsgBox("Bitte Vornamen eingeben!")
    Exit Sub
    End If
    If txtkverantn.Text = "" Then
    MsgBox("Bitte Nachnamen eingeben!")
    Exit Sub
    End If

    'If txtkname.Text = DataGridView1.Text Then
    'MsgBox("Datensatz bereits vorhanden")
    'End If

    kst_name = txtkname.Text
    kst_verantn = txtkverantn.Text
    kst_verantvorn = txtkverantvorn.Text

    dset.Tables(0).Rows.Add(kst_Nr, kst_name, kst_verantn, kst_verantvorn)
    End Sub

    'http://www.ms-office-forum.net/forum/archive/index.php?t-137851.html
    Private Sub txtkname_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtkname.KeyPress
    Select Case Asc(e.KeyChar)
    Case 8, 32, 65 To 90, 97 To 122, 223
    ' 8 Backspace
    ' 32 Leerzeichen
    ' 65-90 Buchstaben (groß)
    ' 97-122 Buchstaben (klein)
    ' 223 ß

    Case Else
    ' Alle anderen Eingaben werden unterdrückt
    MsgBox("Bitte nur Buchstaben verwenden")
    e.Handled = True
    End Select
    End Sub
    'http://www.ms-office-forum.net/forum/archive/index.php?t-137851.html
    Private Sub txtverantvorn_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtkverantvorn.KeyPress
    Select Case Asc(e.KeyChar)
    Case 8, 32, 65 To 90, 97 To 122, 223
    ' 8 Backspace
    ' 32 Leerzeichen
    ' 65-90 Buchstaben (groß)
    ' 97-122 Buchstaben (klein)
    ' 223 ß

    Case Else
    ' Alle anderen Eingaben werden unterdrückt
    MsgBox("Bitte nur Buchstaben verwenden")
    e.Handled = True
    End Select
    End Sub
    'http://www.ms-office-forum.net/forum/archive/index.php?t-137851.html
    Private Sub txtkverantn_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtkverantn.KeyPress
    Select Case Asc(e.KeyChar)
    Case 8, 32, 65 To 90, 97 To 122, 223
    ' 8 Backspace
    ' 32 Leerzeichen
    ' 65-90 Buchstaben (groß)
    ' 97-122 Buchstaben (klein)
    ' 223 ß

    Case Else
    ' Alle anderen Eingaben werden unterdrückt
    MsgBox("Bitte nur Buchstaben verwenden")
    e.Handled = True
    End Select
    End Sub

    Private Sub cmdspeichern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdspeichern.Click

    antwort = MsgBox("Wollen Sie wirklich speichern?", MsgBoxStyle.YesNo, "Speichervorgang")
    If antwort = MsgBoxResult.Yes Then
    da.Update(dset.Tables(0))
    MsgBox("Daten gespeichert.", , "Speichervorgang")
    ElseIf antwort = MsgBoxResult.No Then
    MsgBox("Geben Sie Ihre Daten bitte erneut ein.", , "Speichervorgang")
    End If



    End Sub
    Private Sub cmdloeschen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdloeschen.Click

    'Löscht den Datensatz in der selektierten Zeile aus der Datenbank
    DataGridView1.Rows.Remove(DataGridView1.CurrentRow)
    da.Update(dset.Tables(0))

    End Sub
    Private Sub cmdback_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdback.Click
    Hauptmenü.Show()
    Me.Hide()
    End Sub

    Private Sub cmdneuplanung_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdneuplanung.Click
    Kostenartenanlage.Show()
    Me.Hide()
    End Sub




    End Class]
     

  11. #11
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Du solltest noch entsprechend [ code] oder [/ code] schreiben. Nicht nur [ und ]. Ist dein Problem letzt gelöst?
     

  12. #12
    Questionmark Questionmark ist offline Mitglied
    Registriert seit
    May 2010
    Beiträge
    14
    nee sorry...wie soll ich denn den code machen, dass er prüft ob der name vorhanden und dann nicht in datagrid einfügt. haste mir das schon gesagt?sorry dass ichd ich so lang aufhalte
     

  13. #13
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    http://pastebin.com/w0rKyLeC

    Da siehst du das, was ich dir schon 3 Mal gesagt habe auch noch in Action. Der Primarykey der Tabelle wird gesetzt. Die Ausgabe des obigen Codes lautet wie folgt:
    --> Table
    Die Spalte 'setting_id' hat die Einschränkung, dass sie eindeutig sein muss. Der
    Wert 'Setting1' ist bereits vorhanden.
    Diese Exception kannst du abfangen und auswerten.
     

  14. #14
    Questionmark Questionmark ist offline Mitglied
    Registriert seit
    May 2010
    Beiträge
    14
    danke für deine bemühung...!
     

Ähnliche Themen

  1. C# dataset einfügen aber vorher prüfen ob Daten bereits vorhanden sind
    Von nerdherd im Forum .NET Web und Kommunikation
    Antworten: 4
    Letzter Beitrag: 27.01.11, 12:17
  2. Antworten: 2
    Letzter Beitrag: 25.07.10, 22:44
  3. Antworten: 0
    Letzter Beitrag: 23.05.07, 11:49
  4. Antworten: 3
    Letzter Beitrag: 09.06.06, 22:49
  5. Antworten: 1
    Letzter Beitrag: 08.06.04, 15:33