vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB & Datenbanken
<OK> & <Cancel> bei Datensatz mit Subform und referentieller Integrität 
Autor: Erdmännchen
Datum: 19.12.08 15:09

Hallo

Mache ich das eigentlich richtig?

Ich habe ein Datenbank mit Aufträgen und an jedem Auftrag können mehrere Positionen angehängt sein. Zwischen den Aufträgen und dem Positionen erzwinge ich die referentielle Integrität über die Relation.

Für die Erfassung will ich ein Formular haben, das oben den Auftrag und darunter die Positionen anzeigt. Die Positionen können direkt aus dem Auftrag erfasst werden.

Bisher mache ich das so: Bevor ich das Formular öffne, prüfe ich, ob es nicht schon offen ist. Wenn nein lege ich mit selbstgeschriebenem Code einen Datensatz in der Tabelle Aufträge an. Nachher öffne ich diesen Datensatz im Formular.
Meiner Meinung nach ist dies nötig, weil ich ja, während das Formular noch offen ist, Daten in der Tabelle Position (mit referentieller Integriät mit Tabelle Auftrag verknüpft) erfassen will. Würde der Datensatz vom Formular geöffnet und angelegt, so würde dies beim Anlegen und Speichern einer Position zu einer Fehlermeldung führen, weil die erzwungene Relation verletzt wäre.

Das Formular Auftragsdaten lässt sich bei mir nur über Buttons <OK> oder <Cancel> verlassen. Navigation und MinMaxButtons sowie CloseButton habe ich deaktiviert.

Private Sub Form_Load()
  gHiAuNummer = Me.auNummer
  gBoolDatensatzLöschen = True
End Sub
 
Private Sub OK_Click()
  gBoolDatensatzLöschen = False
  DoCmd.Close
End Sub
 
Private Sub Cancel_Click()
  Me.Undo  'rückgängig
  gBoolDatensatzLöschen = True
  DoCmd.Close
End Sub
 
Private Sub Form_BeforeUpdate(Cancel As Integer)
  gBoolDatensatzLöschen = False
End Sub
 
Private Sub Form_Close()
  If gBoolDatensatzLöschen Then
    db.Execute ("DELETE tblAuftrag.auNummer FROM tblAuftrag WHERE (((" & _
      "tblAuftrag.auNummer)=" & gHiAuNummer & "));")
  End If
End Sub
Natürlich fange ich auch Seite rauf und runter sowie das Mausrad ab...

Das funktioniert wunderbar. Nur: es gibt eine Hintertüre, die ich bisher nicht dichtmachen konnte: Das Formular lässt sich auch durch Doppelklick auf den obereen Rand maximieren (das finde ich auch gar nicht schlecht...). Aber: sobald das geschieht, habe ich oben rechts wieder Buttons für Min, Window und Close.

Clickt ein Beützer dann direkt auf Close wird der Datensatz unter Umgehung des <OK>-Buttons geschlossen. Wenn der Benutzer speichern wollte ist das kein Problem, alle Daten bleiben erhalten. Wollte er aber die Daten wegwefen, so werden sie gespeichert. Also &#8211; am liebsten würde ich dieses Close auch entfernen...

Die Mehtode hat noch eine Unschönheit: gHiAuNummer und gBoolDatensatzLöschen sind PUBLIC. So lange ich mich darauf beschränke nur ein Formular zu öffnen funktioniert das wunderbar. Bei einer anderen Fragestellung hätte ich eigentlich gerne mehrere Aufträge geöffnet. Das gehzt mit dieser Methode dann eben nicht, weil diese globalen Variablen nur einmal vorkommen können.

Ich vermute darum: ich habe das sehr unelegant programmiert und es geht irgendwie viel einfacher. Wer kann mir erklären wie?
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
<OK> & <Cancel> bei Datensatz mit Subform und re...1.234Erdmännchen19.12.08 15:09
Re: <OK> & <Cancel> bei Datensatz mit Subform un...776wb-soft19.12.08 16:01
Re: <OK> & <Cancel> bei Datensatz mit Subform un...731Erdmännchen31.12.08 12:58
Re: <OK> & <Cancel> bei Datensatz mit Subform un...822wb-soft31.12.08 13:50

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel