Chương 6 : Các vấn đề về cách bảo quản tài
liệu _ Advance Data Access Issues
Database, nơi chứa những tài liệu mà chúng ta giao cho nó gìn giử. Ðơn giản
như vậy đó !. Nhưng nếu ai cũng vào được để đánh cắp hay sửa đổi chi tiết thì
sao ? Chuyện sẽ trở nên phức tạp liền. Cho nên trong phần này chúng tôi sẽ nói
làm sao để giử gìn tài liệu tốt hơn.
Chương 6 _ Phần 1 _ Ðoạn 1 : Understanding SQL Server Security
Thế nào là SQL Server Security ? Khi các bạn viết ứng dụng cho client, các bạn
phải kế hoạch ứng dụng đó được nối liền với Server như thế nào ? Ai có thể vào
được Database (who can access Database ?), làm sao để vào Database (how to
access Database ?). SQL Server giúp các bạn làm việc này bảo bằng 2 modes
• Standard security mode : Người xử dụng không cần phải phụ thuộc vào hệ
thống Windows NT
• Integrated security mode : Người xử dụng phải ở trong hệ thống Windows
NT
Standard security mode là default security mode của SQL Server. Standard
mode xử dụng SQL Server security model cho mỗi connection vào trong Database.
Ở những nơi gọi là non-trusted environments (không an toàn) như internet chẳng
hạn, thì standard mode giúp các bạn việc thông thương với Database dể dàng. Với
standard mode, người xử dụng không cần phải thông qua Windows NT Server trước
khi được nối liền với Database. Người xử dụng thông qua SQL Server trên hệ thống
internet và phải có các security features (các điều kiện để bước vào kho như
userID, password, chổ nào trong kho...). System Administrator hoặc là Database
Owner (người chịu trách nhiệm gìn giử hệ thống network và tài liệu) làm các userID,
password, nhóm người xử dụng cho mỗi Database trong Server, để khi người xử
dụng muốn vào kho tài liệu để làm việc, họ phải thỏa mản các điều kiện vào kho,
userID và password phải trùng hợp... Do đó, khi viết ứng dụng các bạn phải làm
một trong 3 việc sau đây :
1. Hard-code all connection information. Viết code cho tất cả các connection.
2. Prompt the user for some information and hard-code the rest. Yêu cầu người xử
dụng điền một số chi tiết và viết các phần còn lại.
.Open
End With
End Sub
Chương 6 _ Phần 2 : Xử dụng Cursor
Khi một Recordset object được tạo thành, thì theo mục đích của ứng dụng, một
số tài liệu nhất định sẽ được xử dụng thường xuyên dựa trên SQL query statement.
Số tài liệu này gọi là nhóm tài liệu. Nhóm tài liệu được xử dụng thường xuyên này
gọi là cursor, bởi vì nó biểu hiện một nơi nhất định nào đó trong Database mà ứng
dụng xài thường xuyên. Cursor không hẳn nghĩa là nơi mà khi bạn bấm chuột hay
bấm nút Enter trên màn ảnh máy vi tính thì công việc đó sẽ được thi hành. Như vậy,
với SQL statement, cursor chúng ta sẽ hiểu là một nhóm tài liệu được xử dụng
thường xuyên (specific records based on a SQL query)
Có 4 thể loại cursor (cursor type) và 2 nơi chứa đựng (cursor location). Mời
các bạn theo dỏi, chúng tôi sẽ trình bày tiếp sau đây.
Chương 6 _Phần 2 _ Ðoạn 1 : Choosing Cursor Type
Bốn thể loại cursor trong recordset object là : forward-only, static, dynamic và
keyset. Hai nơi mà cursor có thể đặt vào là Server side và Client side. Mời các
bạn theo dỏi các tính chất của thể loại và nơi chốn của cursor sau đây, để về
sau, các bạn có thể quyết định nên xử dụng thể loại nào ?
Forward-Only Cursors : là thể loại đương nhiên có sẳn trong recordset
object (default recordset cursor type). Trong thể loại này chứa đựng MoveNext
method khi bạn tìm đọc tài liệu. Và vì thế cho nên khi các bạn thêm vào các
method khác để tìm đọc tài liệu thì sẽ bị run-time errors. Thể loại này thích hợp
cho trường hợp bạn có số lượng nhỏ tài liệu mà thôi. Keyword cho thể loại này
là adOpenForwardOnly. Ðây là click-event biểu diển việc làm là khi mở bản tài
liệu ra, thể loại Forward-Only Cursor đồng thời có mặt trong recordset object :
Sub cmdOpenRecordset_Click()
Dim rsPublishers As Recordset
Dynamic cursor : Dynamic cursor được xử dụng nhiều nhất trong các thể loại
cursors. Bởi vì dynamic cursor có thể cập nhật hóa các chi tiết trong bản tài liệu
ngay lập tức sau khi có sự thay đổi. Thí dụ như các bạn làm việc với 2 records
trong một recordset, một trong 2 chi tiết đó bị xóa bỏ đi và chi tiết khác thì được
thay đổi, thì dynamic cursor sẽ trình bày cho các bạn thấy một chi tiết mới đã
được cập nhật hóa và các bạn sẽ không thấy chi tiết đã xóa bỏ đi rồi. Do đó, thể
loại dynamic cursor rất thích hợp cho các ứng dụng làm việc với các chi tiết cần
phải cập nhật ngay tức thì ( từ chuyên nghiệp gọi là live Data). Keyword cho thể
loại này là adOpenDynamic. Sau đây là click event trình bày làm sao để cài đặt
dynamic cursor vào trong recordset.
Sub cmdOpenRecordset_Click()
Dim rsPublishers As Recordset
Set rsPublishers = New Recordset
With rsPublishers
.Open "SELECT pub_id FROM Publishers",
cnStateUBookstore, _
adOpenDynamic
End With
End Sub Keyset cursor : keyset cursor là thể loại nằm giửa static và dynamic cursor.
Giống như static cursor, keyset cursor không phải lúc nào cũng chấp nhận sự
thay đổi của tài liệu, và chi tiết mới trong bản tài liệu sẽ không được trình bày
cho tới khi bản tài liệu được mở trở lại sau khi đóng. Giống dynamic cursor là
keyset cursor cập nhật ngay những thay đổ trong recorset. Các bạn xử dụng thể
loại này khi các bạn cần theo dỏi các chi tiết mà mình phải sửa đổi nhưng không
cần thiết phải nhìn thấy các record bị xóa đi hay thêm vào. Keyword cho thể loại
End With
End Sub
Client-side Cursors : Client-side cursors sẽ được tạo nên nếu các bạn hoán
chuyển CursorLocation property của Recordset object thành adUseClient. Sau
đó, các dử kiện trong recordset sẽ được cất giử ở phía client. Lợi ích của Client-
Cursors là các bạn vẫn có thể làm việc với recordset mà không cần phải thông
thương với Database Mainframe (Server). Ðiểm bất lợi là Client-cursors chỉ làm việc
được với thể loại Static cursor type mà thôi. Và nếu dử kiện quá lớn (size of
recordset) sẽ giới hạn rất nhiều trong việc cập nhật hóa tư liệu.
Do đó, Client-side cursor chỉ thích hợp cho ứng dụng mà nó làm việc với số lượng
nhỏ tư liệu mà thôi. Sau đây là click event trình bày làm sao để có cursors ở bên
phía client.
Sub cmdOpenRecordset_Click()
Dim rsStudents As Recordset
Set rsStudents = New Recordset
With rsStudents
.CursorLocation = adUseClient
.Open "SELECT StudentID FROM Students",
cnStateUBookstore
End With
End Sub
Chương 6 _ Phần 3 : Enforcing Data Integrity
Khi các bạn viết ứng dụng, các tư liệu phải được điều hành một cách hoàn chỉnh.
Ứng dụng của bạn có thực tiển hay không đều lệ thuộc vào cách điều hành tư liệu.
Từ chuyên nghiệp trong Visual Basic gọi là Data integrity. Và làm sao để điều hành
và quản lý tốt tài liệu, chúng tôi sẽ lần lượt trình bày cùng các bạn 4 vấn đề sau
đây :
1. Using Record Locking. Tài liệu được khóa bằng cách nào ?
2. Using Database Transactions. Cách trao đổi dử kiện.
3. SQL Server Data Integrity Features. Những chuyện mà SQL Server có