home *** CD-ROM | disk | FTP | other *** search
/ Programming Tool Box / SIMS_2.iso / demo / rec_lock / rec_lock.txt < prev    next >
Text File  |  1994-09-09  |  25KB  |  464 lines

  1.  
  2. Record Locking Pro Demo - Dokumentation
  3. =======================================
  4.  
  5. 1. Systemvoraussetzungen
  6. ------------------------
  7.  
  8. IBM-kompatibler PC mit 386-Prozessor
  9. mindestens 4 MB Hauptspeicher
  10. mindestens 5 MB Festplattenspeicher
  11. Microsoft Windows 3.1 oder h÷her
  12. Microsoft Visual Basic 3.0 bzw. Microsoft Access 1.1 oder 2.0
  13.  
  14. 2. Allgemeines
  15. --------------
  16.  
  17. Record Locking Pro ist ein Programmiertool, welches Ihnen die Realisierung
  18. einer echten Datensatzsperrung unter Microsoft Visual Basic 3.0 wie auch
  19. Microsoft Access 2.0 erm÷glicht. Zum Software-Paket geh÷ren: eine DLL-
  20. Bibliothek namens REC_LOCK.DLL, die interne Funktionen zur Verwaltung von
  21. Datensatzsperrungen enthΣlt, ein Basic-Modul namens GLOBALS.BAS, welches
  22. Routinen des Record-Locking-Systems in reinem Visual Basic zur Verfⁿgung
  23. stellt, zwei Beispielprogramme und diese Dokumentation.
  24.  
  25. Die Demo-Version ist auf maximal 2 User, 2 Datenbank-Tabellen bzw. Abfra-
  26. gen und 100 DatensΣtze pro Tabelle/Abfrage beschrΣnkt.
  27.  
  28. Wichtig!
  29.  
  30. In Ihren Visual-Basic bzw. Access-Programmen sollten Sie nicht direkt die
  31. Funktionen der DLL-Bibliothek, sondern die Routinen des eben erwΣhnten 
  32. Basic-Moduls benutzen, da diese viel einfachere Aufrufkonventionen haben
  33. als die DLL-Routinen. Darⁿber hinaus sind die Routinen aus dem Modul GLO-
  34. BALS.BAS wesentlich kompakter und komfortabler.
  35. Wie Sie wissen, kennt die Access-Engine in den Versionen 1.1 und 2.0 nur
  36. die sogenannte Seitensperrung (Page Locking), bei der gleich mehrere Da-
  37. tensΣtze beim Zugriff auf einen bestimmten Datensatz gesperrt werden. Re-
  38. cord Locking Pro bietet hier Abhilfe, ist jedoch nicht fⁿr den Einsatz in
  39. sehr gro▀en Datenbanksystemen gedacht, da die Datensatzsperrung extern mit
  40. Umgehung der Access-Engine funktioniert, weshalb auch gewisse Grenzen be-
  41. zⁿglich der zu verwaltenden User, Tabellen und DatensΣtze gesetzt werden
  42. mu▀ten (dazu gleich mehr). Die Sperrvermerke werden in einer separaten Re-
  43. cord-Locking-Verwaltungsdatei gespeichert. Diese wird, sofern nicht vor-
  44. handen, von der Initialisierungsroutine erzeugt.
  45. Insgesamt k÷nnen mit der Vollversion 1.01 des vorliegenden Tools bis zu 50
  46. User in einer Mehrbenutzer-Umgebung, weiterhin bis zu 100 Datenbank-Tabel-
  47. len bzw. Abfragen und bis zu 500 Datensatzsperrungen pro Tabelle/Abfrage in
  48. einer Datei verwaltet werden. Die Record-Locking-Verwaltungsdatei hat die
  49. Gr÷▀e von etwa 700 KB (Vollversion). Es k÷nnen mehrere solche Dateien mit
  50. unterschiedlichen Namen vom Programmierer erzeugt und verwaltet werden.
  51. Mit Record Locking Pro kann fⁿr jeden zu sperrenden Datensatz eine soge-
  52. nannte automatische Entsperrⁿberwachung eingestellt werden. Dazu wird ein
  53. Lock-Timeout, eine Zeitmarke in Sekunden gesetzt, deren ▄berschreitung vom
  54. Programmierer abgefragt werden kann, so da▀ ggf. der entsprechende Daten-
  55. satz entsperrt werden kann. Auf diese Weise lΣ▀t sich leicht die Sperrung
  56. eines Datensatzes ⁿberwachen.
  57. Fⁿr jeden gesperrten Datensatz lassen sich eine Reihe zusΣtzlicher Infor-
  58. mationen abfragen. Dazu geh÷ren in erster Linie das Sperrdatum und die
  59. Sperrzeit. Darⁿber hinaus kann auch die Zeit in Sekunden seit der Sperrung
  60. abgefragt werden. Auch der Benutzer, den einen bestimmten Datensatz ge-
  61. sperrt hat, lΣ▀t sich auf einfache Weise ermitteln.
  62. GrundsΣtzlich kann man pro User zwischen zwei verschiedenen Sperrmethoden
  63. wΣhlen, deren Verwaltung jedoch manuell in einem VB-Programm programmiert
  64. werden mu▀, da Visual Basic 3.0 standardmΣ▀ig keine Callback-Funktionen zur
  65. Verfⁿgung stellt, mit deren Hilfe man die Sperrungen steuern k÷nnte:
  66. Lock-by-Select (Datensatzsperrung bei Selektion) und Lock-by-Edit (Daten-
  67. satzsperrung erst bei Beginn des Editiervorgangs). Bitte beachten Sie, da▀
  68. die Record-Locking-Verwaltungsdatei nur reine Informationen ⁿber die ein-
  69. gestellte Sperrmethode speichert.
  70. Was Record Locking Pro im einzelnen noch alles kann, entnehmen Sie bitte
  71. der Dokumentation der Routinen aus dem Modul GLOBALS.BAS.
  72.  
  73. 3. Was mu▀ bei der Programmierung beachtet werden?
  74. --------------------------------------------------
  75.  
  76. In jedes Visual-Basic-Projekt, in welchem Record Locking Pro eingesetzt
  77. wird, mu▀ die Datei GLOBALS.BAS mit der Implementation der einzelnen Rou-
  78. tinen fⁿr die Verwaltung der Datensatzsperrungen eingebunden werden. Dann
  79. k÷nnen in jedem weiteren Modul und jeder weiteren Form eines VB-Projektes
  80. diese Routinen aufgerufen werden. Die direkte Benutzung der DLL-Funktionen
  81. ist - wie am Anfang des Abschnitts "Allgemeines" schon gesagt - nicht emp-
  82. fehlenswert.
  83. Um Record Locking Pro erfolgreich einzusetzen, mu▀ man einige Konventionen
  84. beachten. Das Allerwichtigste ist, da▀ jeder zu sperrende Datensatz ein-
  85. deutig identifizierbar sein mu▀ und zwar durch einen Wert vom VB-Typ Long.
  86. Dieser Wert wird bei der Entsperrung des betreffenden Datensatzes ben÷tigt,
  87. wie auch bei der Abfrage verschiedener Informationen ⁿber einen Datensatz.
  88. Au▀er der Datensatz-ID mu▀ bei jeder Sperrung bzw. Entsperrung der Name der
  89. Datenbank-Tabelle bzw. Abfrage, in der sich der betreffende Datensatz be-
  90. findet, ⁿbergeben werden. Der Name des Benutzers braucht man nur bei der
  91. Initialisierung des Record-Locking-Systems zu ⁿbergeben. Das System spei-
  92. chert den Namen in einer globalen Varia-blen und benutzt ihn bei Aufruf
  93. aller anderen Routinen, die Record Locking Pro zur Verfⁿgung stellt (Modul
  94. GLOBALS.BAS).
  95. Bei Abfragen mu▀ man besondere Konventionen bei der Sperrung einzelner Da-
  96. tensΣtze beachten. Am besten ist es, wenn die einzelnen DatensΣtze aller
  97. zu einer Abfrage geh÷renden Datenbank-Tabellen gesperrt werden. Damit wird
  98. gewΣhrleistet, da▀ kein anderer Benutzer mehr au▀er dem, der die Sperrung
  99. vornimmt, diese DatensΣtze editieren kann, solange sie nicht wieder frei-
  100. gegeben werden. Bitte beachten Sie, da▀ auch hier jeder Datensatz eindeutig
  101. identifizierbar sein mu▀.
  102.  
  103. 4. Record-Locking-Routinen und sonstige Deklarationen
  104. -----------------------------------------------------
  105.  
  106. Im folgenden finden Sie die Deklarationen der Record-Locking-Routinen
  107. sowie die Deklarationen der globalen Variablen und Konstanten (Modul
  108. GLOBALS.BAS).
  109.  
  110. ' Status-Konstanten
  111.  
  112. Global Const st_No_Error = 0            ' kein Fehler
  113. Global Const st_Record_Not_Locked = 0   ' Datensatz ist nicht gesperrt
  114. Global Const st_DOS_Error = 1           ' DOS-Fehler (Details -> globale
  115.                                           Variable glb_Last_DOS_Error)
  116. Global Const st_No_File_Name = 2        ' Name der Record-Locking-
  117.                                           Verwaltungsdatei fehlt
  118. Global Const st_No_User_Name = 3        ' Username fehlt
  119. Global Const st_Max_Users = 4           ' max. Anzahl User erreicht
  120. Global Const st_File_Destroyed = 5      ' Record-Locking-Verwaltungsdatei
  121.                                           ist zerst÷rt
  122. Global Const st_User_Not_Found = 6      ' User nicht gefunden
  123. Global Const st_No_Table_Name = 7       ' Name der Datenbank-Tabelle bzw. 
  124.                                           Abfrage fehlt
  125. Global Const st_Max_Tables = 8          ' max. Anzahl Tabellen erreicht
  126. Global Const st_Lock_By_Same = 9        ' Datensatz vom akt. Benutzer ge-
  127.                                           sperrt; keine automatische
  128.                                           Entsperrⁿberwachung oder Zeitmarke 
  129.                                           noch nicht ⁿberschritten
  130. Global Const st_Lock_By_Others = 10     ' Datensatz von einem anderem User 
  131.                                           gesperrt; keine automatische 
  132.                                           Entsperrⁿberwachung oder Zeitmarke 
  133.                                           noch nicht ⁿberschritten
  134. Global Const st_Lock_By_Same_Out = 11   ' Datensatz vom akt. Benutzer ge-
  135.                                           sperrt; Zeitmarke fⁿr die Sperrung 
  136.                                           ⁿberschritten, Entsperrung wird 
  137.                                           empfohlen
  138. Global Const st_Lock_By_Others_Out = 12 ' Datensatz von einem anderem User 
  139.                                           gesperrt; Zeitmarke fⁿr die Sper-
  140.                                           rung ⁿberschritten, Entsperrung 
  141.                                           wird empfohlen
  142. Global Const st_Max_Records = 13        ' max. Anzahl sperrbarer DatensΣtze 
  143.                                           erreicht
  144. Global Const st_Table_Not_Found = 14    ' Datenbank-Tabelle bzw. Abfrage 
  145.                                           nicht gefunden
  146. Global Const st_Record_Not_Found = 15   ' Datensatz nicht gefunden
  147.  
  148. ' Sperrmethoden-Konstanten
  149.  
  150. Global Const lock_by_Select = 0 ' Lock-by-Select (Sperren bei Datensatz-
  151.                                   Selektion)
  152. Global Const lock_by_Edit = 1   ' Lock-by-Edit (Sperren bei Beginn des Edi-
  153.                                   tiervorgangs eines Datensatzes)
  154.  
  155. ' Globale Variablen
  156.  
  157. Global glb_Last_Status As Integer    ' letzter Status eines DLL-
  158.                                        Funktionsaufrufes
  159. Global glb_Last_DOS_Error As Integer ' Code des letzten DOS-Fehlers
  160.  
  161. Global glb_Lock_File_Name As String  ' Name der Record-Locking-
  162.                                        Verwaltungsdatei inkl. Pfad
  163. Global glb_User_Name As String       ' Name des akt. Benutzers
  164. Global glb_Lock_Mode As Integer      ' Sperrmethode
  165.  
  166. '============================================================
  167. ' Routine : Clear_Table
  168. '============================================================
  169. ' Aufgabe : L÷scht einen Tabellen/Abfragen-Eintrag aus der Re-
  170. '           cord-Locking-Verwaltungsdatei inkl. aller zugeh÷ri-
  171. '           gen gesperrten DatensΣtze
  172. ' Eingabe : Table_Name = Name der Datenbank-Tabelle bzw. Abfrage
  173. '                        (max. 40 Zeichen)
  174. ' Ausgabe : keine
  175. ' Info    : Fⁿr den internen Aufruf der entsprechenden DLL-Funk-
  176. '           tion wird die globale Variable glb_Lock_File_Name
  177. '           benutzt.
  178. '           Status und evtl. DOS-Fehler k÷nnen ⁿber die globalen
  179. '           Variablen glb_Last_Status und glb_Last_DOS_Error
  180. '           abgefragt werden.
  181. '------------------------------------------------------------
  182. Sub Clear_Table (Table_Name As String)
  183.  
  184. '============================================================
  185. ' Routine : Done_Locking
  186. '============================================================
  187. ' Aufgabe : Beendet das Record-Locking-System. Alle vom akt.
  188. '           Benutzer gesperrten DatensΣtze werden entsperrt.
  189. ' Eingabe : keine
  190. ' Ausgabe : keine
  191. ' Info    : Fⁿr den internen Aufruf der entsprechenden DLL-Funk-
  192. '           tion werden die globalen Variablen glb_Lock_File_Name
  193. '           und glb_User_Name benutzt.
  194. '           Status und evtl. DOS-Fehler k÷nnen ⁿber die globalen
  195. '           Variablen glb_Last_Status und glb_Last_DOS_Error
  196. '           abgefragt werden.
  197. '------------------------------------------------------------
  198. Sub Done_Locking ()
  199.  
  200. '============================================================
  201. ' Routine : Get_Lock_Date
  202. '============================================================
  203. ' Aufgabe : Liefert das Sperrdatum eines Datensatzes in Form
  204. '           eines formatierten Strings zurⁿck, falls der Daten-
  205. '           satz gesperrt ist. Ist der Datensatz nicht gesperrt
  206. '           oder ein Fehler aufgetreten, so wird ein leerer
  207. '           String zurⁿckgeliefert.
  208. ' Eingabe : Table_Name = Name der Datenbank-Tabelle bzw. Abfrage
  209. '                        (max. 40 Zeichen)
  210. '           Record_ID  = Datensatz-ID (mu▀ >= 0 sein)
  211. ' Ausgabe : keine
  212. ' Return  : Sperrdatum; Format: "DD.MM.YYYY" bzw. leerer String
  213. ' Info    : Eine Sperrung liegt auch vor, wenn die evtl. ein-
  214. '           gestellte Zeitmarke (Lock-Timeout) fⁿr die automa-
  215. '           tische Entsperrⁿberwachung bereits ⁿberschritten
  216. '           ist. Dies jedoch kann mit Hilfe der Funktion
  217. '           Is_Record_Locked abgefragt werden.
  218. '------------------------------------------------------------
  219. Function Get_Lock_Date (Table_Name As String, Record_ID As Long) As String
  220.  
  221. '============================================================
  222. ' Routine : Get_Lock_Mode
  223. '============================================================
  224. ' Aufgabe : Liefert das Sperrmethode, die fⁿr den akt. Benutzer
  225. '           gilt. Ist ein Fehler aufgetreten, so wird der Wert
  226. '           -1 zurⁿckgeliefert.
  227. ' Eingabe : keine
  228. ' Ausgabe : keine
  229. ' Return  : Sperrmethode: 0 = Lock-by-Select (Sperren bei Daten-
  230. '                             satz-Selektion)
  231. '                         1 = Lock-by-Edit (Sperren bei Beginn des
  232. '                             Editiervorgangs eines Datensatzes)
  233. '------------------------------------------------------------
  234. Function Get_Lock_Mode () As Integer
  235.  
  236. '============================================================
  237. ' Routine : Get_Lock_Seconds
  238. '============================================================
  239. ' Aufgabe : Liefert die Sperrzeit fⁿr einen gesperrten Datensatz
  240. '           in Sekunden (wird ab dem Zeitpunkt der Sperrung ge-
  241. '           rechnet). Ist der Datensatz nicht gesperrt oder
  242. '           Fehler aufgetreten, so wird der Wert 0 zurⁿckgelie-
  243. '           fert.
  244. ' Eingabe : Table_Name = Name der Datenbank-Tabelle bzw. Abfrage
  245. '                        (max. 40 Zeichen)
  246. '           Record_ID  = Datensatz-ID (mu▀ >= 0 sein)
  247. ' Ausgabe : keine
  248. ' Return  : Sperrzeit in Sekunden
  249. '------------------------------------------------------------
  250. Function Get_Lock_Seconds (Table_Name As String, Record_ID As Long) As Long
  251.  
  252. '============================================================
  253. ' Routine : Get_Lock_Time
  254. '============================================================
  255. ' Aufgabe : Liefert die Sperrzeit eines Datensatzes in Form
  256. '           eines formatierten Strings zurⁿck, falls der Daten-
  257. '           satz gesperrt ist. Ist der Datensatz nicht gesperrt
  258. '           oder ein Fehler aufgetreten, so wird ein leerer
  259. '           String zurⁿckgeliefert.
  260. ' Eingabe : Table_Name = Name der Datenbank-Tabelle bzw. Abfrage
  261. '                        (max. 40 Zeichen)
  262. '           Record_ID  = Datensatz-ID (mu▀ >= 0 sein)
  263. ' Ausgabe : keine
  264. ' Return  : Sperrzeit; Format: "HH:MM:SS" bzw. leerer String
  265. ' Info    : Eine Sperrung liegt auch vor, wenn die evtl. ein-
  266. '           gestellte Zeitmarke (Lock-Timeout) fⁿr die automa-
  267. '           tische Entsperrⁿberwachung bereits ⁿberschritten
  268. '           ist. Dies jedoch kann mit Hilfe der Funktion
  269. '           Is_Record_Locked abgefragt werden.
  270. '------------------------------------------------------------
  271. Function Get_Lock_Time (Table_Name As String, Record_ID As Long) As String
  272.  
  273. '============================================================
  274. ' Routine : Get_Lock_Timeout
  275. '============================================================
  276. ' Aufgabe : Liefert die fⁿr einen gesperrten Datensatz einge-
  277. '           stellte Zeitmarke fⁿr die automatische Entsperrⁿber-
  278. '           wachung zurⁿck. Der Wert 0 bedeutet keine automati-
  279. '           sche Entsperrⁿberwachung. Ist der Datensatz nicht
  280. '           gesperrt oder Fehler aufgetreten, so wird der Wert
  281. '           -1 zurⁿckgeliefert.
  282. ' Eingabe : Table_Name = Name der Datenbank-Tabelle bzw. Abfrage
  283. '                        (max. 40 Zeichen)
  284. '           Record_ID  = Datensatz-ID (mu▀ >= 0 sein)
  285. ' Ausgabe : keine
  286. ' Return  : Lock-Timeout in Sekunden
  287. '------------------------------------------------------------
  288. Function Get_Lock_Timeout (Table_Name As String, Record_ID As Long) As Integer
  289.  
  290. '============================================================
  291. ' Routine : Get_Lock_User
  292. '============================================================
  293. ' Aufgabe : Liefert den Namen des Benutzers zurⁿck, der den an-
  294. '           gegebenen Datensatz gesperrt hat. Ist der Datensatz
  295. '           nicht gesperrt oder ein Fehler aufgetreten, so wird
  296. '           ein leerer String zurⁿckgeliefert.
  297. ' Eingabe : Table_Name = Name der Datenbank-Tabelle bzw. Abfrage
  298. '                        (max. 40 Zeichen)
  299. '           Record_ID  = Datensatz-ID (mu▀ >= 0 sein)
  300. ' Ausgabe : keine
  301. ' Return  : Benutzername (String) bzw. leerer String
  302. ' Info    : Eine Sperrung liegt auch vor, wenn die evtl. ein-
  303. '           gestellte Zeitmarke (Lock-Timeout) fⁿr die automa-
  304. '           tische Entsperrⁿberwachung bereits ⁿberschritten
  305. '           ist. Dies jedoch kann mit Hilfe der Funktion
  306. '           Is_Record_Locked abgefragt werden.
  307. '           Status und evtl. DOS-Fehler k÷nnen ⁿber die globalen
  308. '           Variablen glb_Last_Status und glb_Last_DOS_Error
  309. '           abgefragt werden.
  310. '------------------------------------------------------------
  311. Function Get_Lock_User (Table_Name As String, Record_ID As Long) As String
  312.  
  313. '============================================================
  314. ' Routine : Get_Login_Date
  315. '============================================================
  316. ' Aufgabe : Liefert das Login-Datum des akt. Benutzers in Form
  317. '           eines formatierten Strings. Ist der Benutzer nicht
  318. '           im System eingeloggt oder ist ein Fehler aufgetreten,
  319. '           so wird ein leerer String zurⁿckgeliefert.
  320. ' Eingabe : keine
  321. ' Ausgabe : keine
  322. ' Return  : Login-Datum; Format: "DD.MM.YYYY" bzw. leerer String
  323. '------------------------------------------------------------
  324. Function Get_Login_Date () As String
  325.  
  326. '============================================================
  327. ' Routine : Get_Login_Seconds
  328. '============================================================
  329. ' Aufgabe : Liefert die Login-Zeit des akt. Benutzers in Sekun-
  330. '           den. Ist der Benutzer nicht im System eingeloggt
  331. '           oder ist ein Fehler aufgetreten, so wird 0 zurⁿck-
  332. '           geliefert.
  333. ' Eingabe : keine
  334. ' Ausgabe : keine
  335. ' Return  : Login-Zeit in Sekunden
  336. ' Info    : Status und evtl. DOS-Fehler k÷nnen ⁿber die globalen
  337. '           Variablen glb_Last_Status und glb_Last_DOS_Error
  338. '           abgefragt werden.
  339. '------------------------------------------------------------
  340. Function Get_Login_Seconds () As Long
  341.  
  342. '============================================================
  343. ' Routine : Get_Login_Time
  344. '============================================================
  345. ' Aufgabe : Liefert die Login-Zeit des akt. Benutzers in Form
  346. '           eines formatierten Strings. Ist der Benutzer nicht
  347. '           im System eingeloggt oder ist ein Fehler aufgetreten,
  348. '           so wird ein leerer String zurⁿckgeliefert.
  349. ' Eingabe : keine
  350. ' Ausgabe : keine
  351. ' Return  : Login-Zeit; Format: "HH:MM:SS" bzw. leerer String
  352. '------------------------------------------------------------
  353. Function Get_Login_Time () As String
  354.  
  355. '============================================================
  356. ' Routine : Init_Locking
  357. '============================================================
  358. ' Aufgabe : Initialisiert das Record-Locking-System.
  359. ' Eingabe : File_Name = Name der Record-Locking-Verwaltungsdatei
  360. '           User_Name = Benutzername (max. 20 Zeichen)
  361. '           Lock_Mode = Sperrmethode: 0 = Lock-by-Select (Sper-
  362. '                                         ren bei Datensatz-Se-
  363. '                                         lektion)
  364. '                                     1 = Lock-by-Edit (Sperren
  365. '                                         bei Beginn des Editier-
  366. '                                         vorgangs eines Daten-
  367. '                                         satzes)
  368. ' Ausgabe : keine
  369. ' Info    : File_Name, User_Name und Lock_Mode werden nach Auf-
  370. '           ruf dieser Routine in entsprechenden globalen Va-
  371. '           riablen gespeichert, die dann in anderen Routinen
  372. '           benutzt werden. Auf diese Weise bleiben dem Prog-
  373. '           rammierer Eingabeparameter erspart.
  374. '           Status und evtl. DOS-Fehler k÷nnen ⁿber die globalen
  375. '           Variablen glb_Last_Status und glb_Last_DOS_Error
  376. '           abgefragt werden.
  377. '------------------------------------------------------------
  378. Sub Init_Locking (File_Name As String, User_Name As String, Lock_Mode As Integer)
  379.  
  380. '============================================================
  381. ' Routine : Is_Record_Locked
  382. '============================================================
  383. ' Aufgabe : Liefert st_Record_Not_Locked zurⁿck, wenn der an-
  384. '           gegebene Datensatz nicht gesperrt ist. Ist der Da-
  385. '           tensatz gesperrt, so wird einer der folgenden Wer-
  386. '           te zurⁿckgeliefert:
  387. '           st_Lock_By_Same, st_Lock_By_Others,
  388. '           st_Lock_By_Same_Out, st_Lock_By_Others_Out
  389. '           Die Bedeutung der Konstanten ist im Deklarations-
  390. '           teil dieses Moduls erlΣutert.
  391. '           Tritt ein Fehler auf, so wird der entsprechende
  392. '           Fehlerstatus in der Variablen glb_Last_Status
  393. '           gespeichert. Handelt es sich sogar um einen DOS-
  394. '           Fehler, so wird dessen Code in der globalen Va-
  395. '           riablen glb_Last_DOS_Error vermerkt.
  396. ' Eingabe : Table_Name = Name der Datenbank-Tabelle bzw. Abfrage
  397. '                        (max. 40 Zeichen)
  398. '           Record_ID  = Datensatz-ID (mu▀ >= 0 sein)
  399. ' Ausgabe : keine
  400. ' Return  : Status (wie oben beschrieben)
  401. '------------------------------------------------------------
  402. Function Is_Record_Locked (Table_Name As String, Record_ID As Long) As Integer
  403.  
  404. '============================================================
  405. ' Routine : Is_Record_Locked_Gen
  406. '============================================================
  407. ' Aufgabe : Prⁿft, ob ein Datensatz generell gesperrt ist, d.h.
  408. '           unabhΣngig davon, welcher Benutzer ihn gesperrt
  409. '           hat und ob die Zeitmarke fⁿr die evtl. eingestell-
  410. '           te Entsperrⁿberwachung bereits ⁿberschritten ist
  411. '           oder nicht. Es wird True bzw. False (Datensatz nicht
  412. '           gesperrt) zurⁿckgeliefert.
  413. ' Eingabe : Table_Name = Name der Datenbank-Tabelle bzw. Abfrage
  414. '                        (max. 40 Zeichen)
  415. '           Record_ID  = Datensatz-ID (mu▀ >= 0 sein)
  416. ' Ausgabe : keine
  417. ' Return  : True bzw. False
  418. '------------------------------------------------------------
  419. Function Is_Record_Locked_Gen (Table_Name As String, Record_ID As Long) As Integer
  420.  
  421. '============================================================
  422. ' Routine : Lock_Record
  423. '============================================================
  424. ' Aufgabe : Sperrt einen Datensatz in einer Datenbank-Tabelle
  425. '           bzw. Abfrage. Ist der zu sperrende Datensatz bereits
  426. '           gesperrt und ist fⁿr den Datensatz eine automati-
  427. '           sche Entsperrⁿberwachung eingeschaltet, so wird ge-
  428. '           prⁿft, ob die eingestellte Zeitmarke ⁿberschritten
  429. '           ist; ggf. wird in der Variablen glb_Last_Status ver-
  430. '           merkt, da▀ der Datensatz zu entsperren ist
  431. '           (st_Lock_By_Same_Out, st_Lock_By_Others_Out). Ist
  432. '           der Datensatz gesperrt und entweder keine Entsperr-
  433. '           ⁿberwachung eingestellt oder die Zeitmarke noch
  434. '           nicht ⁿberschritten, so hat die Variable glb_Last_Status
  435. '           den Wert st_Lock_By_Same bzw. st_Lock_By_Others.
  436. ' Eingabe : Table_Name = Name der Datenbank-Tabelle bzw. Abfrage
  437. '                        (max. 40 Zeichen)
  438. '           Record_ID  = Datensatz_ID (mu▀ >= 0 sein)
  439. '           Timeout    = Zeitvorgabe fⁿr die automatische Ent-
  440. '                        sperrⁿberwachung (in Sekunden; 0 bedeu-
  441. '                        tet keine automatische Entsperrⁿberwa-
  442. '                        chung)
  443. ' Ausgabe : keine
  444. '------------------------------------------------------------
  445. Sub Lock_Record (Table_Name As String, Record_ID As Long, Timeout As Integer)
  446.  
  447. '============================================================
  448. ' Routine : Unlock_Record
  449. '============================================================
  450. ' Aufgabe : Entsperrt den angegebenen Datensatz unabhΣngig da-
  451. '           von, welcher Benutzer ihn gesperrt hat.
  452. ' Eingabe : Table_Name = Name der Datenbank-Tabelle bzw. Abfrage
  453. '                        (max. 40 Zeichen)
  454. '           Record_ID  = Datensatz-ID (mu▀ >= 0 sein)
  455. ' Ausgabe : keine
  456. ' Info    : Fⁿr den internen Aufruf der entsprechenden DLL-Funk-
  457. '           tion wird die globale Variable glb_Lock_File_Name
  458. '           benutzt.
  459. '           Status und evtl. DOS-Fehler k÷nnen ⁿber die globalen
  460. '           Variablen glb_Last_Status und glb_Last_DOS_Error
  461. '           abgefragt werden.
  462. '------------------------------------------------------------
  463. Sub Unlock_Record (Table_Name As String, Record_ID As Long)
  464.