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

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