home *** CD-ROM | disk | FTP | other *** search
/ Programming Tool Box / SIMS_2.iso / bp_3_94 / vbwin / locking / locking.bas next >
BASIC Source File  |  1994-06-21  |  10KB  |  310 lines

  1. '************************************************************
  2. 'Modul       : LOCKING.BAS
  3. 'Compiler    : Visual Basic fⁿr Windows 3.0
  4. 'Zweck       : EnthΣlt globale Routinen fⁿr Record-Locking unter
  5. '              VB 3.0 in Verbindung mit der Access-Datenbank
  6. 'erstellt am : 22.06.1994
  7. 'durch       : Arthur Burda
  8. 'Anmerkung   :
  9. '************************************************************
  10. '─nderung am :
  11. 'durch       :
  12. 'Version     :
  13. 'Anmerkung   :
  14. '************************************************************
  15.  
  16. Option Explicit
  17.  
  18. 'Globale Konstanten
  19.  
  20. Global Const DB_Locking_Name = "LOCKING.MDB"
  21. Global Const Tab_Sperrungen_Name = "TAB-Sperrungen"
  22.  
  23. 'Globale Variablen
  24.  
  25. Global DB_Locking As Database
  26. Global DS_Sperrungen As Dynaset
  27. Global Gesperrt% '0 = Datensatz ist nicht gesperrt, 1 = Datensatz gesperrt (akt. Benutzer), 2 = Datensatz wurde von einem anderen Benutzer gesperrt
  28. Global EditFelder_gesperrt% 'True, wenn die Editierfelder innerhalb der akt. Form gesperrt sind, sonst False
  29.  
  30. '************************************************************
  31. 'Funktion  : Daten_geΣndert
  32. 'Zweck     : Liefert True zurⁿck, wenn Daten innerhalb einer Form
  33. '            geΣndert wurden (d.h. der Datensatz editiert wurde),
  34. '            sonst False
  35. 'Parameter : F
  36. 'Stand     : 22.06.1994
  37. 'Bemerkung :
  38. '************************************************************
  39. '
  40. Function Daten_geΣndert (F As Form)
  41.  
  42.     Dim i
  43.  
  44.     Daten_geΣndert = False
  45.  
  46.     If F.Controls.Count > 0 Then 'prⁿfen, ob Form Steuerelemente enthΣlt
  47.         For i = 0 To F.Controls.Count - 1 'alle Steuerelemente durchlaufen
  48.             If Ist_EditFeld(F.Controls(i)) Then 'prⁿfen, ob es sich um ein Editierfeld handelt
  49.                 If F.Controls(i).DataChanged Then 'prⁿfen, ob Daten geΣndert wurden
  50.                     Daten_geΣndert = True
  51.                     Exit Function 'Funktion verlassen
  52.                 End If
  53.             End If
  54.         Next i
  55.     End If
  56.  
  57. End Function
  58.  
  59. '************************************************************
  60. 'Funktion  : Datensatz_gesperrt
  61. 'Zweck     : Liefert True zurⁿck, wenn der angegebene Datensatz
  62. '            in der angegebenen Tabelle oder Abfrage gesperrt ist,
  63. '            sonst False
  64. 'Parameter : Tab_Abf_Name, Satz_Nr
  65. 'Stand     : 22.06.1994
  66. 'Bemerkung :
  67. '************************************************************
  68. '
  69. Function Datensatz_gesperrt (Tab_Abf_Name$, Satz_Nr&)
  70.  
  71.     Dim Snap As Snapshot
  72.  
  73.     Datensatz_gesperrt = False
  74.  
  75.     Set Snap = DB_Locking.CreateSnapshot(Tab_Sperrungen_Name) 'Snapshot auf Basis der Tabelle "TAB-Sperrungen" erstellen
  76.     Snap.FindFirst "[Name] = '" & Tab_Abf_Name & "' AND [Datensatz-Id] = " & Satz_Nr 'Datensatz finden
  77.     If Not Snap.NoMatch Then Datensatz_gesperrt = True
  78.     Snap.Close 'Snapshot schlie▀en
  79.  
  80. End Function
  81.  
  82. '************************************************************
  83. 'Funktion  : Entsperre_Datensatz
  84. 'Zweck     : Entsperrt den Datensatz mit der angegebenen Nummer
  85. '            in der angegebenen Tabelle oder Abfrage und liefert
  86. '            bei Erfolg True zurⁿck
  87. 'Parameter : Tab_Abf_Name, Satz_Nr
  88. 'Stand     : 22.06.1994
  89. 'Bemerkung :
  90. '************************************************************
  91. '
  92. Function Entsperre_Datensatz (Tab_Abf_Name$, Satz_Nr&)
  93.  
  94.     On Error GoTo ERR_Entsperre_Datensatz
  95.  
  96.     Entsperre_Datensatz = True
  97.  
  98.     If Datensatz_gesperrt(Tab_Abf_Name, Satz_Nr) Then 'prⁿfen, ob der Datensatz gesperrt ist
  99.         DS_Sperrungen.FindFirst "[Name] = '" & Tab_Abf_Name & "' AND [Datensatz-Id] = " & Satz_Nr 'Datensatz finden
  100.         If Not DS_Sperrungen.NoMatch Then DS_Sperrungen.Delete 'Datensatz entsperren
  101.     End If
  102.  
  103. EXIT_Entsperre_Datensatz:
  104.  
  105.     Exit Function 'Funktion verlassen
  106.  
  107. ERR_Entsperre_Datensatz:
  108.  
  109.     Entsperre_Datensatz = False
  110.     MsgBox "Der Datensatz konnte nicht entsperrt werden."
  111.     Resume Next
  112.  
  113. End Function
  114.  
  115. '************************************************************
  116. 'Sub       : Entsperre_EditFelder
  117. 'Zweck     : Entsperrt alle Editierfelder innerhalb der Form
  118. 'Parameter : F
  119. 'Stand     : 22.06.1994
  120. 'Bemerkung :
  121. '************************************************************
  122. '
  123. Sub Entsperre_EditFelder (F As Form)
  124.  
  125.     Dim i
  126.  
  127.     If F.Controls.Count > 0 Then 'prⁿfen, ob Form Steuerelemente enthΣlt
  128.         For i = 0 To F.Controls.Count - 1 'alle Steuerelemente durchlaufen
  129.             If Ist_EditFeld(F.Controls(i)) Then 'prⁿfen, ob es sich um ein Editierfeld handelt
  130.                 F.Controls(i).Enabled = True 'Feld aktivieren
  131.             End If
  132.         Next i
  133.     End If
  134.  
  135. End Sub
  136.  
  137. '************************************************************
  138. 'Sub       : Init_Sperrungen
  139. 'Zweck     : ╓ffnet die Datenbank LOCKING.MDB zur Verwaltung
  140. '            von Datensatz-Sperrungen, erstellt einen Dynaset auf
  141. '            Basis der Tabelle "TAB-Sperrungen" und setzt die glo-
  142. '            bale Variable Gesperrt auf False
  143. 'Parameter :
  144. 'Stand     : 22.06.1994
  145. 'Bemerkung :
  146. '************************************************************
  147. '
  148. Sub Init_Sperrungen ()
  149.  
  150.     L÷sche_Sperrungen 'Locking-Tabelle l÷schen, wenn die Datenbank zum ersten Mal ge÷ffnet wird
  151.  
  152.     Set DB_Locking = OpenDatabase(DB_Locking_Name)
  153.     Set DS_Sperrungen = DB_Locking.CreateDynaset(Tab_Sperrungen_Name)
  154.     Gesperrt = 0
  155.     EditFelder_gesperrt = True
  156.  
  157. End Sub
  158.  
  159. '************************************************************
  160. 'Funktion  : Ist_EditFeld
  161. 'Zweck     : Liefert True zurⁿck, wenn das angegebene Steuerelement
  162. '            ein Editierfeld ist, sonst False
  163. 'Parameter : C
  164. 'Stand     : 22.06.1994
  165. 'Bemerkung :
  166. '************************************************************
  167. '
  168. Function Ist_EditFeld (C As Control)
  169.  
  170.     Ist_EditFeld = False
  171.  
  172.     If TypeOf C Is TextBox Then 'Textfeld?
  173.         Ist_EditFeld = True 'ist ein Eingabefeld
  174.     ElseIf TypeOf C Is ComboBox Then 'Kombinationslistenfeld?
  175.         Ist_EditFeld = True
  176.     ElseIf TypeOf C Is CheckBox Then 'Kontrollfeld?
  177.         Ist_EditFeld = True
  178.     ElseIf TypeOf C Is OptionButton Then 'Optionsfeld?
  179.         Ist_EditFeld = True
  180.     End If
  181.  
  182. End Function
  183.  
  184. '************************************************************
  185. 'Sub       : L÷sche_Sperrungen
  186. 'Zweck     : L÷scht alle DatensΣtze in der Tabelle "TAB-Sperrungen"
  187. '            (Datenbank LOCKING.MDB), wenn die Datenbank zum ersten
  188. '            Mal ge÷ffnet wird
  189. 'Parameter :
  190. 'Stand     : 22.06.1994
  191. 'Bemerkung :
  192. '************************************************************
  193. '
  194. Sub L÷sche_Sperrungen ()
  195.  
  196.     Dim QD As QueryDef
  197.  
  198.     On Error GoTo ERR_L÷sche_Sperrungen
  199.  
  200.     Set DB_Locking = OpenDatabase(DB_Locking_Name, True) 'Datenbank exklusiv ÷ffnen
  201.     If Err = 0 Then 'kein Fehler, d.h. die Datenbank wurde zum ersten Mal ge÷ffnet
  202.         Set QD = DB_Locking.CreateQueryDef("L÷schabfrage")
  203.         QD.SQL = "DELETE * FROM [TAB-Sperrungen]"
  204.         QD.Execute
  205.         QD.Close
  206.         DB_Locking.DeleteQueryDef ("L÷schabfrage")
  207.         DB_Locking.Close 'Datenbank schlie▀en
  208.     End If
  209.  
  210. EXIT_L÷sche_Sperrungen:
  211.  
  212.     Exit Sub 'Sub verlassen
  213.  
  214. ERR_L÷sche_Sperrungen:
  215.  
  216.     If Err <> 0 Then Exit Sub 'wenn die Datenbank nicht exklusiv ge÷ffnet werden konnte, ist sie bereits ge÷ffnet
  217.  
  218. End Sub
  219.  
  220. '************************************************************
  221. 'Sub       : Schlie▀e_Sperrungen
  222. 'Zweck     : Schlie▀t die Datenbank LOCKING.MDB zur Verwaltung
  223. '            von Datensatz-Sperrungen sowie den Dynaset in der
  224. '            Variablen DS_Sperrungen
  225. 'Parameter :
  226. 'Stand     : 22.06.1994
  227. 'Bemerkung :
  228. '************************************************************
  229. '
  230. Sub Schlie▀e_Sperrungen ()
  231.  
  232.     DS_Sperrungen.Close
  233.     DB_Locking.Close
  234.  
  235. End Sub
  236.  
  237. '************************************************************
  238. 'Sub       : Sperre_Datensatz
  239. 'Zweck     : Sperrt den Datensatz mit der angegebenen Nummer in
  240. '            der angegebenen Tabelle oder Abfrage und liefert
  241. '            bei Erfolg True zurⁿck
  242. 'Parameter : Tab_Abf_Name, Satz_Nr
  243. 'Stand     : 22.06.1994
  244. 'Bemerkung :
  245. '************************************************************
  246. '
  247. Function Sperre_Datensatz (Tab_Abf_Name$, Satz_Nr&)
  248.  
  249.     On Error GoTo ERR_Sperre_Datensatz
  250.  
  251.     Sperre_Datensatz = True
  252.  
  253.     If Not Datensatz_gesperrt(Tab_Abf_Name, Satz_Nr) Then 'prⁿfen, ob der Datensatz noch nicht gesperrt ist
  254.         If DS_Sperrungen.RecordCount > 0 Then DS_Sperrungen.MoveLast 'zum letzten Datensatz gehen
  255.         DS_Sperrungen.AddNew 'neuen Datensatz anlegen
  256.         DS_Sperrungen("[Name]") = Tab_Abf_Name
  257.         DS_Sperrungen("[Datensatz-Id]") = Satz_Nr
  258.         DS_Sperrungen.Update 'speichern
  259.     End If
  260.  
  261. EXIT_Sperre_Datensatz:
  262.  
  263.     Exit Function 'Funktion verlassen
  264.  
  265. ERR_Sperre_Datensatz:
  266.     
  267.     Sperre_Datensatz = False
  268.     MsgBox "Der Datensatz konnte nicht gesperrt werden."
  269.     Resume Next
  270.  
  271. End Function
  272.  
  273. '************************************************************
  274. 'Sub       : Sperre_EditFelder
  275. 'Zweck     : Sperrt alle Editierfelder innerhalb der Form
  276. 'Parameter : F
  277. 'Stand     : 22.06.1994
  278. 'Bemerkung :
  279. '************************************************************
  280. '
  281. Sub Sperre_EditFelder (F As Form)
  282.  
  283.     Dim i
  284.  
  285.     If F.Controls.Count > 0 Then 'prⁿfen, ob Form Steuerelemente enthΣlt
  286.         For i = 0 To F.Controls.Count - 1 'alle Steuerelemente durchlaufen
  287.             If Ist_EditFeld(F.Controls(i)) Then 'prⁿfen, ob es sich um ein Editierfeld handelt
  288.                 F.Controls(i).Enabled = False 'Feld deaktivieren
  289.             End If
  290.         Next i
  291.     End If
  292.  
  293. End Sub
  294.  
  295. '************************************************************
  296. 'Sub       : Zentriere_Form
  297. 'Zweck     : Stellt eine Form zentriert auf dem Bildschirm dar
  298. 'Parameter : F
  299. 'Stand     : 22.06.1994
  300. 'Bemerkung :
  301. '************************************************************
  302. '
  303. Sub Zentriere_Form (F As Form)
  304.  
  305.     F.Top = Screen.Height / 2 - F.Height / 2
  306.     F.Left = Screen.Width / 2 - F.Width / 2
  307.  
  308. End Sub
  309.  
  310.