Prüfen ob Datensatz bereits in DB vorhanden

Questionmark

Grünschnabel
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
 
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.
 
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?
 
Ja, eben, das ist Variante 2.

if(listHashes.Contains(eingabeWert.ToLower().GetHashCode()))
vorhanden
else
nicht vorhanden
 
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")
 
Du könntest noch code-Tags verwenden, dann ist der Code auch lesbar :p

Du kannst die DataTable mit einem PrimaryKey versehen:
Code:
            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.
 
[ code]
[/ code]

ohne die Leerzeichen. Werden denn die Primary-Keys aus der Datenbank auch in die Datatable übernommen? Ich denke nicht.
 
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]
 

Neue Beiträge

Zurück