Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - Datensatz löschen


Ritzeratze - Do 22.05.14 15:44
Titel: Datensatz löschen
Hallo,

In einer Tabelle tbl_BK_User befinden sich 3 Felder. (IDBKUser, IDUser,Berechtigungsstufe)
in einem Formular frm_BK_User_Zuordnung habe ich ein ungebundenens Feld eingefügt. Dieses heißt tbLoeschID.

Wenn ich in dem Feld tbLoeschID einen Wert eingebe möchte ich aus der Tabelle tbl_BK_User den entsprechenden Satz löschen.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
Private Sub cmdLöschenAlteUser_Click()
    Dim rs As Recordset
    Dim Antwort
    
    Antwort = MsgBox("Soll wirklich gelöscht werden???", vbQuestion + vbYesNo)
    If Antwort = vbYes Then
        DoCmd.RunSQL "DELETE FROM tbl_BK_User WHERE idBKUser = tbLoeschID"
    End If

End Sub


Leider bekomme ich immer den Fehler ungültiger Spaltenname tbLoeschID.
Wie lautet der korrekte syntaktische Befehl für das ungebundenen Feld tbLoeschID?

Gruss Ritze


Christian S. - Do 22.05.14 17:03

Du willst ja auch nicht den Text "tbLoeschID" im String haben, sondern den in der Textbox enthaltenen Wert. ;-)

Also eher sowas wie

Quelltext
1:
DoCmd.RunSQL "DELETE FROM tbl_BK_User WHERE idBKUser = "+tbLoeschID.Text                    

wobei Du vorher *unbedingt* sicherstellen musst, dass der entsprechende Text auch nur eine Zahl und nichts anderes enthält, willst Du nicht SQL-Injections Tür und Tor öffnen. Besser ist eh ein Prepared Statement o.ä.


Ritzeratze - Fr 23.05.14 08:46

Hallo Christian,

wenn ich das so umsetze, dann bekomme ist einen Laufzeitfehler 2185. Auf Eigenschaften oder Methoden des Steuerelements kann nur zugegriffen werden wenn es den Fokus hat.
Den Wert gebe ich aber im Textfeld ein und starte das Makro mit einer Schaltfläche.
Ich weiß da momentan nicht weiter. Noch eine Idee ?

Gruß
Ritze


Christian S. - Fr 23.05.14 09:31

:gruebel: Okay, irgendwie dachte ich, Du hättest da eine normale WinForms-Anwendung. Vielleicht solltest Du nochmal beschreiben, was Du da wirklich hast ;)


Palladin007 - Mo 02.06.14 12:42

Welchen Typ hat die Spalte?

Wenn das kein numerischer Wert ist, müssen einfache Anführungszeichen drum.


goodandwealth - Mo 02.06.14 21:37

user profile iconRitzeratze hat folgendes geschrieben Zum zitierten Posting springen:
Hallo Christian,

wenn ich das so umsetze, dann bekomme ist einen Laufzeitfehler 2185. Auf Eigenschaften oder Methoden des Steuerelements kann nur zugegriffen werden wenn es den Fokus hat.
Den Wert gebe ich aber im Textfeld ein und starte das Makro mit einer Schaltfläche.
Ich weiß da momentan nicht weiter. Noch eine Idee ?

Gruß
Ritze


Hi,
sieht für mich nach Ms-Access aus (wegen docmd.runsql)
In dem fall sollte es so sein:

Quelltext
1:
DoCmd.RunSQL "DELETE FROM tbl_BK_User WHERE idBKUser ='" + Me.tbLoeschID.Text + "'"                    

Bei der Gelegenheit, dieses Docmd scheint zwar immer noch verfügbar, aber es ist zu empfeheln es so zu machen:

Quelltext
1:
2:
3:
4:
5:
Dim db as Database()
Set db = CurrentDb ' meint immer die aktuell geöffnete Datenbank
Dim strSQL as String = "DELETE FROM tbl_BK_User WHERE idBKUser ='" + Me.tbLoeschID.Text + "'"
"DELETE FROM tbl_BK_User WHERE idBKUser ='" + Me.tbLoeschID.Text + "'"
db.execute strSQL,  dbFailOnError ' , dbFailOnError sogt dafür dass du auch errormessage bekommst

Ist schon etwas länger her, dass ich damit zu tun hatte, deshalb noch dieser hinweis: unter access muss wahrscheinlich statt "=" ein "like" stehen, egal ob der string mit wildcard arbeit soll oder nicht.

Moderiert von user profile iconTh69: Code-Tags hinzugefügt