Kiến trúc ole db/ado



tải về 48.03 Kb.
Chuyển đổi dữ liệu30.08.2016
Kích48.03 Kb.
#28473

Kiến trúc OLE DB/ADO


ADO sử dụng OLEDB như là trình cung cấp dữ liệu cơ sở. Trình cung cấp OLE DB cho phép người lập trình có thể truy xuất dữ liệu từ cả hai nguồn: quan hệ và phi quan hệ. VB6.0 đã hỗ trợ các trình cung cấp cục bộ cho SQL Server, Oracle và Microsoft Jet/Access.

Hình 1


Ta chỉ cần lập trình với phần giao diện người sử dụng ở phía Client. Việc truy cập cơ sở dữ liệu trên trình duyệt Web hay ứng dụng VB được thực hiện nhờ ADO. Cấu trúc này cho phép ta lập trình một cách nhất quán trên Web cũng như trên ứng dụng.

Hình 2


Mô hình ADO

Mô hình ADO được trình bày theo dạng phân cấp (tương tự DAO và RDO).

Để có thể lập trình với thư viện ADO, ta phải tham chiếu đến thư viện này bằng cách chọn Project\References…\Microsoft ActiveX Data Object 2.0.


Hình 3. Mô hình ADO



Mô hình ADO có 3 đối tượng cốt lõi:

  • Connection: kết nối CSDL thật sự.

  • Command: thực thi các câu truy vấn dựa vào kết nối dữ liệu.

  • RecordSet: là tập các mẩu tin được chọn từ câu truy vấn thông qua đối tượng Command.

Các đối tượng trong mô hình ADO

Đối tượng Connection


Dùng phương thức Open của đối tượng Connection để thiết lập kết nối với nguồn dữ liệu. Để thực hiện điều này ta cần phải thông báo với ADO thông tin kết nối với dạng chuỗi theo kiểu chuỗi kết nối của ODBC. Thuộc tính ConnectionString thực hiện điều này. Ngoài ra ta còn có thể chọn trình cung cấp bằng cách quy định giá trị của thuộc tính Provider của đối tượng.

Để nối kết với dữ liệu, ta cần xác định trình cung cấp OLE DB và chuỗi kết nối. Nếu không xác định được hai yếu tố này, ta sẽ sử dụng trình cung cấp mặc định là ODBC: MSDASQL.

Một số trình cung cấp có sẵn:


  • Microsoft OLEDB cho các trình điều khiển ODBC.

  • Microsoft OLEDB cho Oracle.

  • Microsoft Jet 3.51 OLEDB (Access).

  • Microsoft Jet 4.0 OLEDB (Access)

  • Microsoft OLEDB cho SQL Server.

  • Microsoft OLEDB cho các dịch vụ thư mục.

Ví dụ:

Đối với trình cung cấp ODBC, thuộc tính ConnectionString có thể là một DSN hay là một kết nối không có DSN (DSN cấp thấp).

Dim cn As ADODB.Connection

Set cn = New ADODB.Connection

cn.Provider = "MSDASQL"

cn.ConnectionString = "DSN=Baigiang"

cn.Open

Kết nối DSN cấp thấp:



Dim cn As ADODB.Connection

Set cn = New ADODB.Connection

cn.Provider = "MSDASQL"

cn.ConnectionString = "DRIVER={SQL Server};” & _

“DATABASE=Baigiang;UID=myuser;PWD=mypassword;"

cn.Open


Trong trường hợp này việc kết nối với cơ sở dữ liệu Server được thực hiện nhanh hơn vì chương trình không cần đọc thông tin về các DSN trên máy Client, tuy nhiên thông tin về nguồn cơ sở dữ liệu lại kết chặt với chương trình đã biên dịch.

Để kết nối với cơ sở dữ liệu Access, ta dùng trình cung cấp Jet với chuỗi kết nối là đường dẫn đến tập tin .mdb



Dim cn As ADODB.Connection

Set cn = New ADODB.Connection

cn.Provider = "MicroSoft.Jet.OLEDB.4.0"

cn.ConnectionString = "d:\data\baigiang.mdb"

cn.Open

Đối với cơ sở dữ liệu SQL Server, ta có thể dùng trình cung cấp SQLOLEDB.1, trong trường hợp này, chuỗi kết nối tương tự như trường hợp kết nối dùng trình cung cấp ODBC không có DSN, tuy nhiên ta không cần xác định giá trị của DRIVER:

Dim cn as ADODB.Connection

Set cn = New ADODB.Connection

cn.Provider = “SQLOLEDB.1”

cn.ConnectionString = “DATABASE=DBHH;” & _

“SERVER=www;UID=user;PWD=user”

cn.Open


Mở và đóng nối kết nguồn dữ liệu

Để phát các yêu cầu đến nguồn dữ liệu sử dụng ADO, ta cần mở kết nối đến nguồn dữ liệu đó bằng phương thức Open của đối tượng Connection. Cú pháp đầy đủ như sau:

connection.Open [connect], [userid], [password]

Tất cả các tham số của phương thức Open đều là tùy chọn, nếu như các thông số này đã được xác định thông qua các thuộc tính khác của đối tượng Connection thì ta không cần mô tả chúng ở đây.

Khi đã hoàn thành tất cả các thao tác liên quan đến nối kết này, ta cần phải đóng nối kết một cách tường minh thông qua phương thức Close của đối tượng Connection.

connection.Close

Đóng nối kết một cách tường minh sẽ đảm bảo rằng tất cả các tài nguyên liên quan đến nối kết này trên Server cũng như Client đều được giải phóng một cách hợp lý.

Xác định vị trí con trỏ

Con trỏ (Cursor): một tập các mẩu tin được trả về cho chương trình. Vị trí con trỏ được xác định nhờ thuộc tính CursorLocation (có ở cả đối tượng Recordset). Có 2 giá trị có thể chỉ định:


  • adUseClient: con trỏ phía Client.

  • adUseServer: con trỏ phía Server (mặc định).

Thực thi các câu truy vấn hành động

Các câu truy vấn hành động (Insert, Update, Delete) được thực hiện nhờ phương thức Execute của đối tượng Connection; ngoài ra phương thức này cũng có thể được sử dụng để thực thi các thủ tục lưu trữ sẵn trong cơ sở dữ liệu hay các câu SELECT. Cú pháp phương thức này như sau:

Nếu không có kết quả trả về:

connection.Execute CommandText, RecordsAffected, Options

Có kết quả trả về:

Set recordset = connection.Execute (CommandText, RecordsAffected, Options)

Trong đó:

- connection: Đối tượng Connection.

- recordset: Đối tượng Recordset là kết quả trả về của phương thức Execute, tuy nhiên, người ta thường ít khi sử dụng cách này. Thay vào đó, người ta thường sử dụng phương thức Open của đối tượng Recordset.

- CommandText: là một chuỗi xác định câu truy vấn hành động, SELECT, thủ tục lưu trữ sẵn hay tên một bảng trong cơ sở dữ liệu.

- RecordEffected: Tùy chọn, là một số nguyên dài (Long) xác định trình cung cấp trả về bao nhiêu mẩu tin thỏa điều kiện.

- Options: Tùy chọn, là một số nguyên dài (Long) xác định trình cung cấp sẽ đánh giá các đối số của CommandText như thế nào.



Thuộc tính Mode: Xác định trình cung cấp có thể hạn chế truy cập đến cơ sở dữ liệu khi có một recordset đang mở. Các giá trị có thể là:

Hằng số

Giá trị

Ý nghĩa

adModeUnknown

0

Mặc định, chỉ định quyền hạn chưa thiết lập hay không thể xác định

adModeRead

1

Mở Recordset với quyền chỉ đọc

adModeWrite

2

Mở Recordset với quyền chỉ ghi

adModeReadWrite

3

Mở Recordset với quyền đọc/ghi

adModeShareDenyRead

4

Ngăn người khác mở kết nối với quyền chỉ đọc

adModeShareDenyWrite

8

Ngăn người khác mở kết nối với quyền chỉ ghi

adModeShareExclusive

12

Ngăn người khác mở kết nối

adModeShareDenyNone

16

Ngăn người khác mở kết nối với bất cứ quyền nào

Đối tượng Recordset


Để có thể khởi tạo một đối tượng Recordset ta có thể thực hiện một trong hai cách:

  • Phương thức Execute của đối tượng Connection. Tuy nhiên cách này ta chỉ tạo được các Recordset chỉ đọc và chỉ có thể di chuyển tới.

  • Xác lập các thông số thích hợp cho đối tượng Recordset rồi thực thi phuơng thức Open của đối tượng Recordset. Điều này được thực hiện nhờ các bước:

    • Sau khi khởi tạo đối tượng Connection, chỉ định Recordset là của đối tượng Connection trên.

    • Thiết lập các thuộc tính thích hợp của Recordset (Source, LockType…).

    • Thực thi câu truy vấn nối kết nhờ phương thức Open.

Thuộc tính CursorType (loại con trỏ)


Xác định loại con trỏ được trả về từ cơ sở dữ liệu. Các giá trị có thể nhận:

Hằng

Giá trị

Mô tả

adOpenForwardOnly

0

Chỉ có thể di chuyển phía trước

adOpenKeyset

1

Không thể thấy các mẩu tin do người dùng khác thêm vào nhưng khi họ xóa hay sửa đổi mẩu tin sẽ làm ảnh hưởng đến các mẩu tin ta đang làm việc.

adOpenDynamic

2

Có thể thấy toàn bộ sự thay đổi do người dùng khác tác động.

adOpenStatic

3

Bản sao tĩnh của tập mẩu tin. Mọi sự thay đổi của người dùng khác ta không thấy được

Thuộc tính LockType (khóa mẩu tin)


Xác định cách thức khóa mẩu tin trong Recordset. Dùng tính năng này khi muốn kiểm soát cách thức cập nhật mẩu tin với nhiều người dùng trong cơ sở dữ liệu.

Hằng

Giá trị

Mô tả

adLockReadOnly

1

Mặc định - Chỉ đọc.

adLockPessimistic

2

Khóa trang bi quan. Mẩu tin trong RecordSet bị khóa khi bắt đầu sửa đổi & tiếp tục khóa cho đến khi thi hành phương thức Update hay di chuyển sang mẩu tin khác.

adLockOptimistic

3

Khóa trang lạc quan. Mẩu tin chỉ bị khóa ngay lúc thi hành phương thức Update hay di chuyển sang mẩu tin khác.

adLockBatchOptimistic

4

Khóa trang lạc quan hàng loạt. Hỗ trợ cập nhật nhiều mẩu tin cùng một lúc.

Thuộc tính Source


Đây là một chuỗi xác định câu truy vấn để lấy dữ liệu, có thể là tên của bảng hay tên của thủ tục lưu trữ sẵn.

Thuộc tính ActiveConnection


Đây là một thuộc tính đối tượng xác định Recordset là của nối kết nào trong chương trình.

Hàm mẫu Kết nối CSDL:

‘Khai báo đối tượng Connection

Public connect As New ADODB.Connection
Public Sub KetNoiCSDL()

Dim strPath As String

Dim strDatabase As String

connect.Provider = "Microsoft.jet.OLEDB.4.0"

strPath = App.Path & "\dbvanchuyen.mdb"

connect.ConnectionString = strPath

connect.Open

If connect.State = 0 Then

MsgBox "Khong ket noi duoc CSDL"

Exit Sub


End If

End Sub


Private Sub HienDanhSachSoXe()

‘Thực hiện truy vấn chọn

Dim RS As New ADODB.Recordset

Dim sqlCommand As String

sqlCommand = "Select Soxe from TXETAI"

RS.Open sqlCommand, connect, adOpenStatic, adLockOptimistic, adCmdText

‘Hiện dữ liệu lên ListBox

If RS.RecordCount > 0 Then

ListSoXe.Clear 'Xoa listbox

Do While Not RS.EOF

ListSoXe.AddItem RS.Fields("Soxe") ‘RS!Soxe

RS.MoveNext

Loop

RS.Close


End If

End Sub
Private Sub HienThongTinChiTietXe(ByVal soxechon As String)

Thực hiện truy vấn lấy các trường của xe được chọn (soxechon)

Dim sqlCommand As String

Dim rsCTXe As New ADODB.Recordset

sqlCommand = "select * from TXETAI where Soxe = '" & soxechon & "'"

rsCTXe.Open sqlCommand, connect, adOpenStatic, adLockOptimistic, adCmdText
Hien du lieu lay duoc len các textbox tương ứng

IDSoxechon = rsCTXe!IDSoxe

txtTaixe.Text = rsCTXe.Fields("TenLaiXe")

txtTaitrong.Text = rsCTXe.Fields("Taitrong")

txtSoxe.Text = soxechon

End Sub
Private Sub HientieudeListView()

lvChitietVC.ColumnHeaders.Add 1, , "Ngµy vËn chuyÓn", 2500

lvChitietVC.ColumnHeaders.Add 2, , "Tªn kh¸ch hµng", 2500, lvwColumnLeft

lvChitietVC.ColumnHeaders.Add 3, , "§Þa chØ", 2500, lvwColumnLeft

lvChitietVC.ColumnHeaders.Add 4, , "C­íc vËn chuyÓn", 2500, lvwColumnLeft

lvChitietVC.View = lvwReport

End Sub
Private Sub HienChitietVanChuyen()



Dim i As Integer

Dim rsCTVC As New ADODB.Recordset

Dim sqlCommand As String

sqlCommand = "select * from TCHITIETVC where IDSoxe= '" & IDSoxechon & "' and Month(Ngayvc) = " & Val(ComboThang.Text) & " and Year(Ngayvc) = " & Val(ComboNam.Text) & " order by Ngayvc desc"

rsCTVC.Open sqlCommand, connect, adOpenKeyset, adLockOptimistic, adCmdText

lvChitietVC.ListItems.Clear 'Xoa toan bo ListView de hien moi

If rsCTVC.EOF = False Then

i = 1

Do While Not rsCTVC.EOF

lvChitietVC.ListItems.Add i, , rsCTVC!Ngayvc

lvChitietVC.ListItems(i).SubItems(1) = rsCTVC!TenKH

lvChitietVC.ListItems(i).SubItems(2) = rsCTVC!Diadiem

lvChitietVC.ListItems(i).SubItems(3) = Format(rsCTVC!Sotien, "#,###")

i = i + 1

rsCTVC.MoveNext

Loop

rsCTVC.Close

LayThongTinChitietVC 1

End If

End Sub

tải về 48.03 Kb.

Chia sẻ với bạn bè của bạn:




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

    Quê hương