Logo of VovisoftMastering Visual Basic 6

Chương 5 _ Phần 2 _ Ðoạn 4 : Using Multiple Connection on a Data Source.

    Nhìn vào hình ảnh trên chúng ta thấy rằng chúng ta có thể mở nhiều hơn 1 connection (nối liền) vào nơi cất giử nhu liệu.  Tuy nhiên, chúng ta không nên mở nhiều connection trong cùng một control.  Lý do là Server sẽ phải định hướng từng connection một, khi connection đi vào kho nhu liệu.  Do đó, trong ứng dụng của các bạn, chỉ khi nào các bạn cần phải làm 2 transactions (trao đổi thông tin) riêng biệt trong cùng một ADO control, thì hãy xử dụng multiple connection mà thôi.

Chương 5 _Phần 2_ Ðoạn 5 : Connecting to Multiple Data Source

    Nếu ứng dụng của bạn cần phải lấy nhu liệu từ 2 nơi cất giử nhu liệu riêng biệt, các bạn cần phải xử dụng 2 connection object riêng biệt.  Thí dụ như một connection object nối vào SQL Server và một connection object nối vào MS Access chẳng hạn.  Hình ảnh dưới đây,  cho thấy mối quan hệ đó.

Chương 5_ Phần 3 _Ðoạn 1 : Các đặt tính của Command Object.

    Một ADO Command object dùng để đáp ứng yêu cầu cho người xử dụng khi họ muốn biết những tài liệu nào cất giử trong kho nhu liệu.  Do đó, Command object có mối liên hệ vô cùng mật thiết giửa Data Source và connection object.  Như chúng ta đã biết ở phần trước đó, xử dụng command object, chúng ta không cần phải nối liền vào kho nhu liệu, vì connection object đã làm việc này.

Chúng tôi trình bày cùng các bạn các đặt tính của ADO Command object (Command Object Properties) sau đây :

Properties

Description

 ActiveConnection

Ðáp ứng yêu cầu nối liền cho bộ phận.

CommandText

Là SQL command, tên của stored procedure (tiến trình gìn giử nhu liệu), tên của danh sách một tài liệu (table name)...sẽ được xử dụng bởi bộ phận.

CommandType

Xuất hiện khi CommandText property là một SQL command, stored procedure hay là table name.

Prepared

Xuất hiện ngay cả khi SQL command là một store procedure tạm thời.

State

Xuất hiện ngay cả khi command mở ra, đóng lại hay đang xử dụng.

    Chúng tôi sẽ trình bày cùng các bạn Command Object Methods, bản chi tiết sau đây cho biết việc làm của các Command Object methods

Method

Description

Cancel

Hủy bỏ đi Command mà ứng dụng đang xử dụng

CreateParameter

Hình thành Parameter(một nơi để dể dàng cho việc cất giử hay tìm kiếm nhu liệu)

Execute

Tiến hành SQL command

 

     Taọ thành Command từ Connection object : Mặc dầu là trong command object, chúng ta không cần phải tạo thành Connection object (bộ phận nối liền), nhưng để việc làm có nhiều hiệu quả hơn, chúng ta có thể tạo thành Command object trong khi tiến hành Connection object.  Bởi vì khi mà command object được tạo thành rồi thì chúng ta có thể làm một yêu cầu như tìm kiếm tài liệu trong Database ngay.  Thí dụ sau đây là code dùng để tạo thành connection và command object cùng một lúc khi lên giá sách cùng một lúc trong danh sách giử ở Database.

Dim comPriceUpdate As Command

Set comPriceUpdate = New Command

With comPriceUpdate

         ' An existing Connection Object is referenced

         .ActiveConnection = cnStateUBookstore

         .CommandText = "UPDATE Books SET Price = Price * 1.1"

         ' call the Execute method to update the prices

         .Execute

End With

    Tạo thành Command độc lập : chúng tôi sẽ trình bày cùng các bạn một Command Object có thể nối liền vào kho nhu liệu mà không cần thông qua Connection object.  Bởi vì ADO là một trong những COM (component object model) cho nên các bộ phận trong nó, cũng có tính chất độc lập.  Theo 2 bước sau đây, các bạn sẽ có một  bộ phận mệnh lệnh độc lập:

  1. Trong ActiveConnection property của command object, thêm vào chi tiết nơi giử nhu liệu và các chi tiết cần thiết khác có liên quan đến việc nối liền vào kho nhu liệu.

  2. Với Execute method, nó sẽ làm việc nối liền cho các bạn.  Tuy nhiên, nếu các bạn xử dụng phương pháp này thì Connection object sẽ vô hiệu lực trong Visual Basic code.

    Sau đây là code điển hình dùng để tăng thêm 10% giá mua sách khi bộ phận mệnh lệnh được tiến hành:

Dim comPriceUpdate As Command

Set comPriceUpdate = New Command

With comPriceUpdate

         ' No connection object is used

         .ActiveConnection = "Provider=SQLOLEDB;" & _

                                  "User ID=sa;" & _

                                  "Data Source=MSERIES1;" & _

                                  "Initial Catalog=StateUBookstore"

         .CommandText = "UPDATE Books SET Price = Price * 1.1"

 

         ' call the Execute method to update the prices

         .Execute

End With  

 

Chương 5 _ Phần 3_ Ðoạn 2 : Các đặc tính của Recordset Object

 

     Recordset object giúp ứng dụng của các bạn giao trả cho người xử dụng những tài liệu mà họ muốn tìm từ Data Mainframe như MsAccess, Oracle, SQL Server...Từ Recordset object, chúng ta có thể điều chỉnh các tài liệu đó như thêm vào, bớt đi hay xoá bỏ...Sau đây, chúng tôi trình bày cùng các bạn, các tính chất cơ bản của Recordset Object (Properties)

 

Property

Description

ActiveCommand

Làm theo mệnh lệnh của Command Object

ActiveConnection

Làm theo mệnh lệnh của Connection Object

CursorLocation

Vị trí của Cursor (nơi mà khi bạn bấm nút Enter thì mệnh lệnh được tiến hành).  Có sẳn trong bộ phận là adUseServer

CursorType

Thể loại của Cursor.  Có sẳn trong bộ phận là adOpenForward

LockType

Cách xử lý về nhu liệu.  Có sẳn trong bộ phận là adLockReadOnly

MaxRecords

Số lượng tối đa của tài liệu được giao trả khi gọi đến.

PersistFormat

Xác định hình thức bảo quản nhu liệu như thế nào, khi Save method được gọi đến ?

RecordCount

Có bao nhiêu tài liệu được xử dụng.

Save

Bảo quản tài liệu.

   

Recordset Object methods : Bản Recordset Object dưới đây là những methods thông thường được xử dụng trong bộ phận recordset.

Method

Description

Open

Tiến hành SQL command và mở Cursor

Close

Ðóng Recordset lại

Requery

Tiến hành SQL command và mở recordset thêm lần nữa.

Resync

Cập nhật hóa recordset

Save

Ghi nhớ tài liệu và giử gìn nó.

 

    Xử dụng Connection Object và Command Object để tạo thành Recordset Object : Mở Connection object, sau đó mở Command Object.  Từ Command Object, dùng Execute method để tạo thành Recordset.

    Sau đây là thí dụ điển hình làm sao để tạo thành một Recordset :

' Instantiate the variables  xác định các mối liên hệ

         Set cnStateUBookstore = New Connection

         Set comPriceUpdate = New Command

         Set rsStudents = New Recordset

         ' Establish a connection  Tiến hành sự nối liền

         With cnStateUBookstore

                  .Provider = "SQLOLEDB"

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

                                      "Data Source=MSERIES1;" & _

                                      "Initial Catalog=StateUBookstore"

                  .Open

         End With

         ' Create a Command object  Tạo thành bộ phận mệnh lệnh

         With comPriceUpdate

                  .ActiveConnection = cnStateUBookstore

                  .CommandText = "SELECT StudentID FROM Students"

         End With

         ' Build the recordset  Tạo thành nhóm tài liệu

         Set rsStudents = comPriceUpdate.Execute

End Sub

    Các bạn có thể tạo thành một Recordset object từ Connection Object bằng cách xử dụng Open method trong Connection Object.  Sau đây là thí dụ làm sao để tạo thành Recordset Object từ Connection Object :

Sub cmdOpenRecordset_Click()

         ' Declare and instantiate the object variables

         Dim cnStateUBookstore As Connection

         Dim rsStudents As Recordset

         Set cnStateUBookstore = New Connection

         Set rsStudents = New Recordset

         ' Establish a connection

         With cnStateUBookstore

                  .Provider = "SQLOLEDB"

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

                                      "Data Source=MSERIES1;" & _

                                      "Initial Catalog=StateUBookstore"

                  .Open

         End With

         ' Open a recordset using the Connection object variable

         rsStudents.Open "SELECT StudentID FROM Students", cnStateUBookstore

End Sub

 

    Ðồng thời, các bạn cũng có thể tạo thành một Recordset bằng cách xử dụng Execute method trong Connection object.  Tuy nhiên, cách làm việc của Execute method có phần khác với Open method, do đó, record set tạo thành từ Execute method bị hạn chế nhiều so với Open method.  Sau đây là thí dụ điển hình làm sao để tạo thành Recordset object từ Execute method.

 

Sub cmdConnect_Click()

         ' Declare and instantiate the object variables_Xác định mối quan hệ giửa các bộ phận

         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

         With cnStateUBookstore

                  .Provider = "SQLOLEDB"

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

                                      "Data Source=MSERIES1;" & _

                                      "Initial Catalog=StateUBookstore"

                  .Open

         End With  

         ' Open a recordset using the Execute method_ Xử dụng Execute method để tạo thành Recordset

         Set rsStudents = cnStateUBookstore.Execute("SELECT StudentID FROM Students")

End Sub

 

    Cách tạo thành Recordset độc lập : Bạn có thể thành lập một Recordset độc lập mà không cần phải thông qua Connection Object.  Tuy nhiên, khi đến lượt Open method làm việc, việc làm này không làm bên trong Visual Basic mà phải làm từ bên ngoài ADO object.  Sau đây là thí dụ về Recordset độc lập (còn gọi là Stand-Alone Recordset) :

 

Dim rsStudents As Recordset

Set rsStudents = New Recordset

‘ Sự nối liền được tiến hành tiếp theo đó 

rsStudents.Open "SELECT StudentID FROM Students", _

                     "Provider=SQLOLEDB;" & _

                     "User ID=sa;" & _

                     "Data Source=MSERIES1;Initial Catalog=StateUBookstore

 

Chương 5 _ Phần 3 _ Ðoạn 3 : Trình bày các tài liệu cho người xử dụng

    Có 2 cách để trình bày tài liệu và dữ kiện cho người xử dụng.  Thứ nhất là đặt content (những gì chứa đựng) từ recordset vào trong một control nào đó, chẳng hạn như textbox hoặc label...  Thứ nhì là nối trực tiếp các controls thẳng vào trong recordset.

    Bạn cần phải sắp đặt chi tiết nào trong recordset (field of recordset) để trình bày cùng người xử dụng khi họ yêu cầu.  Công việc này từ chuyên nghiệp trong tiếng Anh gọi là reference, you must reference the fields of the recordset.  Sau đây là thí dụ làm sao để trình bày chi tiết từ trong record set ra một control ở ngoài ứng dụng.

' most efficient

txtFirstName.Text = rsStudents!First_Name

 

' explicit, but less efficient

    txtFirstName.Text = rsStudents.Fields("First_Name").Value

    Sắp chổ cho control : Sau khi recordset được tạo thành rồi, các bạn có thể sắp chổ cho control trong ứng dụng (Textbox, Label...) trình bày chi tiết nào (fields) trong recordset.  Thí dụ như ứng dụng của bạn có 2 Textboxes, một dùng để trình bày tên của học sinh và một dùng để trình bày họ của học sinh.  Các bạn có thể sắp chổ cho nó bằng code sau đây ( Từ chuyên nghiệp gọi là populating controls)

Sub FillControls()

         txtFirstName.Text = rsStudents!First_Name

         txtLastName.Text = rsStudents!Last_Name

End Sub

    Nối trực tiếp vào bộ phận recordset : các chi tiết trong recordset sẽ được trình bày mỗi khi ứng dụng được tiến hành.  Từ chuyên nghiệp gọi là binding controls to a recordset.  Binding và Connection khác nhau ở chổ nào hả các bạn ?.  Bởi vì chúng cùng một công việv là nối liền ?  Khác nhau ở chổ bạn phải làm một Connection trước khi bạn có thể làm việc binding.  Cũng cùng một việc là trình bày tên họ của học sinh, nhưng với cách binding controls (Textbox) vào Recordset giúp bạn sắp chổ dể dàng hơn.  Sau đây là thí dụ :

Set txtFirstName.DataSource = rsStudents

txtFirstName.DataField = "First_Name"

Set txtLastName.DataSource = rsStudents

   txtLastName.DataField = "Last_Name

Chương 5 _ Phần 3 _ Ðoạn 4 : Trình bày các chi tiết trong recordset cho người xử dụng

    Recorset Navigation Properties : Trong ADO object, chỉ có Recordset object là có thể lèo lái, hướng dẩn các chi tiết trong recordset mà trình bày cho người xử dụng xem.  Từ chuyên nghiệp trong tiếng Anh là navigating through a recordset.  Sau đây là bản tính chất của recordset

Property

Description

AbsolutePage

Xác định hay cho trở lại chính xác trang tài liệu trong Database nơi mà recordset giử.

AbsolutePosition

Xác định hay trở lại chính xác nơi mà chi tiết trong recordset thường xử dụng nhất.

BOF

Chi tiết đầu tiên trong recordset được xử dụng tới.

Bookmark

Các chi tiết thường được xử dụng nhiều nhất.

EOF

Chi tiết sau cùng trong recordset được xử dụng tới.

   

 Recordset Navigation Methods : Bằng phương pháp di chuyển, các bạn có thể trình bày từng chi tiết một trong bà record set cho người xử dụng xem thấy.  Sau đây là bản các phương pháp có thể xử dụng trong recordset object

Method

Description

Move

 Di chuyển

MoveFirst

 Dời vào chi tiết đầu tiên

MoveLast

 Dời vào chi tiết cuối cùng

MoveNext

 Dời vào chi tiết kế tiếp

MovePrevious

 Dời vào chi tiết ở đằng sau chi tiết hiện tại.

 

    Sau đây là các thí dụ về click event cho phương pháp di chuyển trong recordset object 

 

Sub cmdFirst_click()

         rsStudents.MoveFirst

End Sub

 

Sub cmdLast_Click()

         rsStudents.MoveLast

End Sub

 

Sub cmdPrevious_Click()

         rsStudents.MovePrevious

         ' Check to see if tried to move prior to the first record

         If rsStudents.BOF then

                  ' Moved prior to the first record

                  ' Set the user back to the first

                  rsStudents.MoveFirst

         End If

End Sub

 

Sub cmdNext_Click()

         rsStudents.MoveNext

         ' Check to see if tried to move beyond the last record

         If rsStudents.EOF then

                  ' Moved beyond the last record

                  ' Set the user back to the last

                  rsStudents.MoveLast

         End If

End Sub

Chương 5 _ Phần 4 : Sorting , Filtering and Searching  Data

    Các bạn có thể sắp xếp theo thứ tự ABC những chi tiết trong tài liệu mà recordset gìn giử.  Lợi ích của nó là nếu ứng dụng được xử dụng trên network, các bạn không cần phải tạo thành một lần nữa, recordset.  Recordset properties có làm sẳn cho các bạn việc sort ( sắp xếp theo thứ tự) từ ABC là ASC và ngược lại là DESC.  Ðây là thí dụ về Command Sort :

    Ðể làm mất khả năng Sort bạn chỉ cần viết hàng command này : rsStudents ( Tên của recordset). Sort = " " như trong Command Sort ở trên.

    Chọn lọc các chi tiết trong Recordset : Recordset có một đặc tính là các bạn có thể lựa chọn chi tiết nào để trình bày theo ý của người xử dụng mà không cần phải mang hết thảy các tài liệu ra.  Ðó là Filter property.  Lợi ích của đặc tính này là các bạn có thể tiết kiệm được nhiều memory trong memory pool khi trình bày các Data cho người xử dụng xem.  Thí dụ như trong Recordset Student, bạn chỉ muốn trình bày những học sinh nào có balance trên $1000 mà thội, thì viết hàng code này :

    rsStudents.Filter = "AccountBalance > 1000"

    Khi các bạn không muốn xử dụng Filter property nữa thì viết hàng code này :

    rsStudents.Filter = adFilterNone

    Searching Data : Khi các bạn muốn tìm tài liệu mà mình muốn đọc trong recordset, các bạn sẽ phải xử dụng Find method.  Find method giúp các bạn tìm tài liệu chính xác hơn, thí dụ như tìm học sinh nào có họ là Tran chẳng hạn, hãy xem code sau đây : rsStudents.Find "Last_Name = 'Tran'" .  Ðây là danh sách những việc mà Find method có thể làm được :

Parameter

Description

Criteria

Ðịnh hướng những chi tiết cần phải trình bày.

SkipRows

Bỏ qua những hàng không cần thiết

Direction

Ðịnh hướng lối tìm, đi tới hay đi lui (adSearchForward or adSearchBackward).

Start

Xác định điểm khởi đầu tìm tài liệu.

Còn đây là danh sách những chi tiết mà khi bạn xử dụng Find method, nó sẽ giúp các bạn tìm các tài liệu chính xác hơn :

Clause

Description

FieldName

Name of the field being searched

Operator

=, <, >, "like"

Value

Date, String, Number

 

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