Cơ sở dữ liệu
5.7 XÁC ĐỊNH LỆNH VÀ TRẢ LỜI DỊCH VỤ
Điều quan trọng sau khi đọc được nội dung của tin nhắn là cần phải xác định được lệnh dịch vụ đã được gửi qua tin nhắn. Để làm được điều đó chương trình SMSComm phải xác định chuỗi ký tự liên tục không chứa ký tự „cách‟ sp đầu tiên là tên của lệnh. Và cũng giống như các cú pháp lệnh khác, SMSComm cũng phải sử dụng các ký tự đặc biệt như ký tự cách (space) hoặc „:‟ để phân biệt lệnh và tham số.
Để xác định được lệnh và các tham số, cần qui định cú pháp chung của các lệnh , ví dụ:
<lệnh> <thơngsố>:<thamsố1>,<thamsố2>,v. v... Các tin nhắn có nội dung khác với cú pháp qui định sẽ được hiểu như là các lệnh cần trợ giúp, khi đó SMSComm sẽ gửi trả lại một tin nhắn nhằm trợ giúp người dùng.
Xác định lệnh dịch vụ
Chương trình 5-7 dưới đây mơ tả cách SMSComm xử lý nội dung tin nhắn xác định lệnh dịch vụ.
Chƣong trình 5-7
Private Sub SMSCheck() Dim ServiceCMD
„ Nếu tin nhắn có dưới một ký tự thì gửi trả lại tin nhắn hướng „dẫn
If Len(MsgContents) <= 1 Then
HelpReturn „ gọi chương trình trả lời hướng dẫn
Exit Sub End If
„Xác định lệnh bằng chuỗi ký tự liên tục trc khi
„xuất hiện ký tự cách (space) đầu tiên
If InStr(1, MsgContents, " ", vbTextCompare) = 0 Then ServiceCMD = UCase(MsgContents)
Else
ServiceCMD = UCase(Left(MsgContents, InStr(1, MsgContents, " ", vbTextCompare) - 1))
Hệ thống nhắn tin nội bộ trên cơ sở ghép nối môđem GSM ứng dụng SMS
End If
„Phân loại lệnh và gọi các chương trình trả lời tin nhắn tương ứng Select Case ServiceCMD
Case "CHAT"
ChatLoad „gọi cương trình xử lý Chat Case "HELP"
HelpReturn „ gọi chương trình trợ giúp
Case Else
LookupReturn „gọi chương trình dịch vụ tra cứu End Select
End Sub
Trong đoạn chương trình kể trên, nội dung của tin nhắn nhận được đã được lưu vào biến MsgContents. Mỗi dịch vụ (hay mỗi lệnh dịch vụ) đều được gán với cơ sở dữ liệu tương ứng. Tuỳ theo định nghĩa quan hệ giữa lệnh và cơ sở dữ liệu, SMSComm sẽ tìm đến bảng cơ sở dữ liệu tương ứng để lấy thông tin trả lời.
Xác định thông số dịch vụ
Việc xác định thông số được thực hiện và lưu vào biến ServID:
pos1 = InStr(1, MsgContents, " ", vbTextCompare)
pos2 = InStr(pos1 + 1, MsgContents, " ", vbTextCompare) If pos2 <> 0 Then
ServID = UCase(Mid(MsgContents, pos1 + 1, pos2 - pos1)) Else
ServID = UCase(Right(MsgContents, Len(MsgContents) - pos1)) End If
Xác định tham số dịch vụ
Việc xác định tham số dịch vụ được thực hiện thông qua việc truy vấn thông tin trả lời dịch vụ.
Trả lời dịch vụ
Việc trả lời dịch vụ được thực hiện bằng cách truy vấn cơ sở dữ liệu phù hợp với lệnh dịch vụ, lưu các thông tin truy vấn được vào biến SMSTxT và sử dụng chương trình con ReturnSMS (xem 5.5) để gửi lại thông tin yêu cầu dưới dạng SMS cho người yêu cầu thông tin.
Đoạn chương trình sau minh họa các truy vấn khác nhau tùy thuộc vào tham số và thông số của lệnh:
Select Case ServID Case "LIST"
Hệ thống nhắn tin nội bộ trên cơ sở ghép nối môđem GSM ứng dụng SMS
GoTo Line2 Case ServCMD
qlstr = "select " & IndexCol & "," & DescpCol & " from " & tab_name GoTo Line2
Case "CMD"
sqlstr = "select * from " & tab_name GoTo Line3
Case Else
If InStr(1, ServID, ":") > 0 Then GoTo Line1
ElseIf (ServID = UCase(IndexCol)) Or (InStr(1, ServID, ",", vbTextCompare) > 0) Then
GoTo Line11 Else
sqlstr = "select * from " & tab_name
sqlstr = sqlstr & " where " & IndexCol & " like '*" & ServID & "*'" GoTo Line2
End If End Select
Như vậy:
- Khi thông số của lệnh là “LIST”, hệ thống sẽ truy vấn cơ sở dữ liệu và lấy tồn các thơng tin index và description chẳng hạn toàn bộ mã hàng, tên hàng có trong cơ sở dữ liệu để gửi cho người yêu cầu.
- Khi thông số của lệnh là “CMD”, hệ thống sẽ truy vấn cơ sở dữ liệu để tìm ra tồn bộ các tham số có thể dùng với lệnh đã gửi để gửi cho người yêu cầu. - Các trường hợp khác (Case Else), chương trình sẽ tìm những thơng tin
phù hợp với tham số của lệnh đã gửi để gửi tới người yêu cầu thông tin.