Hallo nochmal,
hab grad selbst gestaunt, was ich da für nen Roman geschrieben hab.
Da ich aber immer noch Hilfe bräuchte, liefere ich hier eine wesentlich einfachere Beschreibung zum Nachvollziehen meines Problems.
Der erste Teil bleibt weitgehend gleich - das VB-Projekt ist aber wesentlich simpler...
Man nehme zwei Tabellen in Access(>2000):MasterTabelle mit den Feldern
MstKey (Autowert) (Primärschlüssel),
Text (Text) sowieDetailTabelle mit den Feldern
DtlKey (Autowert) (Primärschlüssel)
Text (Text)
MstKey (Zahl: Long Integer) (Eigenschaften 'Eingabe erforderlich'=Nein und _
'Standardwert'="") Wie man aus der doppelten Existenz des Feldes MstKey schließen kann, soll hierüber eine Beziehung zwischen den Tabellen realisiert werden.
Also wird eine entsprechende Beziehung in Access angelegt:MasterTabelle.MstKey --> DetailTabelle.MstKey Aufgrund der Feld-Eigenschaften in der DetailTabelle kann man in diesem Feld einen Bezug auf einen Satz in der MasterTabelle angeben, muss aber nicht, d.h. Null ist ein gültiger Feldinhalt.
Wenn man jetzt das SevDataGrid2 im RecordsetMode verwenden möchte, um Daten in der DetailTabelle einfach zu bearbeiten, so scheitert das Grid an dieser Funktionalität:
Wenn ein Datensatz angezeigt wird, der einen gültigen Wert in MstKey besitzt, so kann dieser Wert nicht mehr herausgelöscht werden.
Er kann nur durch einen anderen gültigen Primärschlüssel aus der MasterTabelle überschrieben werden, aber eben nicht gelöscht (mit Null überschrieben) werden!
Hier das Projekt zum Nachvollziehen:
(Form mit SevDataGrid und Verweis auf DAO3.6)Option Explicit
Dim DB As DAO.Database
Private Sub Form_Load()
On Error GoTo ErrorHandler
'Datenbank öffnen
Set DB = DBEngine.OpenDatabase(App.Path & "\db1.mdb")
'Grid einrichten und Recordset zuweisen (auf DetailTabelle)
With sevGrid1
.DataMode = Mode_Recordset
.AllowEdit = True
Set .Recordset = DB.OpenRecordset("SELECT * FROM DetailTabelle;")
.Refresh
End With
Exit Sub
ErrorHandler:
MsgBox Err.Number & ": " & Err.Description, vbCritical, "Fehler", _
Err.HelpFile, Err.HelpContext
End Sub
Private Sub Form_Unload(Cancel As Integer)
On Error Resume Next
'Datenbank schließen
DB.Close
End Sub
Private Sub sevGrid1_ErrorUpdate(ByVal nRow As Long, ByVal nCol As Long, ByVal _
sText As String, ByVal nError As Long, ByVal sDescription As String)
'Fehlermeldung ausgeben
MsgBox "Fehler " & nError & ": " & sDescription, vbCritical, "Datensatz" & _
"nicht gespeichert"
End Sub Für das Projekt muss die DB den Namen 'db1.mdb' tragen und im Projektverzeichnis liegen...
Über Hilfe würde ich mich sehr freuen!
Viele Grüße & Danke schonmal an alle die sich die Mühe machen!
Reinski
Immer noch auf der Suche nach dem "Tu's trotzdem"-Button...  |