Lập trình Window - 23

Set rs.ActiveConnection = cn rs.CursorLocation = adUseClient rs.LockType = adLockBatchOptimistic rs.CursorType = adOpenKeyset rs.Open strState

Set rs.ActiveConnection = Nothing Set GetList = rs

Set rs = Nothing End Function

Để thi hành cùng một hành động trên một mẩu tin, ta sửa đổi lại các thuộc tính của đối tượng Recordset.

rs.LockType = adLockBatchOptimistic rs.CursorType = adOpenKeyset

Chúng ta thiết lập giá trị các thuộc tính lại như trên để xác nhận rằng Recordset có thể nối kết lại để cập nhật về sau.

Sau đó, ta sẽ thiết lập một hàm nhận Recordset ngắt kết nối làm tham biến để tạo một đối tượng Recordset khác cập nhật dữ liệu.

Public Sub WriteData(rsDis As ADODB.Recordset) Dim rs As ADODB.Recordset

Set rs = New ADODB.Recordset Set rs.ActiveConnection = cn rs.Open rsDis, cn rs.UpdateBatch

End Sub

Gọi thực thi thủ tục WriteData:

Private Sub cmdWrite_Click()

WriteData GetList("Select * From THanghoa")

End Sub

c) Đối tượng Command

Đây là đối tượng được người lập trình sử dụng khi muốn thi hành các thủ tục lưu trữ sẵn hay những câu truy vấn có tham số.

Với đối tượng Command ta có thể thi hành một số công việc như sau:

Sử dụng thuộc tính CommandText để định nghĩa các đoạn Text thi hành được. Thông thường thuộc tính này dùng để thiết lập một câu lệnh SQL hoặc một lời gọi thủ tục lưu trữ sẵn, hay những dạng khác mà trình cung cấp hỗ trợ

Xây dựng chuỗi các đối số của câu truy vấn cũng như các tham số của các thủ tục lưu trữ sẵn thông qua đối tượng Parameter hoặc tập hợp Parameters.

Thực hiện một câu truy vấn và trả về đối tượng Recordset thông qua phương thức Execute.

Xác định kiểu của đối tượng Command để nâng cao hiệu quả thông qua thuộc tính CommandType.

Xác định số giây mà trình cung cấp phải chờ khi thi hành một đối tượng Command thông qua thuộc tính CommandTimeOut.

Các kiểu của đối tượng Command được trình bày trong bảng dưới đây:


Hằng

Ý nghĩa

adCmdText

Định giá thuộc tính CommandText dưới dạng Text của

một câu lệnh hoặc một lời gọi thủ tục lưu trữ sẵn.


adCmdTable

Định giá thuộc tính CommandText như là tên của một bảng khi tất cả các trường của bảng đó sẽ được trả về

bởi câu lệnh truy vấn nội tại.


adCmdTableDirect

Định giá thuộc tính CommandText như là tên của một bảng khi mà tất cả các trường của bảng đó sẽ được trả

về.

adCmdStoredProc

Định giá thuộc tính CommandText như là tên của một

thủ tục lưu trữ sẵn.


adExecuteNoRecords

Chỉ định rằng thuộc tính CommandText là một câu lệnh hoặc một thủ tục lưu trữ sẵn không trả về bất kỳ dòng nào (ví dụ như lệnh thêm mới dữ liệu …). Cấu

trúc này luôn bao hàm adCmdText, adCmdStoredProc.

Có thể bạn quan tâm!

Xem toàn bộ 248 trang tài liệu này.


Thuộc tính Parameter được xác lập thông qua hai phương thức CreateParameter và Append

Set parameter = command.CreateParameter (Name, Type, _ Direction, Size, Value)

Name: tùy chọn, chuỗi xác định tên của đối tượng Parameter.

Type, Direction: giá trị xác địn kiểu của đối tượng Parameter

Size: giá trị xác định độ dài tối đa của giá trị đối tượng Parameter bằng ký tự hoặc Byte.

Value: biến xác định giá trị của Parameter truyền. Những giá trị có thể của thuộc tính Direction:

Hằng

Mô tả

adParamUnknown

Không biết chiều của Parameter.

Mặc định, xác định đây là tham số đầu vào.

adParamOutput

Tham số đầu ra.

adParamInputOutput

Vừa là tham số đầu vào vừa là tham số đầu ra.

adParamReturnValue

Đây là giá trị trả về.

adParamInput


Phương thức Append dùng để đưa đối tượng Parameter vừa tạo vào tập hợp. Chúng ta sẽ xét qua ví dụ dau đây:

Public Sub ActiveConnectionX()

Dim cnn1 As ADODB.Connection

Dim cmdByRoyalty As ADODB.Command Dim prmByRoyalty As ADODB.Parameter Dim rstByRoyalty As ADODB.Recordset Dim rstAuthors As ADODB.Recordset Dim intRoyalty As Integer

Dim strAuthorID As String Dim strCnn As String

' Định nghĩa 1 đối tượng command cho một thủ tục lưu trữ sẵn Set cnn1 = New ADODB.Connection

cnn1.Provider = "SQLOLEDB.1" cnn1.ConnectionString = "DATABASE=Pubs;" & _ "SERVER=(local);UID=user;PWD=user;" cnn1.Open

Set cmdByRoyalty = New ADODB.Command Set cmdByRoyalty.ActiveConnection = cnn1 cmdByRoyalty.CommandText = "byroyalty"

cmdByRoyalty.CommandType = adCmdStoredProc cmdByRoyalty.CommandTimeout = 15

' Định nghĩa đối số đầu vào cho thủ tục lưu trữ intRoyalty = Trim(InputBox( "Enter royalty:")) Set prmByRoyalty = New ADODB.Parameter prmByRoyalty.Type = adInteger prmByRoyalty.Size = 3 prmByRoyalty.Direction = adParamInput prmByRoyalty.Value = intRoyalty

cmdByRoyalty.Parameters.Append prmByRoyalty

' Tạo một recordset bằng cách thi hành đối tượng Command. Set rstByRoyalty = cmdByRoyalty.Execute()

' Mở bảng Authors để lấy tên hiển thị

Set rstAuthors = New ADODB.Recordset

rstAuthors.Open "authors", cnn1, , , adCmdTable Debug.Print "Authors with " & intRoyalty & _

" percent royalty"

Do While Not rstByRoyalty.EOF strAuthorID = rstByRoyalty!au_id Debug.Print , rstByRoyalty!au_id & ", "; rstAuthors.Filter = "au_id = '" & _ strAuthorID & "'"

Debug.Print rstAuthors!au_fname & “ - “ & _ rstAuthors!au_lname

rstByRoyalty.MoveNext Loop rstByRoyalty.Close rstAuthors.Close cnn1.Close

End Sub

d) Đối tượng Field

Dùng đối tượng Field và tập hợp Fields khi ta muốn truy cập giá trị của một trường của một Recordset nào đó, kỹ thuật này tương tự như đối với DAO.

Chúng ta có thể sử dụng kỹ thuật ADO để kết nối đến CSDL và sử dụng các điều khiển thông thường khác như: TextBox, Label, CheckBox… để ràng buộc dữ liệu (data binding) và kết xuất dữ liệu.

Hình 5 12 Điều khiển Adodc Tên mặc định của điều khiển này là Adodc1 chúng 1

Hình 5.12. Điều khiển Adodc

Tên mặc định của điều khiển này là Adodc1 (chúng ta có thể đổi thành tên khác).

a) Một số thuộc tính của điều khiển Adodc: ConnectionString: Chuỗi kết nối đến CSDL CommandType: Kiểu lệnh thi hành CursorType: Kiểu trỏ

LockType: Kiểu khoá

RecordSource: Nguồn dữ liệu

b) Truy cập đến dữ liệu trong cơ sở dữ liệu

Chúng ta thực hiện 2 bước: Bước 1 là tạo kết nối đến CSDL, bước 2 là thiết lập nguồn dữ liệu (RecordSource) từ CSDL cho điều khiển Adodc.

Bước 1: Tạo một kết nối (Connection) đến CSDL:

Kích chuột chọn Adodc1, trong cửa sổ Properties chọn thuộc tính ConnectionString, khi đó xuất hiện nút , chúng ta kích chuột vào nút này sẽ xuất hiện ra cửa sổ Property Pages.

Hình 5 13 Thuộc tính ConnectionString trong cửa sổ thuộc tính Cửa sổ Property Pages 3

Hình 5.13. Thuộc tính ConnectionString trong cửa sổ thuộc tính Cửa sổ Property Pages mở ra:

Hình 5 14 Hộp thoại Property Pages  Trong cửa sổ Property Pages có 3 lựa chọn 4

Hình 5.14. Hộp thoại Property Pages

Trong cửa sổ Property Pages có 3 lựa chọn:

- Use Data Link File: Cho phép chúng ta nạp những thông số kết nối đã được lưu trước trong MDL file (Microsoft Data Link).

- Use ODBC Data Source Name: Chúng ta có thể chọn một Data Source Name (DSN) từ những DSN trong ODBC của máy chúng ta (chúng ta phải thiết lập DSN này trong ODBC trước), hoặc chúng ta có thể tạo mới DSN ngay lúc này bằng cách nhấp chọn “New” và cấu hình cho DSN này.

- Use Connection String: Chúng ta phải chỉ ra một chuỗi kết nối trực tiếp.

Chúng ta sử dụng lựa chọn thứ ba là “Use Connection String”, sau đó kích chuột vào nút Build, chọn Provider là “Microsoft Jet 4.0 OLE DB Provider” để kết nối đến CSDL Access, rồi nhấn nút Next. Nếu kết nối đến CSDL SQL Server thì chọn Microsoft OLE DB Provider for SQL Server, rồi nhấn nút Next. Giả sử chúng ta chọn Provider là “Microsoft Jet 4.0 OLE DB Provider” để kết nối đến CSDL Microsoft Access, sau đó nhấn nút Next.

Hình 5 15 Hộp thoại Data Link Properties Sau khi nhấn nút Next cửa sổ chuyển sang 5

Hình 5.15. Hộp thoại Data Link Properties Sau khi nhấn nút Next, cửa sổ chuyển sang thẻ Connection:

Tại hộp Select or enter a database name chúng ta nhấn nút ở bên phải để tìm 6

Tại hộp “Select or enter a database name”, chúng ta nhấn nút ở bên phải để tìm đến CSDL Microsoft Access có tên là QTKD.mdb.

Hình 5 16 Cửa sổ Select Access Database Sau khi chọn xong chúng ta kích vào nút 8

Hình 5.16. Cửa sổ Select Access Database

Sau khi chọn xong, chúng ta kích vào nút “Open” để chỉ ra tên của CSDL cần kết nối. Sau đó chúng ta nhấn nút “Test Connection” phía dưới để kiểm tra xem kết nối có được thiết lập tốt không? Nếu kết nối thành công thì cửa sổ sau sẽ xuất hiện:

Bước 2 Thiết lập nguồn dữ liệu Record source từ CSDL cho điều khiển Adodc1 9

Bước 2: Thiết lập nguồn dữ liệu (Record source) từ CSDL cho điều khiển Adodc1:

Trong cửa sổ Property- Adodc1 chọn thuộc tính RecordSource, khi đó xuất hiện nút , kích chuột vào nút này sẽ hiện ra cửa sổ Property Pages.

Khi chọn hộp ComboBox Command Type Kiểu lệnh thi hành xổ xuống sẽ có các 11

Khi chọn hộp ComboBox “Command Type” (Kiểu lệnh thi hành) xổ xuống sẽ có các lựa chọn sau:

8 – adCmdUnknown: Kiểu lệnh không xác định.

1 – adCmdText: Kiểu lệnh thi hành một câu truy vấn (câu SELECT) trên nguồn dữ liệu, câu SELECT này được ghi ở hộp “Command Text (SQL)” bên dưới, kết quả trả về tập hợp các bản ghi thoả mãn câu SELECT trên.

2 – adCmdTable: Tên của một bảng (table) cụ thể , kết quả trả về toàn bộ các bản ghi của bảng.

4 – adCmdStoredProc: Kiểu lệnh thi hành một Stored Procedure trên CSDL, tên của Stored Procedure này (có thể có tham số đi kèm) ghi ở hộp “Command Text (SQL)” bên dưới.

Tuỳ thuộc chúng ta chọn kiểu lệnh nào thì hộp Combobox “Table or Stored Procedure Name” bên dưới có thể Enable hoặc không. Để truy xuất danh sách khách hàng trong CSDL, chúng ta chọn Command Type là “2 – adCmdTable” , sau đó chọn bảng tblDS_KH trong hộp combobox và nhấn nút OK:

Sau khi thực hiện xong việc kết nối và chọn nguồn dữ liệu để hiển thị 12

Sau khi thực hiện xong việc kết nối và chọn nguồn dữ liệu để hiển thị từ ADO Data Control.

Bước 3. Sử dụng các điều khiển thông dụng như: Textbox, Checkbox…để ràng buộc dữ liệu với ADO Data Control này.

Do bảng tblDS_KH có 8 trường: Makh (mã khách hàng), Tenkh (họ tên khách hàng), Diachi (địa chỉ khách hàng), Dienthoai (điện thoại), Fax (số Fax), Company (Tên công ty), Utien (ưu tiên), Email (địa chỉ thư điện tử) nên khi thiết kế Form chúng ta dùng 8 TextBox và đặt tên cho chúng là TxtMakh, TxtTenkh, TxtDiachi, TxtDienthoai, TxtFax, TxtCompany, TxtUtien, TxtEmail. Chúng ta cũng sử dụng 8 Label đặt trước 8 TextBox này với các tên là LblMakh, LblTenkh, LblDiachi,

..... Xem trang tiếp theo?
⇦ Trang trước - Trang tiếp theo ⇨

Ngày đăng: 16/07/2022