LAP TRINH QUERY BANG SQL VA ADO
Chương 4: Chương 4: THAO TAC DU LIEU BANG QUERY
Dim cnn1 As ADODB.Connection
Dim cat1 As Catalog Dim proc1 As Procedure Dim cmd1 As Command 'ết nối tham chiếu.
Set cnn1 = CurrentProject.Connection Set cat1 = New Catalog
cat1.ActiveConnection = cnni Set cmd1 = New Command cemd1.ActiveConnection = cnn1
‘Thue thi SQL dé tao thủ tục.
cnnt.Execute "Create Procedure DeleteThese As " & _
“Delete From FamilyMemberNames Where Fam!D>=10"
Liệt kê các thành phần của lập hợp các thủ tục.
Đối với thủ tục DeleteThere, thiết lập các thuộc tính command và thực thi nó.
For Each proc1 In cat1 .Procedures lf proc1.Name = “DeleteThese" Then
cmd1.CommandText = proct.Name cmd† .CommandType = adCmdStoredProc cmd1.Execute
End If Next proc1 End Sub
Thủ tục CreateProcToDelete mở đầu bằng một loạt những câu lệnh khai báo và lệnh gán để hỗ trợ về mặt logic cho việc tạo và chạy thủ tục. Phương pháp Execute cia déi tugng Connection tao ra thủ tục bằng cách chạy một câu lệnh SQL. Tại thời điểm này một lỗi sẽ xảy ra nếu thủ tục đã tổn tại. Phương pháp Execute thêm thủ tục DelsteThese vào tập hợp Procedures trong danh mục kết nối.
Bởi vì thủ tục năm bên trong một tập hợp các thủ tục, bạn có thể liệt kê các thành phần của tập hợp bang vong lap For...Each.
Ví dụ sử đụng một vòng lặp để xác định vị trí của ĐeleteThese.
Chuang 4: THAO TAC DU LIEU BANG QUERY
tìm thấy tha tuc, n6 gdn gid tri thuéc tinh Name cua thu tuc vao thudc tinh CommandText cha déi tugng Command. Sau đó nó thiét lập thuộc tính CommandType cia déi tugng Command cho adCmdStoredProc. Hai câu lệnh gán này tạo ra một chuỗi Execute DeleteThese cha SQL. Thực hiện phương pháp Execute cho đối tượng Command đề khởi động thủ tục trong Jet và gỡ bỏ cdc record tir bảng FamilyMemberNames.
Bạn có thể tạo thủ tục trên mềm dẻo và mạnh hơn bằng hai cách. Thứ nhất, một trình bẫy lỗi tỷ mỹ có thể cách ly một lỗi đặc biệt đưa tới thủ tục từ những loại lỗi khác. Thứ hai, bạn có thể tạo một thủ tục nhận những tham sé cho field FamID. Vi du dưới đây sử dụng câu lệnh CREATE PROC để định nghĩa một query parameter dùng để xóa tất cả các record trong bảng đữ liệu FamilyMemberNames cé gia tri cia field FamID lớn hơn hay bing giá trị được chỉ ra vào lúc chạy. Đoạn chương trình làm cho bạn nhớ lại những bước để thiết lập một giá trị tham số lệnh. Nhắc lại rằng, bạn phải tạo tham số rồi thêm nó vào tập hợp Parameters, sau đó gán giá trị cho nó. Ví dụ còn bẫy những lỗi xảy ra khi bạn cố tình tạo một thủ tục trùng tên với một thủ tục khác đã tồn tại.
Sub CreateProcToDelete2() On Error GoTo Delete2Err Dim cnni As ADODB.Connection Dim cmdt As ADODB.Command Dim prm1 As Parameter
'Kết nối tham chiếu.
Set cnn1 = CurrentProject.Connection
'Kiểm tra cho các lỗi bất ngờ.
' Err.Raise 1
'Thực thi SOL để tạo thủ tục.
cnn1.Execute "Create Proc DeleteThese " & _
“(Parameter1 Long) As " & _
“Delete From FamilyMemberNames ” & _
327
"Where Fam|D>=Parametert .
‘An dinh SQL te thé tuc cho lệnh.
Set cmdi = New ADODB.Command With cmd1
.ActiveConnection = cnn1 .CommandText = "DeleteThese"
.CommandType = adCmdStoredProc End With
"Thiết lập tham số của thủ tục.
Set prm1 = cmd† .CreateParameter(°Parameter1", _ adinteger)
cmd1.Parameters.Append prm†
prm1.Value = 10
'Gọi thực hiện câu lệnh SQL của thủ lục trong lệnh.
cmd1.Execute Delete2Exit:
Exit Sub Delete2Err:
if Err.Number = -2147217900 Then
‘Bay lỗi cho thủ tục đã có trước đó.
cnn†.Execute "Drop Proc DeleteThese"
Resume Else
MsgBox "The Program generated an unanticipated " & _
“error. Its number and description are " &
Err.Number & ": " & Err, Description, vbCritical, _
“Programming Microsoft Access 2000"
End if
Resume Delete2Exit End Sub
Sa
Chương 4: THAO TÁC DU LIEU BANG QUERY
Khi bạn chỉ rõ một tham số trong câu lệnh CREATE PROC, kể cả sự chọn lựa tham số vào sau tên thủ tục nhưng trước từ khóa AS. Bạn có thể khai báo tên và kiểu dữ liệu trong dấu ngoặc đơn như đã trình bày ở trên. Bạn có thể tham chiếu đến tham số một lần nữa trong mệnh đề WHERE để giới hạn tác động của thủ tục.
Cú pháp này giống như trong query parameter mà bạn đã tạo trong khung nhìn Design.
lưu ý rằng thực sự bạn không phải lặp qua tập hợp Procedures để thực hiện một thủ tục xác định. Bạn có thể tham chiếu đến tên của nó như bạn chỉ ra adCmdStoredProc như là giá trị che thuge tinh CommandType cia cau lénh.Vi dụ gán hằng số 70 cho tham số (Parameter1) để nhất quán với ví dụ truớc, nhưng bạn có thể sử dụng một câu lệnh gọi hàm InputBox hoặc một form để thu thập giá trị cho tham số.
Vi du này còn có bẫy lỗi cơ bản cho tình huống có một thủ tục cùng tên đã tôn tại (số hiệu lỗi là -2147217900). Thủ tục CreateProcToDelete2 chỉ đơn giân là ngưng hoạt động thủ tục cũ khi lỗi xảy ra do thực hiện lệnh DROP PROC của SQL. Cú pháp của câu lệnh DROP PROC là “Drop Proc ProcedureName."