ASP 参数问题? Access SQL问题?

Masterd 2009-12-17 10:05:38
近期在做一个功能时发生怪问题.

==func.asp==
Function GetProductModel(productid)
Set conn1=Server.CreateObject("ADODB.Connection")
Set rs1=Server.CreateObject("ADODB.Recordset")
conn1.open DBCONN
sql1="select * from product where productid = "&productid
rs1.open sql1,conn1
GetProductModel = rs1("productmodel")
end Function

==show.asp==
tempid=5
<%=GetProductModel(tempid)%>

出现错误为
//错误类型:
Microsoft JET Database Engine (0x80040E14)
语法错误 (操作符丢失) 在查询表达式 'productid =' 中。

好久不来论坛了,应该没啥分...
请各位解答,xiexie!!
...全文
114 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
iscandy 2009-12-18
  • 打赏
  • 举报
回复
而且, clng(空字符串) 是会导致“类型不匹配”错误的

iscandy 2009-12-18
  • 打赏
  • 举报
回复
我估计是你调用函数时传递的 productid 参数为空,导致等号后面没有东西,不是一个完整的sql语句,所以出错。
Masterd 2009-12-18
  • 打赏
  • 举报
回复
DBCONN是可以获得的,因为如果我把sql1直接写成不带where的,是可以通过的。
甚至于,把where后面的调节productid直接定义为productid=4,也是可以通过的。
我打印过了tempid,都是正常的。
有眉目了,打印了因为tempid是数组循环取的,发现最后一个tempid没有取道值
tempidi=8
tempidi=4
tempidi=1
tempidi=2
tempidi=
估计报错是报的最后一个,之前的测试都是测得前几个,待我去调一下,谢谢!
yan11cn 2009-12-18
  • 打赏
  • 举报
回复
DBCONN 应该就是连接字符串吧
他要是没写这个后面肯定提示找不到数据库之类的了。。。
gxq323 2009-12-18
  • 打赏
  • 举报
回复
DBCONN 这个估计你没有获得值
gxq323 2009-12-18
  • 打赏
  • 举报
回复
有可能你没打开conn,
或者

Function GetProductModel(productid)
Set conn1=Server.CreateObject("ADODB.Connection")
Set rs1=Server.CreateObject("ADODB.Recordset")
conn1.open DBCONN
sql1="select * from product where productid = "&productid
rs1.open sql1,conn1
if not rs1.eof then
GetProductModel = rs1("productmodel")
else
GetProductModel =""
end if
end Function
其他的好像没什么错误
黑心 2009-12-18
  • 打赏
  • 举报
回复
把你的每一个tempid打印出来:

tempid=Products(i)
response.write "<br>tempid"&"i"&"="&tempid

看看你都传入了些什么。
Masterd 2009-12-18
  • 打赏
  • 举报
回复
顶一下,的确比较棘手。.
Masterd 2009-12-18
  • 打赏
  • 举报
回复
继续补充,我用typename(productid),发现是string,sql1&string 这样不对马?
Masterd 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 iscandy 的回复:]
我估计是你调用函数时传递的 productid 参数为空,导致等号后面没有东西,不是一个完整的sql语句,所以出错。
[/Quote]

我也是这么以为的,但是在打印sql1时,发现传过去的参数是可以打印出来了,太奇怪了。
Masterd 2009-12-17
  • 打赏
  • 举报
回复
睡前顶一把!!
yan11cn 2009-12-17
  • 打赏
  • 举报
回复
我晕了
0x800A000D错误是:错误引用rs变量(rs对像已关闭或未定义)
你再好好看看吧 我下了
Masterd 2009-12-17
  • 打赏
  • 举报
回复
恩,刚试过,报错:
错误类型:
Microsoft VBScript 运行时错误 (0x800A000D)
类型不匹配: 'clng'

继续补充,用response.write sql1时,就算用传参的话,sql的语法是正确的,例如:

sql1是select * from product where productid = 4 这个4就是当时Products(5)的值,
但是就是在conn.open时报错误.
yan11cn 2009-12-17
  • 打赏
  • 举报
回复
那已经是字符串了
用sql1="select * from product where productid = "&clng(productid)
Masterd 2009-12-17
  • 打赏
  • 举报
回复
ProductList = Session("ProductList") '商品ID列表字符串
Products = Split(ProductList, ",") '分割物品种类为数组
For i=0 To UBound(Products)
tempid=Products(i)
productmodeltemp=GetProductModel(tempid)
。。。。
yan11cn 2009-12-17
  • 打赏
  • 举报
回复
这个数组怎么来的?
Masterd 2009-12-17
  • 打赏
  • 举报
回复
恩,绝对灵异,是这样的 我如果不用参数,直接改成 sql1="select * from product where productid = 4" 这个是没问题的。

或者使用
productid = 4
sql1="select * from product where productid = "&productid
这个也是没有问题。

就是用传参,就会报错。

另外,补充一点,传过来的参数,是从数组过来的,不知是否有关系。
tempid=Products(i)
<%=GetProductModel(tempid)%>
yan11cn 2009-12-17
  • 打赏
  • 举报
回复
Microsoft JET Database Engine (0x80040E14) 是sql语句的字段名错误,或数据类型不匹配

你看看是不是数据库中的那个字段不是productid

要是不行就试试
sql1="select * from product where productid = "&clng(productid)

感觉有些灵异。。。
Masterd 2009-12-17
  • 打赏
  • 举报
回复
yan11cn
productid在access里是自动编号,递增 长整形.如果按照你的改法的话,也会报错:
错误类型:
Microsoft JET Database Engine (0x80040E07)
标准表达式中数据类型不匹配。

谢谢!
yan11cn 2009-12-17
  • 打赏
  • 举报
回复
productid 是字符串吗 是的话修改成:
sql1="select * from product where productid = '"& productid & "'"

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧