Logo of VovisoftMastering Visual Basic 6

Chương 5 _Phần 5 _Đoạn 1 : Using Execute method  

          Thời đại mới hiện nay, các thông tin đều đổi mới một cách nhanh chóng và mau lẹ.  V́ nếu không, sẽ không bắt kịp thời đại.  Do đó việc cập nhật hóa các tài liệu mới (c̣n gọi là update Data) trong ứng dụng là một bộ phận không thể thiếu.  Để làm việc này, các bạn có thể xử dụng SQL statement hoặc Recordset Object.

          Bạn có thể xử dụng Connection Object hoặc là Command Object để tiến hành các SQL statements.  Nhắc lại SQL là Structured Querry Language, là một ứng dụng hay là nơi cất giử tài liệu rất hữu hiệu.  Bạn ở bất cứ nơi nào trên trái đất, nếu ứng dụng đó gắn liền với kho SQL, th́ các bạn vẫn có thể t́m đọc các tài liệu mà bạn muốn một cách dể dàng.  Mời các bạn cùng chúng tôi đọc tiếp làm sao để xử dụng Execute method (phương pháp tiến hành SQL statement).  Chúng tôi lần lượt tŕnh bày cùng các bạn làm sao để inserting (thêm dử kiện vào kho), updating (cập nhật hóa dử kiện), deleting Data (xóa bỏ dử kiện).

    Inserting new record : Thêm chi tiết mới vào trong kho nhu liệu.  Sau khi các bạn đă hoàn thành User Interface rồi, việc kế tiếp là các bạn viết code cho nó.  Thí dụ như trong user interface là 3 textboxes với họ và tên của học sinh cùng với những phụ chú cho học sinh đó,  th́ để tŕnh bày các chi tiết đó, trong click event code, các bạn sẽ thấy những hàng như sau : ( Ghi chú : command INSERT INTO có hiệu quả trong SQL language hay SQL SERVER.)

Sub cmdAddRecord_Click()

         ' Declare and instantiate the object variable

         Dim cnStateUBookstore As Connection

         Dim sSQL As String

         Set cnStateUBookstore = New Connection

         ' Establish a connection

         With cnStateUBookstore

                  .Provider = "SQLOLEDB"

                  .ConnectionString = "User ID=sa;" & _

                                      "Data Source=MSERIES1;" & _

                                      "Initial Catalog=StateUBookstore"

                  .Open

         End With

         ' Build the SQL command, xử dụng INSERT INTO mệnh lệnh

         sSQL = "INSERT INTO Students(First_Name, Last_Name) " & "VALUES ('Lani', 'Ota')"

         ' Execute the SQL command, cho phép tiến hành

         cnStateUBookstore.Execute sSQL

End Sub

    Update Record : Đồng thời với Inserting, các bạn phải cất giử lấy chi tiết đó sau khi đă thêm vào.  Cho nên việc cập nhật hóa là chuyện tiếp theo(command là UPDATE).  Để làm việc này, mời các bạn hăy xem Updating click event sau đây :

Sub cmdUpdateRecord_Click()

         ' Declare and instantiate the object variable

         Dim cnStateUBookstore As Connection

         Dim sSQL As String

         Set cnStateUBookstore = New Connection

         ' Establish a connection

         With cnStateUBookstore

                  .Provider = "SQLOLEDB"

                  .ConnectionString = "User ID=sa;" & _

                                      "Data Source=MSERIES1;" & _

                                      "Initial Catalog=StateUBookstore"

                  .Open

         End With

         ' Build the SQL command, xữ dụng mệnh lệnh UPDATE, cập nhật hóa tài liệu

         sSQL = "UPDATE Students SET MajorID = 4 WHERE StudentID = 3"        

         ' Execute the SQL command

         cnStateUBookstore.Execute sSQL

End Sub

    Delete Record : Kế tiếp nữa là nếu các bạn lở làm sai điều ǵ, th́ phải xóa bỏ đi(command là DELETE FROM).  Mời các bạn xem deleting click event sau đây :

Sub cmdDeleteRecord_Click()

         ' Declare and instantiate the object variable

         Dim cnStateUBookstore As Connection

         Dim sSQL As String

         Set cnStateUBookstore = New Connection

         ' Establish a connection

         With cnStateUBookstore

                  .Provider = "SQLOLEDB"

                  .ConnectionString = "User ID=sa;" & _

                                      "Data Source=MSERIES1;" & _

                                      "Initial Catalog=StateUBookstore"

                  .Open

         End With

         ' Build the SQL command, xử dụng mệnh lệnh DELETE, xóa bỏ chi tiết không muốn giử

         sSQL = "DELETE FROM Books WHERE BookID = 3"    

         ' Execute the SQL command, cho phép tiến hành

         cnStateUBookstore.Execute sSQL

End Sub

 

Chương 5 _Phần 5 _ Đoạn 2 : Using Recordset to add, update and delete a record

    Một phương pháp khác dùng để điều hành các chi tiết trong kho giử tài liệu là xử dụng recordset object.  Điều khác biệt với execute method là Recordset chỉ có thể thay đổi các chi tiết từng lần một, trong khi execute method th́ có thể thay đổi các chi tiết cùng một lúc và cập nhật hóa một lần một.

    Adding a new record : Thêm vào chi tiết mới cho Recordset.  Có 2 bước để làm việc này: Tạo thành một record mới để thêm vào và ghi nhớ nó vào trong recordset.  Từ chuyên nghiệp trong tiếng Anh nói là first create the new record to be added, then update it.  Mời các bạn theo dỏi diển biến quá tŕnh thêm chi tiết vào kho tài liệu bằng cách xử dụng recordset với chúng tôi :

Dim rsStudents As Recordset

Set rsStudents = New Recordset  

' open a recordset, xác định cursorType và LockType để recordset có khả năng tiếp nhận chi tiết mới.

rsStudents.CursorType = adOpenKeyset

rsStudents.LockType = adLockOptimistic

rsStudents.Open "SELECT First_Name, Last_Name FROM Students", cnStateUBookstore

 

' add a new record, thêm chi tiết mới vào recordset bằng AddNew method.

rsStudents.AddNew

' Xử dụng phương pháp Update để bảo quản chi tiết mới vừa thêm vào

rsStudents.Update

    Deleting a record : Để xóa bỏ đi một chi tiết trong bản tài liệu, các bạn có thể xử dụng Delete method trong recordset object.  Không giống như inserting a new record, các bạn chỉ cần làm một bước mà thôi.  Mời các bạn cùng chúng tôi viết code để xóa bỏ đi một chi tiết trong bản tài liệu.

rsStudents.Delete

'Xử dụng Delete method để xóa bỏ

rsStudents.MoveNext

'Khiến cho bản tài liệu di chuyển tới chi tiết kế tiếp

If rsStudents.EOF Then

 rsStudents.MoveLast

End If

Chương 5_ Phần 6 : Using Disconnected Data

    Trong phần này, chúng tôi sẽ tŕnh bày cùng các bạn cách tạo thành disconnected recordset Object.  Trên mạng lưới vi tính (networking) có 2 phần cơ bản : Server và Client.  Nhắc lại là khi chúng ta viết ứng dụng cho nhiều người xử dụng trên hệ thống mạng lưới, chúng ta nên biết là kho nhu liệu phải có khả năng tŕnh bày các chi tiết mà họ yêu cầu, trên Server và Client.  Do đó trong trường hợp Server không hoạt động (từ chuyên nghiệp là offline) th́ việc điều chỉnh tài liệu sẽ gặp nhiều trở ngại.  

    ADO giúp các bạn làm việc này : Khi bạn không có nối liền với Sever, nhưng các bạn vẫn có thể điều chỉnh các chi tiết trong kho nhu liệu.  Disconnected recordset object giúp bạn làm việc đó, mặc dù connection object trong ứng dụng của bạn không có online ( live connection).   Rồi sau đó, khi sự nối liền được lập lại, tất cả các chi tiết được cập nhật vá cất giử (update and save).  Để làm việc này, chuyện đầu tiên là chúng ta phải thành lập bản tài liệu (recordset) ở bên phía Client (client side).  Mời các bạn cùng theo dỏi làm sao để có bản tài liệu bên phía Client.

Chương 5 _Phần 6 _Đoạn 1 : Creating a Disconnected Recordset Object

Thành lập Client-side Recordset.  Code cho click event :

Sub cmdConnect_Click()

         ' Declare and instantiate object variables, chỉ rỏ kho nhu liệu và bản tài liệu nào trong kho

         Dim cnStateUBookstore As Connection

         Dim rsStudents As Recordset

 

         Set cnStateUBookstore = New Connection

         Set rsStudents = New Recordset

        

         ' Establish a connection, tiến hành sự nối liền với các chi tiết cụ thể

         With cnStateUBookstore

                  .Provider = "SQLOLEDB"

                  .ConnectionString = "User ID=sa;" & _

                                      "Data Source=MSERIES1;" & _

                                      "Initial Catalog=StateUBookstore"

                  .Open

         End With

        

         ' Build a recordset, tạo thành bản tài liệu cho client.

         With rsStudents

                  ' Specify the cursor's location

                  .CursorLocation = adUseClient

                  .LockType = adLockBatchOptimistic

                  .Open "SELECT First_Name, Last_Name FROM Students", _

                         cnStateUBookstore

         End With

End Sub  

 

Disconnecting from the Data Source _ Tách rời khỏi Data Source (Tài liệu mà các bạn đang làm việc với nó) Hàng code truyền mệnh lệnh adUseClient parameter cùng với Open method khiến cho phía bên người xử dụng _Client_ có một bản sao của bản tài liệu (như giải thích ở trên).  Khi đă có bản sao rồi th́ bạn có thể tách rời khỏi nơi giử tài liệu.  Bằng cách là bạn viết code cho tính chất ActiveConnection thành Nothing.  Sau đó th́ đóng (close) bản tài liệu (Data Source) lại.  Và đây là 2 hàng code dùng để tách rời khỏi nơi giử tài liệu.

 

    Set rsStudents.ActiveConnection = Nothing

    cnStateUBookstore.Close

 

Making Offline Changes : Điều chỉnh các chi tiết mà không cần phải nối liền vào bản tài liệu.  Chi tiết mới được thêm vào bằng phương pháp AddNew,  bỏ đi chi tiết không cần thiết th́ xử dụng Delete method, các chi tiết đă có sẳn vẫn có thể thay đổi được bằng phương pháp Update...Và tất cả những việc làm trên sẽ được cập nhật hóa tức th́ khi ứng dụng của bạn nối liền với Mainframe Database (SQL Server) trở lại.

Ghi nhớ : Nếu cùng một chi tiết (same record) mà phải điều chỉnh bởi nhiều người xử dụng cùng một lúc, sẽ gây ra sự cố kỷ thuật ( Data conflict)

 

Chương 5 _Phần 6 _Đoạn 2 : Persisting a Recordset

 

    Xử dụng Save method để bảo quản tài liệu và các chi tiết trong bản tài liệu cũng được ǵn giử trong kho nhu liệu.  Tiến tŕnh này, từ chuyên nghiệp gọi là persisting data.  Việc làm này, giúp cho người xử dụng có thể tắt đi ứng dụng và sau đó mở trở lại mà không cần phải nối liền vào SQL Server.  Do đó, persisting data rất là hữu ích cho disconnected recordset object, khi mà connection và ứng dụng ở Server đă đóng lại rồi nhưng recordset (bản tài liệu trong kho nhu liệu) vẫn c̣n có thể làm việc được ở phía client side.Code cho việc này viết là adPersistADTG

    Trước hết, chúng ta xử dụng save method để đưa tài liệu vào trong máy của người xử dụng ( từ chuyên nghiệp gọi là local computer).  Dưới đây là code viết để bảo quản tài liệu trong máy của người xử dụng :

rsStudents.Save "c:\studentinfo.dat", adPersistADTG

    Rồi sau đó khi các bạn nối liền với Server, các tài liệu ở trong local computer sẽ được đưa vào máy chính trên Server.  Việc làm này, gọi là giao trả tài liệu ( từ chuyên nghiệp gọi là Retrieving Persisted Data.  Xử dụng Open method các bạn có thể làm được việc Retrieving Persisted Data.  Dưới đây là code dùng để giao trả tài liệu cho bản tài liệu (recordset)

rsStudents.Open "c:\studentinfo.dat"

Chương 5 _Phần 6 _Đoạn 3 : RECONNECTING TO A DATA SOURCE

    Sau khi các bạn cắt đi sự nối liền với kho nhu liệu, các bạn có thể nối trở lại và tất cả những thay đổi về tài liệu sẽ được cập nhật hóa.  Những điều kiện để tạo thành một connection (nối liền) như Data Source Provider... đều phải lập lại.  Bởi v́ trước đó, các bạn cho phép Connection object bằng Nothing, cho nên tất cả các điều kiện lập thành Connection phải được lập lại.  Sau đây chúng tôi tŕnh bày cùng các bạn thao tác của Reconnecting click event :

Sub cmdReconnect_Click()

         cnStateUBookstore.Open

         rsStudents.ActiveConnection = cnStateUBookstore

End Sub

Chương 5 _ Phần 6 _ Đoạn 4 : SUBMITTING CHANGES TO A DATA SOURCE

    Như chúng ta đă thông qua ở phần trên, khi ứng dụng không có ăn thông với Mainframe Database, chúng ta vẫn có thể điều chỉnh tài liệu được như thường bằng disconnected object.  Phía Client có thể làm việc với recordset (bản tài liệu) bao nhiêu lâu cũng được trong khi ứng dụng offline (không thông thương với Data Source).

    Sending Batched Changes to the Data Source có nghĩa là cập nhật hóa tài liệu mà phía Client đă điều chỉnh,  khi ứng dụng thông thương trở lại với kho nhu liệu.  Xử dụng UpdateBatch method th́ ứng dụng của các bạn có thể cập nhật tất cả các thông tin (Data) mà client đă điều chỉnh.  Những Data được điều chỉnh ở phía client, từ chuyên nghiệp gọi là Data cached.  Sau đây là click event dùng để làm việc cập nhật các Data cached :

Sub cmdUpdateAll_Click()

         rsStudents.UpdateBatch

End Sub

    Conflict management issues là những sự cố kỷ thuật có thể xảy ra trong quá tŕnh thông thương giửa client và server.  ADO sẽ báo cáo thể loại của sự cố kỹ thuật và các bạn phải viết code để xử lư.  V́ có nhiều thể loại sự cố (chẳng hạn như sự trùng hợp khi thay đổi chi tiết trong bản tư liệu) cho nên việc phân loại sự cố ǵ ? là một trong những bước cần thiết khi bạn viết code xử lư trở ngại đó.  Mời các bạn đọc thêm “UpdateBatch Method (ADO)” trong platform SDK Help, có nhiều chi tiết về các thể loại sự cố kỹ thuật.

    Hủy bỏ mệnh lệnh cập nhật hóa tài liệu ( canceling a Batch Update) : v́ các tài liệu củ sẽ bị thay thế bằng tài liệu mới, cho nên trong ứng dụng bạn nên hỏi người xử dụng một lần trước khi UpdateBatch làm việc.  Sau đây là code để làm việc trên

Sub cmdUpdateAll_Click()

         If MsgBox("Submit all changes?", vbYesNo) = vbYes Then

                  rsStudents.UpdateBatch

         Else

                  rsStudents.CancelBatch

         End If

End Sub  

Những điều đáng ghi nhớ

Active Connections : Mỗi một connection mà bạn tạo nên, đều phải thông thương với Data Source, chẳng hạn như SQL Server, và phải thông thương với Client nữa.  Số lượng nối liền giửa client và Server có giới hạn tùy theo vào bản quyền mà Quí vị mua.  Do đó, khi nối liền với Server, các bạn nên xem xét (consider) cách xử dụng recordset. 

Xử dụng Recordset : Nếu không có yêu cầu về multiple recordsets (cùng một connection nhưng có nhiều recordset) th́ các bạn nên xử dụng Connection Object hoặc là Command Object sẽ có hiệu quả làm việc nhiều hơn là xử dụng Recordset Object.

Sorting Records : Các bạn có thể sắp xếp theo thứ tự các chi tiết trong bản tài liệu.

Updating Data : Xử dụng phương pháp AddNew hay Update để thay đổi chi tiết bản Database.  Nếu các bạn làm việc với Multiple recordset, th́ xử dụng Execute method trong Command object sẽ tốt hơn

Transactions : Là 2 việc cần phải tiến hành hoàn chỉnh.  Đó là giao đi (commit) và trả lại (roll back).  Nếu một trong hai việc đó, tiến hành không trọn vẹn sẽ không có transaction. Chẳng hạn như Data bạn đă điều chỉnh rồi cần phải cập nhật, nhưng nếu bạn cập nhật không được v́ một lư do nào đó, th́ bản tài liệu củ, vẫn giử nguyên, không thay đổi.

(...c̣n nữa...mời Quí vị xem trang tiếp theo ...)