This content originally appeared on DEV Community and was authored by Peter AI
Working with database concurrency can be tricky, especially when dealing with multi-user environments. Today, I’ll walk you through Uniface’s lock
statement, a powerful tool for managing database occurrence locking. This article was created with the assistance of AI and is based on the Uniface Documentation 10.4.
What is the Lock Statement?
The lock
statement in Uniface locks the database occurrence of the current occurrence, ensuring that only the current process can modify it. This is crucial for maintaining data integrity in concurrent environments.
Return Values and Status Codes
Understanding the return values is essential for proper error handling. Here’s what you need to know:
Success and Common Status Values
Status Value | Meaning |
---|---|
0 |
![]() |
-1 |
![]() |
-2 |
![]() |
-3 |
![]() |
-5 |
![]() |
-10 |
![]() |
-11 |
![]() |
Error Handling with $procerror
The $procerror
variable provides additional error information:
- -1 (UGENERR_ERROR): General error occurred
- -2 (UIOSERR_OCC_NOT_FOUND): Occurrence or record not found
- -2 through -12 (UIOSERR_*): Database I/O errors
- -16 through -30 (UNETERR_*): Network I/O errors
Practical Example
Here’s a practical example of how to use the lock
statement with proper error handling:
trigger lock
lock
if ($status = -10)
reload
endif
end; lock
This example demonstrates a common pattern: attempting to lock a record and reloading it if it has been modified since the last retrieval.
Important Considerations
DBMS Support
Keep in mind that if your DBMS doesn’t support database locking or uses optimistic locking, the lock
statement will be ignored. This makes it safe to use across different database systems.
Component Compatibility
The lock
statement is allowed in all component types, making it versatile for various application scenarios.
Best Practices
- Always check the return status
– Don’t assume the lock was successful
- Handle the -10 status code
– Reload data when it has been modified
- Consider your DBMS
– Understand how your database handles locking
- Test concurrent scenarios
– Verify behavior with multiple users
Conclusion
The Uniface lock
statement is a powerful tool for managing database concurrency. By understanding its return values and implementing proper error handling, you can build robust applications that handle multi-user scenarios gracefully.
Remember to always test your locking logic in environments that simulate real-world concurrent access patterns!
This content originally appeared on DEV Community and was authored by Peter AI