home *** CD-ROM | disk | FTP | other *** search
/ Programming Tool Box / SIMS_2.iso / bp_3_94 / vbwin / locking / locking1.frm < prev    next >
Text File  |  1994-06-21  |  17KB  |  492 lines

  1. VERSION 2.00
  2. Begin Form frm_Locking1 
  3.    BackColor       =   &H00808080&
  4.    Caption         =   "Beispiel fⁿr Record-Locking mit der Access-Datenbank    (c) 1994 by A. Burda"
  5.    ClientHeight    =   4575
  6.    ClientLeft      =   630
  7.    ClientTop       =   1545
  8.    ClientWidth     =   8475
  9.    Height          =   4980
  10.    KeyPreview      =   -1  'True
  11.    Left            =   570
  12.    LinkTopic       =   "Form1"
  13.    ScaleHeight     =   4575
  14.    ScaleWidth      =   8475
  15.    Top             =   1200
  16.    Width           =   8595
  17.    Begin CommandButton cmd_Neu 
  18.       Caption         =   "&Neu"
  19.       Height          =   555
  20.       Left            =   540
  21.       TabIndex        =   3
  22.       Top             =   2880
  23.       Width           =   1155
  24.    End
  25.    Begin CommandButton cmd_Ende 
  26.       Cancel          =   -1  'True
  27.       Caption         =   "&Ende"
  28.       Height          =   555
  29.       Left            =   6720
  30.       TabIndex        =   4
  31.       Top             =   2880
  32.       Width           =   1155
  33.    End
  34.    Begin TextBox txt_Beruf 
  35.       Alignment       =   2  'Center
  36.       BackColor       =   &H00FFFFFF&
  37.       DataField       =   "Beruf"
  38.       DataSource      =   "dat_Tab_Personen"
  39.       Height          =   285
  40.       Left            =   3060
  41.       MaxLength       =   50
  42.       TabIndex        =   2
  43.       Top             =   1800
  44.       Width           =   4815
  45.    End
  46.    Begin TextBox txt_Vorname 
  47.       Alignment       =   2  'Center
  48.       BackColor       =   &H00FFFFFF&
  49.       DataField       =   "Vorname"
  50.       DataSource      =   "dat_Tab_Personen"
  51.       Height          =   285
  52.       Left            =   3060
  53.       MaxLength       =   50
  54.       TabIndex        =   1
  55.       Top             =   1440
  56.       Width           =   4815
  57.    End
  58.    Begin TextBox txt_Name 
  59.       Alignment       =   1  'Right Justify
  60.       BackColor       =   &H00FFFFFF&
  61.       DataField       =   "Name"
  62.       DataSource      =   "dat_Tab_Personen"
  63.       Height          =   285
  64.       Left            =   3060
  65.       MaxLength       =   50
  66.       TabIndex        =   0
  67.       Top             =   1080
  68.       Width           =   4815
  69.    End
  70.    Begin Data dat_Tab_Personen 
  71.       BackColor       =   &H00C0C0C0&
  72.       Caption         =   "Tabelle: TAB-Personen"
  73.       Connect         =   ""
  74.       DatabaseName    =   ""
  75.       Exclusive       =   0   'False
  76.       ForeColor       =   &H00000000&
  77.       Height          =   270
  78.       Left            =   480
  79.       Options         =   0
  80.       ReadOnly        =   0   'False
  81.       RecordSource    =   ""
  82.       Top             =   3840
  83.       Width           =   7515
  84.    End
  85.    Begin Label lab_Person_Id 
  86.       BackColor       =   &H00FFFFFF&
  87.       BorderStyle     =   1  'Fixed Single
  88.       DataField       =   "Person-Id"
  89.       DataSource      =   "dat_Tab_Personen"
  90.       Height          =   255
  91.       Index           =   4
  92.       Left            =   3060
  93.       TabIndex        =   9
  94.       Top             =   480
  95.       Width           =   4815
  96.    End
  97.    Begin Label lab_Beschriftung 
  98.       Alignment       =   2  'Center
  99.       BackStyle       =   0  'Transparent
  100.       BorderStyle     =   1  'Fixed Single
  101.       Caption         =   "Beruf"
  102.       Height          =   255
  103.       Index           =   3
  104.       Left            =   540
  105.       TabIndex        =   8
  106.       Top             =   1800
  107.       Width           =   2415
  108.    End
  109.    Begin Label lab_Beschriftung 
  110.       Alignment       =   2  'Center
  111.       BackStyle       =   0  'Transparent
  112.       BorderStyle     =   1  'Fixed Single
  113.       Caption         =   "Vorname"
  114.       Height          =   255
  115.       Index           =   2
  116.       Left            =   540
  117.       TabIndex        =   7
  118.       Top             =   1440
  119.       Width           =   2415
  120.    End
  121.    Begin Label lab_Beschriftung 
  122.       Alignment       =   2  'Center
  123.       BackStyle       =   0  'Transparent
  124.       BorderStyle     =   1  'Fixed Single
  125.       Caption         =   "Name"
  126.       Height          =   255
  127.       Index           =   1
  128.       Left            =   540
  129.       TabIndex        =   6
  130.       Top             =   1080
  131.       Width           =   2415
  132.    End
  133.    Begin Label lab_Beschriftung 
  134.       Alignment       =   2  'Center
  135.       BackStyle       =   0  'Transparent
  136.       BorderStyle     =   1  'Fixed Single
  137.       Caption         =   "Person-Id (Datensatz-Nr)"
  138.       Height          =   255
  139.       Index           =   0
  140.       Left            =   540
  141.       TabIndex        =   5
  142.       Top             =   480
  143.       Width           =   2415
  144.    End
  145.    Begin Shape sha_Rahmen 
  146.       BackColor       =   &H00404040&
  147.       BackStyle       =   1  'Opaque
  148.       BorderColor     =   &H00000000&
  149.       FillColor       =   &H00404040&
  150.       Height          =   495
  151.       Index           =   1
  152.       Left            =   360
  153.       Top             =   3720
  154.       Width           =   7755
  155.    End
  156.    Begin Shape sha_Rahmen 
  157.       BackColor       =   &H00C0C0C0&
  158.       BackStyle       =   1  'Opaque
  159.       BorderColor     =   &H00000000&
  160.       FillColor       =   &H00C0C0C0&
  161.       Height          =   4155
  162.       Index           =   0
  163.       Left            =   240
  164.       Top             =   180
  165.       Width           =   7995
  166.    End
  167. End
  168. '************************************************************
  169. 'Form        : LOCKING1.FRM
  170. 'Compiler    : Visual Basic fⁿr Windows 3.0
  171. 'Zweck       : Beispiel fⁿr Record-Locking unter VB 3.0 via
  172. '              Tastaturabfrage
  173. 'erstellt am : 22.06.1994
  174. 'durch       : Arthur Burda
  175. 'Anmerkung   : Demonstriert anhand einer Beispiel-Datenbank
  176. '              (PERSONEN.MDB) die Datensatzsperrung unter Vi-
  177. '              sual Basic fⁿr Windows 3.0
  178. '************************************************************
  179. '─nderung am :
  180. 'durch       :
  181. 'Version     :
  182. 'Anmerkung   :
  183. '************************************************************
  184.  
  185. Option Explicit
  186.  
  187. 'Konstanten
  188.  
  189. Const DB_Personen_Name = "PERSONEN.MDB"
  190. Const Tab_Personen_Name = "TAB-Personen"
  191.  
  192. 'Variablen
  193.  
  194. Dim Speichern% 'True, wenn akt. Datensatz gespeichert werden soll (Methode Validate von Data Control), sonst False
  195. Dim First% 'nur bei Initialisierung der Form von Bedeutung
  196.  
  197. '************************************************************
  198. 'Sub       : cmd_Ende_Click
  199. 'Zweck     : Schalter "Ende" wurde angeklickt, Programm beenden
  200. 'Parameter :
  201. 'Stand     : 22.06.1994
  202. 'Bemerkung :
  203. '************************************************************
  204. '
  205. Sub cmd_Ende_Click ()
  206.  
  207.     Unload Me
  208.  
  209. End Sub
  210.  
  211. '************************************************************
  212. 'Sub       : cmd_Neu_Click
  213. 'Zweck     : Schalter "Neu" wurde angeklickt, neue Person hinzu-
  214. '            fⁿgen
  215. 'Parameter :
  216. 'Stand     : 22.06.1994
  217. 'Bemerkung :
  218. '************************************************************
  219. '
  220. Sub cmd_Neu_Click ()
  221.  
  222.     If dat_Tab_Personen.Recordset.RecordCount > 0 Then dat_Tab_Personen.Recordset.MoveLast
  223.     dat_Tab_Personen.Recordset.AddNew 'neuen Datensatz anlegen
  224.     txt_Name.SetFocus
  225.  
  226. End Sub
  227.  
  228. '************************************************************
  229. 'Sub       : dat_Tab_Personen_Reposition
  230. 'Zweck     : Wird aufgerufen nach ─nderung der Position innerhalb
  231. '            einer Tabelle oder Abfrage
  232. 'Parameter :
  233. 'Stand     : 22.06.1994
  234. 'Bemerkung :
  235. '************************************************************
  236. '
  237. Sub dat_Tab_Personen_Reposition ()
  238.  
  239.     Dim Tab_Abf_Name$ 'Name der aktuellen Tabelle bzw. Abfrage
  240.     Dim Satz_Nr& 'Nummer des aktuellen Datensatzes
  241.  
  242.     Gesperrt = 0
  243.  
  244.     Tab_Abf_Name = Lese_Tab_Abf_Name()
  245.     Satz_Nr = Lese_Satz_Nr()
  246.  
  247.     If Datensatz_gesperrt(Tab_Abf_Name, Satz_Nr) Then 'prⁿfen, ob der Datensatz von einem anderen Benutzer gesperrt wurde
  248.         If Not First And Speichern Then
  249.             Gesperrt = 2
  250.             Sperre_EditFelder Me 'alle Editierfelder innerhalb der Form sperren
  251.             EditFelder_gesperrt = True
  252.             MsgBox "Dieser Datensatz wurde von einem anderen Benutzer gesperrt. Editieren nicht m÷glich."
  253.         End If
  254.     Else
  255.         If EditFelder_gesperrt Then 'prⁿfen, ob Editierfelder innerhalb der Form deaktiviert sind
  256.             Entsperre_EditFelder Me 'alle Editierfelder innerhalb der Form entsperren
  257.             EditFelder_gesperrt = False
  258.         End If
  259.     End If
  260.  
  261. End Sub
  262.  
  263. '************************************************************
  264. 'Sub       : dat_Tab_Personen_Validate
  265. 'Zweck     : Entsperrt den akt. Datensatz, wenn dieser vorher vom
  266. '            akt. Benutzer gesperrt wurde
  267. 'Parameter : Action, Save
  268. 'Stand     : 22.06.1994
  269. 'Bemerkung :
  270. '************************************************************
  271. '
  272. Sub dat_Tab_Personen_Validate (Action As Integer, Save As Integer)
  273.  
  274.     Dim Tab_Abf_Name$ 'Name der aktuellen Tabelle bzw. Abfrage
  275.     Dim Satz_Nr& 'Nummer des aktuellen Datensatzes
  276.  
  277.     If Speichern Then
  278.         Save = Daten_geΣndert(Me)
  279.     Else
  280.         Save = Speichern
  281.     End If
  282.  
  283.     If Gesperrt = 1 Then
  284.         Tab_Abf_Name = Lese_Tab_Abf_Name()
  285.         Satz_Nr = Lese_Satz_Nr()
  286.         If Entsperre_Datensatz(Tab_Abf_Name, Satz_Nr) Then 'Datensatz entsperren
  287.             Gesperrt = 0
  288.         End If
  289.     End If
  290.  
  291. End Sub
  292.  
  293. '************************************************************
  294. 'Sub       : Form_KeyDown
  295. 'Zweck     : Wird aufgerufen, wenn eine Taste niedergedrⁿckt wurde
  296. '            und ist fⁿr die Datensatzsperrung verantwortlich
  297. 'Parameter : KeyCode, Shift
  298. 'Stand     : 22.06.1994
  299. 'Bemerkung :
  300. '************************************************************
  301. '
  302. Sub Form_KeyDown (KeyCode As Integer, Shift As Integer)
  303.  
  304.     Dim Tab_Abf_Name$ 'Name der aktuellen Tabelle bzw. Abfrage
  305.     Dim Satz_Nr& 'Nummer des aktuellen Datensatzes
  306.     Dim Mark 'Datensatzmarkierung
  307.  
  308.     DoEvents
  309.     If Gesperrt = 0 Then 'Datensatz nicht gesperrt?
  310.         Tab_Abf_Name = Lese_Tab_Abf_Name()
  311.         Satz_Nr = Lese_Satz_Nr()
  312.         If Datensatz_gesperrt(Tab_Abf_Name, Satz_Nr) Then 'Wurde der Datensatz von einem anderen Benutzer inzwischen gesperrt?
  313.             KeyCode = 0
  314.             Gesperrt = 2
  315.             Speichern = False 'Datensatz nicht aktualisieren
  316.             Mark = dat_Tab_Personen.Recordset.Bookmark 'Bookmark merken
  317.             dat_Tab_Personen.Recordset.Bookmark = Mark 'Bookmark setzen
  318.             Speichern = True 'Datensatzaktualisierung wieder erlaubt
  319.             Sperre_EditFelder Me 'alle Editierfelder innerhalb der Form sperren
  320.             EditFelder_gesperrt = True
  321.             MsgBox "Dieser Datensatz wurde von einem anderen Benutzer gesperrt. Editieren nicht m÷glich."
  322.         Else 'Datensatz ist nicht gesperrt
  323.             If Daten_geΣndert(Me) Then 'prⁿfen, ob sich irgendwelche Daten geΣndert haben, d.h. der Datensatz editiert wurde
  324.                 If Sperre_Datensatz(Tab_Abf_Name, Satz_Nr) Then 'Datensatz sperren
  325.                     Gesperrt = 1 'Datensatz wurde vom akt. Benutzer gesperrt
  326.                     MsgBox "Ab jetzt ist dieser Datensatz fⁿr alle anderen Benutzer in der Mehrbenutzerumgebung gesperrt."
  327.                 Else 'Datensatz konnte nicht gesperrt werden
  328.                     Speichern = False 'Datensatz nicht aktualisieren
  329.                     Mark = dat_Tab_Personen.Recordset.Bookmark 'Bookmark merken
  330.                     dat_Tab_Personen.Recordset.Bookmark = Mark 'Bookmark setzen
  331.                     Speichern = True 'Datensatzaktualisierung wieder erlaubt
  332.                 End If
  333.             End If
  334.         End If
  335.     End If
  336.  
  337. End Sub
  338.  
  339. '************************************************************
  340. 'Sub       : Form_KeyUp
  341. 'Zweck     : Wird aufgerufen, wenn eine Taste losgelassen wurde
  342. '            und ist fⁿr die Datensatzsperrung verantwortlich
  343. 'Parameter : KeyCode, Shift
  344. 'Stand     : 22.06.1994
  345. 'Bemerkung :
  346. '************************************************************
  347. '
  348. Sub Form_KeyUp (KeyCode As Integer, Shift As Integer)
  349.  
  350.     Dim Tab_Abf_Name$ 'Name der aktuellen Tabelle bzw. Abfrage
  351.     Dim Satz_Nr& 'Nummer des aktuellen Datensatzes
  352.     Dim Mark 'Datensatzmarkierung
  353.  
  354.     If Gesperrt = 0 Then 'Datensatz nicht gesperrt?
  355.         Tab_Abf_Name = Lese_Tab_Abf_Name()
  356.         Satz_Nr = Lese_Satz_Nr()
  357.         If Datensatz_gesperrt(Tab_Abf_Name, Satz_Nr) Then 'Wurde der Datensatz von einem anderen Benutzer inzwischen gesperrt?
  358.             Gesperrt = 2
  359.             Speichern = False 'Datensatz nicht aktualisieren
  360.             Mark = dat_Tab_Personen.Recordset.Bookmark 'Bookmark merken
  361.             dat_Tab_Personen.Recordset.Bookmark = Mark 'Bookmark setzen
  362.             Speichern = True 'Datensatzaktualisierung wieder erlaubt
  363.             Sperre_EditFelder Me 'alle Editierfelder innerhalb der Form sperren
  364.             EditFelder_gesperrt = True
  365.             MsgBox "Dieser Datensatz wurde von einem anderen Benutzer gesperrt. Editieren nicht m÷glich."
  366.         Else 'Datensatz ist nicht gesperrt
  367.             If Daten_geΣndert(Me) Then 'prⁿfen, ob sich irgendwelche Daten geΣndert haben, d.h. der Datensatz editiert wurde
  368.                 If Sperre_Datensatz(Tab_Abf_Name, Satz_Nr) Then 'Datensatz sperren
  369.                     Gesperrt = 1 'Datensatz wurde vom akt. Benutzer gesperrt
  370.                     MsgBox "Ab jetzt ist dieser Datensatz fⁿr alle anderen Benutzer in der Mehrbenutzerumgebung gesperrt."
  371.                 Else 'Datensatz konnte nicht gesperrt werden
  372.                     Speichern = False 'Datensatz nicht aktualisieren
  373.                     Mark = dat_Tab_Personen.Recordset.Bookmark 'Bookmark merken
  374.                     dat_Tab_Personen.Recordset.Bookmark = Mark 'Bookmark setzen
  375.                     Speichern = True 'Datensatzaktualisierung wieder erlaubt
  376.                 End If
  377.             End If
  378.         End If
  379.     End If
  380.  
  381. End Sub
  382.  
  383. '************************************************************
  384. 'Sub       : Form_Load
  385. 'Zweck     : Wird beim Laden der Form aufgerufen und ist fⁿr
  386. '            die Initialisierung verantwortlich
  387. 'Parameter :
  388. 'Stand     : 22.06.1994
  389. 'Bemerkung :
  390. '************************************************************
  391. '
  392. Sub Form_Load ()
  393.  
  394.     Init_Form
  395.  
  396. End Sub
  397.  
  398. '************************************************************
  399. 'Sub       : Form_Unload
  400. 'Zweck     : Wird aufgerufen, wenn die Form geschlossen wird
  401. 'Parameter : Cancel
  402. 'Stand     : 22.06.1994
  403. 'Bemerkung :
  404. '************************************************************
  405. '
  406. Sub Form_Unload (Cancel As Integer)
  407.  
  408.     Schlie▀e_Sperrungen
  409.  
  410. End Sub
  411.  
  412. '************************************************************
  413. 'Sub       : Init_Form
  414. 'Zweck     : Initialisiert die Form frm_Locking1
  415. 'Parameter :
  416. 'Stand     : 22.06.1994
  417. 'Bemerkung : Diese Routine wird in Form_Load aufgerufen.
  418. '************************************************************
  419. '
  420. Sub Init_Form ()
  421.  
  422.     Dim Pfad$ 'Verzeichnis, in dem sich die Datenbanken LOCKING.MDB und PERSONEN.MDB befinden
  423.  
  424.     First = True
  425.     Speichern = True
  426.  
  427.     Pfad = InputBox("Bitte geben Sie den Pfad an, in dem sich die Datenbanken LOCKING.MDB und PERSONEN.MDB befinden oder bestΣtigen Sie die vorgeschlagene Pfadangabe (akt. Verzeichnis).", "LOCKING", CurDir)
  428.     If Pfad = "" Then 'Abbruch?
  429.         End
  430.     Else
  431.         ChDir Pfad 'Pfad wechseln
  432.     End If
  433.     
  434.     Zentriere_Form Me
  435.     Init_Sperrungen 'Datensatz-Sperrsystem initialisieren
  436.     Me.Show
  437.     Init_Tab_Personen 'Tabelle "TAB-Personen" und das zugeh÷rige Datensteuerelement initialisieren
  438.  
  439.     First = False
  440.  
  441.     If dat_Tab_Personen.Recordset.RecordCount > 0 Then dat_Tab_Personen.Recordset.MoveFirst 'zum ersten Datensatz gehen
  442.  
  443. End Sub
  444.  
  445. '************************************************************
  446. 'Sub       : Init_Tab_Personen
  447. 'Zweck     : Initialisiert die Tabelle "TAB-Personen" und das
  448. '            zugeh÷rige Datensteuerelement
  449. 'Parameter :
  450. 'Stand     : 22.06.1994
  451. 'Bemerkung :
  452. '************************************************************
  453. '
  454. Sub Init_Tab_Personen ()
  455.  
  456.     dat_Tab_Personen.DatabaseName = DB_Personen_Name
  457.     dat_Tab_Personen.RecordSource = Tab_Personen_Name
  458.     dat_Tab_Personen.Refresh 'Tabelle aktualisieren
  459.     dat_Tab_Personen.Recordset.LockEdits = False 'Optimistic Locking einschalten
  460.     dat_Tab_Personen.Refresh 'Tabelle aktualisieren
  461.  
  462. End Sub
  463.  
  464. '************************************************************
  465. 'Funktion  : Lese_Satz_Nr
  466. 'Zweck     : Liest die Nummer des aktuellen Datensatzes
  467. 'Parameter :
  468. 'Stand     : 22.06.1994
  469. 'Bemerkung :
  470. '************************************************************
  471. '
  472. Function Lese_Satz_Nr ()
  473.  
  474.     Lese_Satz_Nr = dat_Tab_Personen.Recordset("[Person-Id]")
  475.  
  476. End Function
  477.  
  478. '************************************************************
  479. 'Funktion  : Lese_Tab_Abf_Name
  480. 'Zweck     : Liest den Namen der aktuellen Tabelle bzw. Abfrage
  481. 'Parameter :
  482. 'Stand     : 22.06.1994
  483. 'Bemerkung :
  484. '************************************************************
  485. '
  486. Function Lese_Tab_Abf_Name ()
  487.  
  488.     Lese_Tab_Abf_Name = dat_Tab_Personen.RecordSource
  489.  
  490. End Function
  491.  
  492.