1 Mục lục 1 2 Làm quen với visual basic 0 9


Tạo Intance bội cho biểu mẫu



tải về 1.69 Mb.
trang39/39
Chuyển đổi dữ liệu09.10.2016
Kích1.69 Mb.
1   ...   31   32   33   34   35   36   37   38   39

16.2Tạo Intance bội cho biểu mẫu


Ta có thể tạo instance bội (multiple instance) cho biểu mẫu tương tự như việc tạo instance bội cho các đối tượng từ lớp. Mỗi instance sau đó của biểu mẫu có định danh riêng trong ứng dụng, với một bản sao của toàn bộ thuộc tính, phương thức, và các điều khiển giao diện người sử dụng chứa trong thiết kế gốc của biểu mẫu.

Tạo ra nhiều instance cho biểu mẫu Login của người sử dụng là vô nghĩa. Tuy nhiên, đối với các biểu mẫu khác, ta tạo ra instance bội là điều thường gặp như ví dụ sau cho thấy :

Dim f as frmMain

Set f = New frmMain

f.Show

16.2.1Sử dụng lớp và đối tượng trong truy cập cơ sở dữ liệu


Có một số phương tiện giúp cho việc áp dụng kỹ thuật hướng đối tượng trong truy cập dữ liệu trong Visual Basic :

  • Gắn một bản ghi duy nhất với một đối tượng : Đây là kỹ thuật đơn giản nhất, không cần lập trình nhiều. Mỗi trường trong bản ghi trở thành một thuộc tính của đối tượng; lấy dữ liệu về từ cơ sở dữ liệu hay lưu dữ liệu vào cơ sở dữ liệu đều được xử lý qua đối tượng.

  • Uỷ nhiệm xử lý dữ liệu cho một đối tượng Recordset chứa trong một đối tượng : Đây là kỹ thuật tốt nhất khi ta cần xử lý một số không giới hạn các bản ghi. Kỹ thuật này cũng dễ lập trình, bởi vì có nhiều chức năng quản lý được cung cấp sẵn trong các mô hình đối tượng được sử dụng (DAO hay RDO). Kỹ thuật đặc biệt hữu dụng khi ta dùng ADO bởi vì ADO cung cấp khả năng ngắt kết nối với nguồn dữ liệu, cho phép ứng dụng Client thao tác với dữ liệu không cần kết nối với Server. Bởi vì nhiều người sử dụng kết nối đồng thời là một điểm yếu của các máy tính Client/Server, ngắt kết nối có nghĩa là giải pháp sẽ linh hoạt hơn.

  • Gắn nhóm các bản ghi vào một tập hợp : Lập trình phức tạp hơn trường hợp gắn một bản ghi với một đối tượng, nhưng nó hữu dụng hơn trong trường hợp ta phải xử lý với nhóm các bản ghi có liên quan tại một thời điểm. Ta có thể gặp phải khó khăn liên quan đến khả năng hoạt động của ứng dụng nếu ta không cẩn thận giới hạn số bản ghi xử lý tại một thời điểm.

  • Chia truy cập dữ liệu giữa Client và Server : Kỹ thuật này thích hợp nhất khi ta cần đạt được khả năng linh hoạt và hiệu quả cao nhất trong ứng dụng. Nó liên quan đến việc chia Logic của tầng trung gian của ứng dụng thành 2 phần : thành phần phía server thi hành truy cập và trả về dữ liệu đến Clien và thành phần phía Client nhận kết quả này và gắn chúng vào các thuộc tính của đối tượng.

Các ví dụ còn lại trong chương sẽ đưa ra ý tưởng kỹ thuật nào sẽ phù hợp trong từng tình huống cụ thể.

16.2.1.1Sử dụng các lớp xử lý bản ghi duy nhất


Lớp xử lý bản ghi trả về một bản ghi duy nhất từ cơ sở dữ liệu và đưa nó vào ứng dụng dưới dạng một đối tượng. Các trường trong bản ghi được trình bày như những thuộc tính của đối tượng. Bất kỳ hành động nào thi hành trên dữ liệu ( như là lưu dữ liệu về cơ sở dữ liệu, in ấn, hay tiến hành tính toán ) đều được trình bày như những phương thức của đối tượng xử lý bản ghi.

Để cho phép lớp điền giá trị cho thuộc tính, ta cung cấp cho nó một phương thức (đặt tên là GetData) thi hành truy vấn một bản ghi duy nhất trên cơ sở dữ liệu, nó dùng các trường trong bản ghi được trả về để điền giá trị vào thuộc tính của đối tượng.

Khi giao cho đối tượng vai trò lấy bản ghi về từ cơ sở dữ liệu, ta cần cung cấp cho đối tượng ID của bản ghi, thường là khoá chính này; phương thức GetData của đối tượng sẽ dùng khoá chính này để lấy về bản ghi cần thiết.

Đối tượng cũng có thể có thêm phương thức Save cho phép người sử dụng của thành phần lưu bản ghi vào cơ sở dữ liệu.


16.2.1.2Sử dụng lớp xử lý mảng(ARRAY-HANDLING CLASS)


Ta có thể tạo lớp truy vấn cơ sở dữ liệu, sau đó truyền dữ liệu về ứng dụng Client dưới dạng mảng. Ưu điểm của giải pháp này là nếu lớp xử lý mảng được biên dịch thành ActiveX Server DLL hay EXE, nó có thể tạo ứng dụng Client mà không đòi hỏi tham chiếu đến bộ máy của cơ sở dữ liệu. Tất cả những gì Client cần là một tham chiếu đến thành phần ActiveX server. Điều này làm cho ứng dụng Client tiêu tốn ít tài nguyên hơn; ứng dụng dễ phân phát và định cấu hình hơn.

Tạo một thành phần phía server trả về một mảng nghĩa là ứng dụng phía Client không cần duy trì kết nối liên tục đến server, giúp tăng cường tính linh hoạt của ứng dụng Client/Server.



16.2.1.3Sử dụng phương thức xưởng sản suất(FACTORY METHOD)


Xưởng sản xuất đối tượng là một phương pháp tạo các đối tượng khác. Ta dùng Xưởng sản xuất đối tượng trong trường hợp một đối tượng giữ vai trò tạo ra các đối tượng khác. Để tạo ra các đối tượng khác, ta dùng phương thức; các phương thức này gọi là phương thức xưởng sản xuất.

Ví dụ, đối tượng Database của DAO, có một số phương thức xưởng sản xuất cung cấp đối tượng :




Phương thức

Mô tả

CreateQueryDef

CreateRelation

CreateTableDef

OpenRecordset

CreateProperty


Tạo một đối tượng QueryDef.

Tạo một đối tượng Relation

Tạo một đối tượng TableDef

Tạo một đối tượng Recordset

Tạo một đối tượng Property

Ngoài việc sử dụng các phương thức xưởng sản xuất do Visual Basic cung cấp, ta có thể tạo ra các phương thức này trong các lớp tự tạo.

Một lý do phổ biến để dùng các phương thức xưởng sản xuất là yêu cầu thực hiện theo cách tạo đối tượng trong Visual Basic. Các ngôn ngữ lập trình khác sử dụng đối tượng (như Visual C++) có contructor đảm nhiệm việc tạo Instance của đối tượng từ lớp; những constructor còn có thể thi hành các tác vụ khác, như cung cấp các dữ liệu khởi tạo cho lớp. Lớp có nhiều constructor để người lập trình có thể chọn lựa và constructor có thể lấy và trả về tham số.

Tuy nhiên, không có tương quan trực tiếp với constructor trong Visual Basic. Thay vào đó, các lớp Visual Basic có sự kiện Initialize. Ta có thể lập trình trong sự kiện Initialize như trong constructor của Visual C++, nhưng không may là ta không thể truyền tham số cho sự kiện Initialize của Visual Basic, và ta chỉ có một sự kiện Initialize cho mỗi lớp. Nó làm tính tiện dụng của sự kiện Initialize bị hạn chế đối với mọi phần tử, ngoại trừ các giá trị cơ bản nhất là các giá trị mặc định. Các phương thức xưởng sản xuất cung cấp giải pháp khắc phục điều này.

Option Explicit
' Requires CCustomer class
Public Function CreateCustomer(Optional lngID As Variant) As CCustomer
Dim Cust As CCustomer
If IsMissing(lngID) Then

' Create new customer

Set CreateCustomer = New CCustomer

Else


' Retrieve customer from DB

Set Cust = New CCustomer

Cust.GetData (lngID)

Set CreateCustomer = Cust

End If

End Function


Xưởng sản xuất đối tượng tạo một đối tượng khách hàng rất dễ dàng với đầy đủ tính năng. Đoạn chương trình sau tạo đối tượng CCustomer:

Dim MyCust As CCustomer

Dim cf As CCustFactory

Set cf = New CCustFactory

' Retrieve data

Set MyCust = cf.CreateCustomer(txtID.Text)


Một lý do khách để dùng các phương thức xưởng sản xuất trong lập trình cơ sở dữ liệu Visual Basic là để tiết kiệm các tài nguyên kết nối, bởi kết nối đến cơ sở dữ liệu đòi hỏi tiêu tốn nhiều thời gian và bộ nhớ trên Client và Server.

Nếu dùng lớp xưởng sản xuất sẽ dễ dàng hạn chế số kết nối thực hiện với server. Ta chỉ kết nối một lần, trong lớp xưởng sản xuất thay vì trong mỗi mô-dun lớp.


16.3Tạo các lớp cần sử dụng dữ liệu


Lớp có khả năng ràng buộc trực tiếp với cơ sở dữ liệu. Đây là tính năng mới trong Visual Basic 6.0. Ta không cần giới hạn các điều khiển dữ liệu thành nguồn dữ liệu cho ứng dụng cơ sở dữ liệu.

Ngoài việc cung cấp nguồn dữ liệu mới, Visual Basic 6 còn loại bỏ những hạn chế về cách thức kết nối của ứng dụng với nguồn dữ liệu. Ta không cần thiết lập ràng buộc dữ liệu vào lúc thiết kế, như với điều khiển DAO Data. Thay vào đó, ta có thể gán một nguồn dữ liệu (như là điều khiển ADO Data,thiết kế DataEnvironment,hay lớp cung cấp dữ liệu ) cho phần tiêu thụ dữ liệu (như là một điều khiển giao diện nguời sử dụng ràng buộc ) lúc thi hành. Điều này cho phép đóng gói mô-dun lớp truy cập dữ liệu.

Để tạo một lớp làm nguồn dữ liệu truy cập cơ sở dữ liệu Novelty, ta theo các bước sau:


  1. Tạo một đề án Standard EXE.

  2. Dùng menu Project để thêm một mô-dun lớp vào đề án. Đặt tên mô-dun lớp là CCustData.

  3. Dùng cửa sổ Properties để đổi thuộc DataSourceBehavior thành 1-vbDataSource.

  4. Dùng menu Project, References để thiết lập một tham chiếu đến Microsoft ActiveX Data Objects.

  5. Trong phần khai báo của lớp, tạo một đối tượng Recordset (private). Đối tượng này sẽ xử lý truy cập cơ sở dữ liệu.

Private mrsCustomer As ADODB.Recordset

  1. Trong sự kiện Initialize của lớp, viết chương trình để tạo đối tượng Recordset:

Set mrsCustomer = New ADODB.Recordset

mrsCustomer.Source = "select * from tblCustomer"

mrsCustomer.CursorType = adOpenKeyset

mrsCustomer.LockType = adLockOptimistic

mrsCustomer.ActiveConnection = "DSN=JetNovelty;"

mrsCustomer.Open



  1. Trong sự kiện Initialize của lớp, viết chương trình đăng ký nguồn dữ liệu với tập hợp DataMembers do thư viện Microsoft Data Binding cung cấp. Điều này cho phép phần tiêu thụ dữ liệu (như là các điều khiển ràng buộc) dùng lớp này như là một nguồn dữ liệu :

  2. Viết chương trình cho sự kiện GetDataMember của lớp để trả về một đối tượng Recordset dựa trên tham số DataMember của sự kiện ( Sự kiện GetDataMember sẽ hiện diện sau khi ta quy định giá trị cho thuộc tính DataSourceBehavior ). Bởi vì sự kiện GetDataMember được tham số hoá, ta có thể kết nối ứng dụng với vô số các recordset;tuy nhiên, lớp này chỉ trả về một danh sách khách hàng.

Lưu ý : Tham số Data của sự kiện GetDataMember là một đối tượng, không phải một recordset. Do đó, trong sự kiện có thể truy cập đối tượng khác thay vì đối tượng Recordset của ADO.



  1. Kế đến, viết phương thức (public) trong lớp CCustData để điều khiển recordset. Trong ví dụ này, ta tạo 4 phương thức di chuyển được cung cấp bởi một điều khiển dữ liệu:

Public Sub MoveFirst()

mrsCustomer.MoveFirst

End Sub
Public Sub MoveLast()

mrsCustomer.MoveLast

End Sub
Public Sub MoveNext()

mrsCustomer.MoveNext

If mrsCustomer.EOF Then

mrsCustomer.MoveLast

End If

End Sub
Public Sub MovePrevious()



mrsCustomer.MovePrevious

If mrsCustomer.BOF Then

mrsCustomer.MoveFirst

End If


End Sub

  1. Dùng menu Project Components, thêm một điều khiển Microsoft DataGrid Control 6.0 (OLE DB) vào đề án.Nó cho phép ta hiển thị dữ liệu trong một lưới (grid). Tạo một instance của điều khiển lưới trên biểu mẫu.

  2. Trên biểu mẫu, tạo 4 nút lệnh để duyệt qua dữ liệu. Đặt tên chúng là cmdFirst, cmdPrevious, cmdNext, cmdLast.

  3. Trong sự kiện Load của biểu mẫu, khai báo một instance của lớp nguồn dữ liệu. Viết chương trình cho sự kiện Click để gọi các phương thức di chuyển :

Private Sub Form_Load()

' Create the data source object

Set mCustData = New CCustData

' Bind the object to grid

Set DataGrid1.DataSource = mCustData

DataGrid1.DataMember = "Customers"

End Sub
Private Sub cmdFirst_Click()

mCustData.MoveFirst

End Sub
Private Sub cmdLast_Click()

mCustData.MoveLast

End Sub
Private Sub cmdNext_Click()

mCustData.MoveNext

End Sub
Private Sub cmdPrevious_Click()

mCustData.MovePrevious

End Sub


  1. Thi hành ứng dụng.

16.3.1Tạo lớp xuất dữ liệu


Có nhiều khả năng ta viết một thủ tục lấy một bảng cơ sở dữ liệu và chuyển đổi nó thành tập tin văn bản có phân cách, sau đó ta sẽ sử dụng lại thủ tục này nhiều lần.

Phần này xây dựng trên hàm xuất HTML mô tả trong chương 14 “Thiết lập báo cáo và xuất thông tin ” để cung cấp việc xuất dữ liệu ta đã sử dụng lớp CCustomer

Để cung cấp cho lớp CCustomer khả năng xuất, ta thêm một thuộc tính và một phương thức cho lớp. Thuộc tính mới, HTMLText, lấy thuộc tính của đối tượng CCustomer và định dạng nó thành một trang HTML. Thủ tục thuộc tính này gọi một hàm (private), HTMLRow để định dạng từng dòng của bảng.

Public Property Get HTMLText() As String

Dim str As String

str = "" & vbCrLf

str = str & "" & vbCrLf

str = str & "" & "Customer: " & _</p> <p>FirstName & " " & _ </p> <p>LastName & _</p> <p>"" & vbCrLf

str = str & "" & vbCrLf

str = str & "" & vbCrLf

str = str & "" & vbCrLf

str = str & HTMLTableRow("First name:", FirstName)

str = str & HTMLTableRow("Last name:", LastName)

str = str & HTMLTableRow("Address:", Address)

str = str & HTMLTableRow("City:", City)

str = str & HTMLTableRow("State:", State)

str = str & "

"



str = str & "" & vbCrLf

str = str & "


1   ...   31   32   33   34   35   36   37   38   39


Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2019
được sử dụng cho việc quản lý

    Quê hương