Lỗi cú pháp syntax hay lỗi biên dịch compile Lỗi cú pháp syntax error là loại lỗi thường gặp khi mới làm quen với một ngôn ngữ lập trình.. Lỗi này dễ tìm và dễ khắc phục nhất, đa số trư
Trang 1Response.write rs.fields (“Ten”)
‘ Xuong dong
Response.write “<br>”
Response.write rs.fields (“ngaysinh”)
‘ Den bang ghi tiep theo
Wend
End if
%>
</body>
</html>
b Chèn dữ liệu vào bảng
<html>
</head>
<title>Chen du lieu</title>
</head>
<body>
<%
Dim db
Set db = server.CreateObject(“ADODB.Connection”)
db.Open (”Provider=Microsoft.Jet.OLEDB.4.0;
Dim Rs
Set Rs=Server.CreateObject(“ADODB.RecordSet”)
Rs.Open “sinhvien”,db,1,3
‘Thuc hien chen du lieu
‘ Them bang ghi trong vao co so du lieu
Rs.AddNew
‘ gan cac gia tri cac voi cac truong trong co so du lieu Rs(“Holot”)=”Nguyen Thanh”
Rs(“Ten”)=”Van”
Rs(“Ngaysinh”)=Cdate(“12/4/1980”)
‘ thuc hien phuong thuc recordset.update de xac nhan nhung
‘ ca nhung gia moi
Rs.UpDate
%>
</body>
</html>
c Thay đổi dữ liệu trong bảng
<html>
</head>
<title>Thay doi du lieu</title>
</head>
<body>
<%
Dim db
Set db = server.CreateObject(“ADODB.Connection”)
Trang 2db.Open (”Provider=Microsoft.Jet.OLEDB.4.0;
Dim Rs
Set Rs=Server.CreateObject(“ADODB.RecordSet”)
‘ Xac dinh bang ghi co du lieu can thay doi
Rs.Open “Select * from sinhvien where ID=1” , db
‘Gan gia tri can thay doi
Rs(“ten”)=”Nga”
Rs(Ngaysinh)=Cdate(“14/4/1980”)
‘ Ghi nhung thay doi vao co so du lieu
Rs.Update
%>
</body>
</html>
d Xoá bảng ghi trong bảng
<html>
</head>
<title>Thay doi du lieu</title>
</head>
<body>
<%
Dim db
Set db = server.CreateObject(“ADODB.Connection”)
db.Open (”Provider=Microsoft.Jet.OLEDB.4.0;
Db.Execute (“delete * from sinhvien where ten=’Nga’”)
%>
</boby>
</html>
Trang 3CHƯƠNG 6
DÒ LỖI VÀ CÁCH XỬ LÝ
1 Các loại lỗi
a Lỗi cú pháp (syntax) hay lỗi biên dịch (compile)
Lỗi cú pháp (syntax error) là loại lỗi thường gặp khi mới làm quen với một ngôn ngữ lập trình Lỗi này dễ tìm và dễ khắc phục nhất, đa số trường hợp trình biên dịch hay thông dịch sẽ chỉ định số hàng và vị trí ký tự trong hàng có lỗi để báo cho người lập trình biết
Ví dụ: Xét trang error.asp sau:
<html>
<head>
<title>Thong bao loi</title>
</head>
<body>
<%
response.write "Hom nay, ngày: " & date(),
& " chao mung cac ban"
%>
</body>
</html>
Kết quả muốn hiển thị: Hom nay, ngay 18/02/2003, chao mung cac ban
Tuy nhiên, trình duyệt sẽ thông báo lỗi khi chạy trang error.asp này như sau: Thông báo lỗi chỉ rõ lỗi ở đây là lỗi cú pháp (Syntax error), lỗi trang error.asp, dòng thứ 8 (kể từ trên xuống), cột thứ 42 (kể từ trái qua) Dấu phẩy (,) trong mã trên được hiểu là một ký tự, như vậy phải được đặt trong dấu nháy kép, đồng thời phải
sử dụng ký tự nối hàng “_” ở cuối hàng thứ 8 (để nối với hàng thứ 9), như vậy đoạn
mã phải được sửa lại như sau:
<%
response.write "Hom nay, ngày: " & date()_
& " ,chao mung cac ban"
%>
Trang 4Lưu ý: trình thông dịch chỉ báo nơi nó tìm ra lỗi, nhưng không phải nhất thiết là nơi
lỗi thực sự xảy ra, vì vậy, cần xem xét đến thứ tự đúng của các dấu nháy, các ký tự nối chuỗi, nối hàng, trong dòng có thông báo lỗi
Đối với những lỗi cú pháp do sai chính tả, từ khoá hay tên hàm thì dễ phát hiện hơn do các thông báo lỗi thường chỉ định vị trí thực sự của lỗi
Ví dụ: Để in ra ngày tháng của ngày mai, xét file error1.asp sau:
<html>
<head>
<title>Ngay mai</title>
</head>
<body>
<%
response.write DateAdd(Now(),"d",1)
%>
</body>
</html>
Khi thực thi error1.asp, ta nhận thấy lỗi sau:
Xuất hiện lỗi trên là do sai cú pháp của hàm DateAdd, hàm dateAdd có dạng : DateAdd(chuỗi_chu_kỳ, độ_gia, ngày_bắt_đầu), và cách viết đúng như sau:
Response.write DateAdd(“d”,1,now())
Trình biên dịch đã phát hiện ra sai kiểu dữ liệu, vì thông số thứ hai là kiểu integer nhưng ta đã cung cấp giá trị kiểu string
Một số lỗi thường gặp khác khó tìm, phát sinh khi xây dựng các trang có sử dụng cấu trúc script, hay những lệnh lồng nhau như if then else end if hay do while loop
Ví dụ: Xét trang login.asp sau:
<html>
<head>
<title>Login</title>
</head>
<body>
<%
ho=request.form("fname")
ten=request.form("lname")
if ho<>"" then
Trang 5response.write "Chao ban," & ho & "<b>" & ten & "</b>" else
response.write "Ban chua nhap ten"
else
response.write " Ban chua nhap ho"
end if
%>
</body>
</html>
Khi thực thi login.asp, sẽ xuất hiện lỗi như sau:
Lỗi được thông báo ở dòng 14, và cần một lệnh “End”? Xét lại trang, bạn sẽ thấy lỗi là do thiểu lệnh End if, không phải End
b Lỗi ngữ nghĩa (semantic) hay lỗi thực thi (runtime)
Lỗi thực thi là lỗi chỉ phát sinh khi đoạn mã đã được chạy, hợp lệ khi biên dịch hay phân tích cú pháp
- Lỗi làm ngưng thực thi: lỗi thường có phản hồi khi chạy, trường hợp này
rất dễ biết lỗi nằm ở đâu
Ví dụ: Trang error3.asp sau đây khai báo một mảng có 6 phần tử:
<head>
<title>Khai bao mang</title>
</head>
<body>
<%
dim arr(5)
arr(6)="thong bao loi"
%>
</body>
Nếu thực thi trang error3.asp, thông báo lỗi xuất hiện vì đã đặt giá trị cho phần
tử có chỉ số 6 Ở đây, khi khai báo mảng, mảng sẽ có 6 phần tử, chỉ số từ 0 đến 5
Vì kiểu lỗi là lỗi thực thi nên thông báo lỗi chỉ rõ số hàng và đặc tả lỗi, giúp người lập trình nhanh chóng phát hiện lỗi và cách khắc phục lỗi
Trang 6- Lỗi tạo kết quả sai: đây là lỗi rất khó tìm và sửa, vì mã vẫn tiếp tục thực
hiện nhưng tạo kết quả sai
Ví dụ: Xét trang error4.asp nhận giá trị ngày tháng năm sinh nhập từ 1 form:
<head>
<title>ngay thang</title>
</head>
<body>
<%
nsinh=request.form("ngaysinh")
response.write "Ngay sinh cua ban la:" & nsinh
intday=day(nsinh)
intmonth=month(nsinh)
intyear=year(nsinh)
response.write "<br>Ngay: " & intday & "<br>"
response.write "Thang: " & intmonth & "<br>"
response.write "Nam: " & intyear
%>
</body>
+ Nếu nhập đúng giá trị kiểu ngày-tháng-năm, sẽ cho kết quả đúng
+ Giả sử chỉ nhập năm: 1978, ta thấy trang vẫn thực thi nhưng cho kết quả sai
Như vậy, nếu không xem xét kỹ, chúng ta sẽ không phát hiện ra lỗi