Chương 2: CÁC MÔ HÌNH TRUY CAP DU LEU

Một phần của tài liệu Microsoft Access 2000 Lập trình ứng dụng cơ sở dữ liệu. Tập 1 (Trang 157 - 166)

CÁC HẰNG SỐ COMMANDTYPE

Chương 2: Chương 2: CÁC MÔ HÌNH TRUY CAP DU LEU

Long Interger va cét thứ ba có kiểu là Text. (Khi bạn thêm các record vào một bảng, bạn phải để ý đến các kiểu đữ liệu của field).

Field Properties

General | Locke |

Fred Sce Loy treeger

Forrnst

Cocenal Aaces AAO

Tngat Mask A heekd mare can be up

Caption to 64 characters tard,

Defauk Yale 2 irchsdng spaces.

Vabdaton Rude ress F3 for hep on

Vokdation Text jack names,

Reqared No

Indexed Yes (No Dughc ates)

Hình 2-7. Khung nhìn Design của bảng để thủ tục InserRecords thêm cdc record.

Các phan ti téng quat cla thi tuc InserRecords được chia xẻ với các trình ứng dụng khác của đối tượng Conunand. Bạn tạo một tham chiếu đến đối tượng Commnand và thiết lập thuộc tính nối kết cho nó. Với mỗi hàng bạn cần thêm vào một record, ba dòng được yêu cầu là: cài đặt thuộc tính ConmunandText, cho biết lệnh gì sẽ lam; cài đặt thuộc tính CommandType, định rõ đạng lệnh; và phương pháp Excufe, bắt đầu thêm vào record mới. Bạn có thể lặp lại ba dòng này cho mỗi hàng được thêm vào nguồn dữ liệu. Nếu bạn chỉ định một tập hợp động (dynaset) có khả năng cập nhật, được (updatable) là đích đến, những bước này có thể thêm các

record đồng thời vào hai hoặc nhiều bảng tại cùng một thời điểm.

Cú pháp của câu lénh SQL CommandText cé ba điểm đặc trưng. (Cú pháp này không có giá trị từ SQL khung nhìn của người thiết kế query của Access). Đầu tiên, nó dùng từ khóa INSERT INTO, theo sau là tên của nguồn dữ liệu bạn muốn thêm các record

149

vào. Thứ hai, nó tạo bước tùy chọn việc liệt kê các tên field để đưa ra các giá trị Nếu bạn không thực hiện bước này, các giá trị của bạn trong bước thứ ba sẽ nối vào cuối theo thứ tự tuần tự, nó có thể bị trở ngại nếu việc thiết kế nguồn dữ liệu luôn luôn thay đổi. Thứ ba, từ khóa VALUUES xuất hiện trước khi các giá trị field cho record mới.

Cap nhột các giá trị của record

Các thủ tue OddToEven va EvenToOdd dưới đây cập nhật các giá trị nguồn dữ liệu của Column1 bing cách sử dụng đối tượng Command. Hinh 2-8 trình bày một khung nhìn khác của bảng ngay sau khi chạy các thủ tục DeleteAliRecords va InsertRecords. Chú ý rằng trong Hình 2-8 các giá tri cha ColumnI xen ké giita số lẻ và số chấn. Nếu giá trị trong Column1 là lẻ thì giá trị trong Column2 là chấn. Các thủ tục sử dụng thông tin này để quản lý nội dung của bảng.

FY 1L eee

IT Column1 Column2 Column3

| 23

|_| 4 56

| 7 89

= 10 11 12

= 13 14 15

| 1B 17 18

; Record: Wels} a! :

Hinh 2-8. Khung nhin Datasheet của bằng để cập nhật các thủ tục OddToEven và EvenToOdd.

Sub OddToEven( )

Dim cmd02E As ADODB.Command Dim intRowsChanged As Interger

Set cmd02E = New ADODB.Command 150

GY Chương 2: CÁC MÔ HÌNH TRUY CẬP DỮ LIỆU

With cmd02E

-ActiveConnection = CurrentProject.Connection

-CommandText = “UPDATE MyTable SET Columni = “& -

“Columni+1 WHERE ((-1*(Column1 Mod 2))=True)"

. CommandType = adCmdText `

-Execute intRowsChanged

Debug.Print intRowsChanged & “ rows were affected.”

End With ‘

End Sub

Sub EvenToOdd( }

Dim cmdE20 As ADODB.Command

Set cmdE20 = New ADODB.Command With cmdE20

-ActiveConnection = CurrentProject.Connection

-CommandText = “UPDATE MyTable SET Columni =“ & _

“Columnt-1 WHERE ((-1*(Column1 Mod 2))=False)"

. CommandType = adCmdText .Execute

End With End Sub

Ngày nay việc thiết kế toàn bộ các thủ tục này đã trở nên quen thuộc. Sự khác nhau quan trọng nhất giữa các ví dụ trong phiên bản này với các phiên bản trước đó là trong cú pháp của câu lénh SQL có thuéc tinh CommandText. Trong trường hợp nay, ban có thể dễ dàng thấy được cú pháp chung từ người thiết kế query trong Access. Ménh dé WHERE trong thủ tuc OddToEven chon cdc record có giá trị của Column 1a 1é. Phan Update cia cu pháp thêm 1 vào giá trị để thay đổi giá trị từ số lẻ thành số chấn. Phương pháp #xecute dùng một trong những đối số có sẵn để trả về số 151

hàng có lệnh thay đổi. Một phương pháp Prin£ đơn giản gửi giá trị này vào cửa số Immediate để xem.

Thủ tục EeenToOdd kiểm tra giá trị nhập vào Colunn2 để định rõ là nó phải trừ đi 1 từ giá trị trong Columnl. Khi giá trị nhập vào Coiumn2 không lẻ, câu lệnh SQL thao tác trên giá trị trong Column1. Thao tac nay phuc hổi các giá trị nhập vào Colmnn1 thành các giá trị ban đầu của chúng nếu EuenToOdd chạy ngay sau khi thd tue OddToEven chay.

Tap Hdp Errors

Tập hợp Errors cho phép bạn bay một số lỗi xuất hiện trong một trình ứng dụng ADO. Nó cũng trả về các lỗi từ một nhà cung cấp OLE DB. Điều kiện của lỗi đơn có thé tra vé cdc lỗi phức tạp, mỗi nguyên nhân của đối tượng Error mới được đặt trong tập hợp Errors. Một vài lỗi gây ra kết thúc chương trình; một vài lỗi khác thì không. Một lỗi mới của chương trình sẽ tự động xóa tập hợp Errors cho các giá trị đưa vào các lỗi đã liên hệ với nó. Một vài lỗi ADO đưa vào đối tượng Err hon la tap hgp Errors, nhung ban có thé sử dụng được tập hợp mới nhat. Tap hgp Errors là thích hợp nhất cho việc xử lý các lỗi dựa vào kết nối (connection - based errors) đã trả về từ cơ sở dữ liệu từ xa thông qua nhà cung cấp OLE DB của nó.

Các đối tượng Errors trong tap hgp Errors co nam thuộc tính giúp bạn tập hợp nhiều thông tin để bạn có thể điều khiển dé dang tới chúng bằng logic chương trình. Các thuộc tính Number va Description cho đối tượng Err tương đương với các thuộc tính đó.

Các thuộc tính này bổ sung cho một đối tượng khác. Thuộc tính Number trả về một số duy nhất để nhận đạng một lỗi và thuộc tính Deseription trả về một chuỗi ngắn gọn để mô tả lỗi. Thuộc tính NatiueError đưa một mã lỗi cụ thể của nhà cung cấp. Nếu ban thường làm việc với một nơi cung cấp đặc biệt, thuộc tính này phải cung cấp thông tin hữu ích về cách giải quyết lỗi. Thuộc tính Source

152

Chương 2: CAC MO HINH TRUY CAP DU LIEU

đặt tên đối tượng hoặc trình ứng dụng đã tạo ra lỗi. Thuộc tính SQLSiate có thể chứa các thông báo lỗi về cú pháp của câu lệnh SQL bắt nguồn từ server của cơ sở dữ liệu để bạn đưa ra yêu cầu của mình.

Thủ tục OpenLookOniyErrors dưới đây là sự thích ứng của một thủ tục trước đây để tạo ra tác động về thuộc tính Mode của déi tugng Connection. Cai đặt read-only cho thuộc tính này là nguyên nhân gây ra lỗi khi bạn cố gắng cập nhật vào một cơ sở dữ liệu. Lỗi này không tham gia vào tập hợp #rror. Bạn có thể bẫy lỗi và điêu khiển dé dang lại nó bằng cách sử dụng đối tượng Er.

Thành viên cuối cùng của tập hợp Errors cũng xuất hiện trong đối tượng Err. Logic bẫy lỗi (error-trapping logic) ở cuối thủ tục tránh việc in hai dòng có số và mô tả đồng nhất.

Sub OpenLookOnlyErrors() Dim cnni As New Connection Dim rsCustomers As Recordset

Dim errLoop As Error, intInErrors As Integer On Error GoTo LookOnlyTrap

cnn1,Mode = adModeRead

cnn†1.Open “Provider=Microsoft. Jet. OLEDB.4.0;" & _

*Data Source=C:\Program Files\'_ “Microsoft Office\Office\ “ &_

*Samples\WNorthwind.mdb;"

"Viết từ Northwind không đúng chính tả để sinh ra lỗi có thể bẫy được.

‘ cnn1.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _

“Data Source=C:\Program Files\Microsoft Office\Office\&_

“Samples\Northwinds.mdb;"

'Phần tử No Errors cho nhà cung cấp có lỗi sai chính tả

' cnn1.Open "Provider=Microsoft.Jets.OLEDB.4.0;" & _

“Data Source=C:\Program Files\Microsoft Office\Office” &_

“Samples\Northwind.mdb;"*

153

Set rsCustomers = New ADODB. Recordset - : +eCustomers. ActiveConnection = =ennt

'Viết từ rsCustomers sai chính tả để tạo ra lỗi có số hiệu 424 không thể bẫy:

được. -

'Viết từ cnn lọ cnn để tạo lỗi cú số hiệu 3001 khụng thể bẩy được. "

ti rsCuStomer.AcliveConnection = chn1 ANGE ai GIÁ LÀN 'Viết tên bằng dữ liệu "Customei* để tạo ta lỗi có số hiệu -214721 7900 có ~ thể bẫy lỗi được... --.... ". . = .

rsCustomers/Open “Customers. thản

re fee, eye!

‘Calc dat adModeRead. cho. ean, Mode. sinh ưa lỗi (4251) ở đây.

"Thông báo hiện ra dong: enn. Mode. có hể cấp nhật-được.

rsCustomers. Fields(* Customerlb* )= = 'xxxxx"

rsCustomers.Update .

Debug.Print reCustomers.Fields("CuslomerlD”) rsCustomers.Close

LookOnlyTrap:

intlnErrors = 0

For Each errLoop In cnn1.Errors

Debug.Print errLoop.Number,errLoop. Description cha

intinErrors = intInErrors +1 ơ

Next errLoop :

lf intInEfrors =0 Then

Debug.Print Err.Number, Err.Description ` End If |

beer

Po poe

ơ eek NE rt

edge EM ok

End Sub

Thủ tục OpenLookOnlyErrors tạo một vài kiểu lỗi khác nhau và cố gắng để ghi vào kết nối read-only. Hình 2-9 trình bày các cửa sé VBE Code va Immediate cho .các lỗi này, Các thông b báo về các mã lỗi đây đủ chỉ tiết là từ tập hợp Errors. : ..

be

154

@ chuong 2: CAC MO HINH TRUY CAP-DU LEU Paps ona EB

“the $Y bye Sree few Tile Ard bower We

on

by

Hình 2-9. Các cửa sổ VBE Code va immediate trinh bay.ma Idi tt’ cdc

kiểu lỗi đặc trưng. : ị

Các lỗi còn lại là các lỗi ADO báo cáo từ đầu đến cuối đối tượng Err. Chỉ có hai lỗi có đặc tính số âm lớn của tập hợp Er7ors.

Các lỗi còn lại là các lỗi ADO sắn có qua đối tượng Err. Một lỗi trong chuỗi nối kết (lỗi số 3706) vẫn không, báo cáo, qua. tập hợp Errors. Điều này, cộng với sự kiện thành phân cuối cùng của tập hop Errors xuất hiện trong đối tượng. Err, chỉ; VÀO, khả năng của việc bãy lỗi với đối tugng Err. Cane | thiết kế _— tự như thế này để làm việc cho các lỗi VBA-: HOGA Winn . vids Dylan fed

ce GHI CHÚ: Bạn cú thể chốn' cõu lệnh. Option ExpliờiFeng vỳẹg khai bỏo chung của một module để loại trừ khả ủăiiJ'Của cất lỗi

nào đó, như việc tham chiếu đến cắc đối tượng khống E6:

Thủ tục OpenLookOniyErrors dưới đây dưa. ra. một. vài: phương phỏp cú sắn để xử lý lỗi với đối tượng Er?..Thủ.tạe.này:tạứĂra một lỗi kể cả ghi chú rnô 'bả chỉ tiết sự sửa đổi: đoạn:mã sân: thiết. để tạo lỗi khác. Nó cũng đáp ứng cụ thể tới hái lỗi và "kể cải thường trình thủ tục xử lý lỗi phổ biến cho các thet tye khác? Na

J. = .=

m Trường hợp lỗi 3251, thủ tục thay đổi kiểu khóa để các recordset có thể được cập nhật. Lỗi này xuất hiện bởi vì kiểu khóa bị sai. Để sửa vấn để này, mã xử lý lỗi đóng recordset , tái lặp lại thuộc tính Uock7ype và mở lại đối tượng recordset.

mẽ Với lỗi 424, thủ tục không cố gắng sửa lỗi nhưng cảnh báo cho người sử dụng biết khả năng gây ra lỗi. Lỗi này xuất hiện khi một phương pháp được gọi hoặc một thuộc tính được thiết lập dựa vào một biến không khai báo như một đối tượng. Ví dụ, một lỗi kỹ thuật in có thể gây ra vấn dé nay.

m Nếu lỗi không có số hiệu lỗi 3251 hoặc 424, thường trình thủ tục in số và các thuộc tính mô tả cho đối tượng Err.

Sub LoopToUsingErrors( ) On Error GoTo DerrorsTrap Dim cnn1 As Connection Dim rsMyTable As Recordset

Set cnnt = New ADODB.Connection

cnn1.Open = “Provider=Microfoft.Jet.OLEDB.4.0 ; “ &_

“Data Source=C:\Program Files\Microsoft Office\Office\” & _

“Samples\Northwind.mdb ;”

Set rsMyTable = New ADODB. Recordset 'Mở recordset với các giá trị mặc định.

OpenRSMytable:

rsMyTable.Open “My Table”, cnn1 'Vòng lặp quét qua recordset.

Do Until rsMytable. EOF

'Tạo lỗi 424 bằng cách dùng dòng sau thay cho dòng trước r Do Until rsMyTables.EOF

If rsMytable.Fields(0) = 4 Then

‘Dong nay tao ra lỗi 3251 bởi vi recordset là chỉ đọc.

Chương 2: CÁC MÔ HÌNH TRUY CAP DU LIEU

reMyTablie.Fields(0) = 88 Else

Debug.Print.rsMyTable.Fields(0), rsMyTable.Fields(1) End If

rsMyTable.Close ErrorsExit:

Exit Sub DErrorsTrap:

If Err.Number = 3251 Then

MsgBox “OLEDB Provider does not support operation. “ & _

“Find another way to get the job done or get a new “ & _

“OLEDB Provider. Error happened in LoopToDeleteErrors.”

Debug.Print rsMyTable.LockType rsMyTable.Close

rsMyTable.LockType = adLockOptimistic Resume OpenRSMyTable

Elself Err.Number = 424 Then

MsgBox "The code tried to do something requiring an” &_

“object, such as set a property or invoke a method, “ &_

“but the code did not have an object. Check spelling.”

Else

MsgBox “Check Immediate window for error # and desc.”

Debug.Print.Err.Number, Err.Description End If

Resume ErrorsExit

End Sub

Thư Viện ADOX

Thư viện ADOX cung cấp sơ đồ và các công việc an toàn. Bạn sử dụng thư viện này để quản lý các đối tượng và chỉnh sửa kiến trúc thiết kế cơ sở đữ liệu trong trình ứng dụng của bạn. Ngoại trừ đối tượng Cafalog, tất cả các đối tượng khác có sự tương hợp với các

157

tập hợp. Bạn sử dụng các tập hợp này để thêm và tổ chức các đối tượng mới trong Cœfaiog. Các đối tượng đã chọn nhự các bảng, chỉ mục, khóa, và các cột, có các tập hợp Properiies. Bạn sử dụng chúng để quản lý hành vi của các đối tượng trong một. trình ng dụng.

Bạn quản lý các tập hợp sers và Groups để điều khiển quyền hạn cho các đối tượng ADOX khác, như các bảng, các view, vã 'c&c thủ tục. Hình 2-10 trình bày một sơ đồ của thư viện ADOX#%“ ''+

Cataiog_|

Hình 2-10. Thư ...

Một phần của tài liệu Microsoft Access 2000 Lập trình ứng dụng cơ sở dữ liệu. Tập 1 (Trang 157 - 166)

Tải bản đầy đủ (PDF)

(383 trang)