今天,用access的存储过程(也谈不上是存储过程,只是access的查询设计器)实现模糊查询。
access的查询语句如下:
SELECT * FROM company WHERE company Like '*' & [p_company] & '*' ORDER BY beian.id DESC;
以上是getdata存储过程。
asp使用存储过程语句如下:
set cmd = server.CreateObject("ADODB.Command") with cmd .ActiveConnection = conn .CommandType = &H0004 .CommandText = "getdata" end with Dim resultRS, resultArray Set resultRS = cmd.Execute(,request("keyword")) If Not resultRS.EOF Then resultArray = resultRS.GetRows() End If Set resultRS = Nothing Set cmd = Nothing conn.Close Set conn = Nothing
现在问题出来了,resultRS里面获取不到任何数据,也就是cmd.Execute没有返回数据集,但是在access数据库里面输入变量名,却能获取到数据,如果你讲模糊查询改为精确查询,却能正常获取数据,这使我很郁闷,难道不能使用模糊查询?
在网上找了很多资料,都无果,自己反复修改代码都找不到原因,但是一次无意的修改,却能获取到了数据,那就是在打开数据库连接的语句。
在conn.asp里面是这样的。
<% dim conn dim connstr dim db db="db/#beian.mdb" Set conn = Server.CreateObject("adodb.connection") connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db) '如果你的服务器采用较老版本Access驱动,请用下面连接方法 'connstr="driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath(db) conn.Open connstr %>
原因在于connstr这个打开数据库连接语句,
如果使用connstr=”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” & Server.MapPath(db)这个语句,模糊查询就获取不到数据。
如果改为下面的那个数据库连接语句,就能查询到数据,原理,我不懂,只知道问题出在这儿。如果大家知道其中的原理,请帖出来,一起了解。