一条数据库命令引发的“血案”。。。。。。

gpedit250715312 2010-08-03 04:09:37
在做ASP开发使用SQL的添加命令的过程中:insert into 表名() values(),总是提示INSERT INTO语句的语法错误,重试了N次都还是出错,刚开始以为是哪个变量名写错了(比如说如果是文本类型的变量应该用: ' "&变量& " ',而数字类型的变量就可以去掉最外面的单引号就可以的),但是经过我一次又一次的检验,我写的没有错误。包括后来我又用了、添加到数据库的另一种方法:rs.addnew rs.update,可惜的是,经过我的尝试,最后还是出错,而且我发觉都是字段类型为“数字”型的变量出错。。。后来干脆把数据库中所有字段类型为“数字”型的都改为“文本”型的,这时再新测试。靠,奇迹发生了,居然没有出错,而且无论是用INSERT INTO 方法添加,还是用后来的rs.addnew rs.update方法添加都成功了。。。此时,我得出的结论就是,是不是ACCESS数据库本身的问题呢?还是哪里需要设置?(我用的ACCESS是2003的),如果以后能把字段类型设置成文本的都设置成文本的岂不是很好?也不会出错,但是如果文本类型的太多了也不知道会有什么不妥??

以下是我的HTML代码,还请高手帮忙分析下哈。。。

<%@codepage = 936%>
<!--#include file="../include/function.asp"-->
<!--#include file="conn.asp"-->
<!--#include file="fckeditor/fckeditor.asp"-->
<%
response.charset="GBK"
if session("admin")="" then
call sussLoctionHref("非法登录","admin_login.asp")
end if
dim picdir
picdir = "goods"

if request.form("send") = "添加商品" then
dim rs,sql,goodsname,goodscode,goodsweight,goodsnumber,goodsnew,goodshot,goodsfast,goodsunit,goodsprice1,goodspoint,goodsprice2,picdir1,picdir2,goodspoint,goodsinfo,goodscontent
goodsname=request.form("goodsname")
goodscode=request.form("goodscode")
goodsweight=request.form("goodsweight")
goodsnumber=request.form("goodsnumber")
goodsnew=request.form("goodsnew")
goodshot=request.form("goodshot")
goodsfast=request.form("goodsfast")
goodsunit=request.form("goodsunit")
goodsprice1=request.form("goodsprice1")
goodsprice2=request.form("goodsprice2")
goodspoint=request.form("goodspoint")
picdir1=request.form("picdir1")
picdir2=request.form("picdir2")
goodsinfo=request.form("goodsinfo")
goodscontent=request.form("goodscontent")

if goodsnew=1 then
goodsnew = true
elseif goodsnew="" then
goodsnew = false
end if



if goodshot=1 then
goodshot = true
elseif goodshot="" then
goodshot = false
end if


if goodsfast= 1 then
goodsfast= true
elseif goodsfast="" then
goodsfast=false
end if

if goodsunit= "" then
goodsunit="个"
end if

set rs=server.createobject("adodb.recordset")
sql="select * from goods"
rs.open sql,conn,1,3

rs.addnew
rs("goods_name")=goodsname
rs("goods_code")=goodscode
rs("goods_weight")=goodsweight
rs("goods_number")=goodsnumber
rs("goods_new")=goodsnew
rs("goods_hot")=goodshot
rs("goods_fast")=goodsfast
rs("goods_unit")=goodsunit
rs("goods_price1")=goodsprice1
rs("goods_price2")=goodsprice2
rs("goods_point")=goodspoint
rs("goods_pic1")=picdir1
rs("goods_pic2")=picdir2
rs("goods_info")=goodsinfo
rs("goods_content")=goodscontent
rs.update

call close_rs

response.write "<script>alert('商品发布成功!');location.href='admin_add_goods.asp'</script>"
end if
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>后台管理</title>
<link rel="stylesheet" type="text/css" href="style/admin.css" />
</head>
<body>
<div id="addnew">
<h3 style="text-align:center;color:red;margin:20px;">添加商品</h3>
<form method="post" name="add" action="admin_add_goods.asp">
<p>商品名称:<input type="text" name="goodsname" class="text" /></p>
<p>商品编号:<input type="text" name="goodscode" class="text" /></p>
<p>商品重量:<input type="text" name="goodsweight" class="text1" /> kg</p>
<p>商品库存:<input type="text" name="goodsnumber" class="text1" /></p>
<p>加入推荐:<input type="checkbox" name="goodsnew" value="1" /> 新品 <input type="checkbox" name="goodshot" value="1" /> 热卖 <input type="checkbox" name="goodsfast" value="1" /> 速递</p>
<p>商品单位:<input type="text" name="goodsunit" class="text1" /></p>
<p>市场价格:<input type="text" name="goodsprice1" class="text1" /> 元</p>
<p>本店价格:<input type="text" name="goodsprice2" class="text1" /> 元</p>
<p>赠送积分:<input type="text" name="goodspoint" class="text1" /> </p>
<p>上传小图:<input type="text" readonly="readonly" name="picdir1" /> <a href="###" onclick="javascript:open('upfile.asp?picdir=<%=picdir%>','upfile','width=400,height=200')">上传</a></p>
<p>上传大图:<input type="text" readonly="readonly" name="picdir2" /> <a href="###" onclick="javascript:open('upfile2.asp?picdir=<%=picdir%>','upfile','width=400,height=200')">上传</a></p>
<p>商品简介:<textarea name="goodsinfo"></textarea></p>
<p>详细内容:</p>
<p>
<%
Dim oFCKeditor
Set oFCKeditor = New FCKeditor '创建一个编辑器的实例
oFCKeditor.BasePath = "fckeditor/" '配置编辑器的路径,我站点根目录下的一个目录
oFCKeditor.ToolbarSet = "Default" '完整和简化.Basic
oFCKeditor.Width = "100%" '编辑器的长度
oFCKeditor.Height = "400" '编辑器的高度
oFCKeditor.Value = "" '这个是给编辑器初始值
oFCKeditor.Create "goodscontent" '以后编辑器里的内容都是由这个content 取得
%>
</p>
<p><input type="submit" value="添加商品" name="send" class="submit" /></p>
</form>
</div>
</body>
</html>


数据库中表[goods]的字段有:goods_id,goods_name,goods_code,goods_weight,goods_number,goods_new,goods_hot,goods_fast,goods_unit,goods_price1,goods_price2,goods_point,goods_pic1,goods_pic2,goods_info,goods_content.其中goods_weight,goods_number,goods_point是数字型的,goods_new,goods_hot,goods_fast是“是/否”型的,goods_price1,goods_price2是货币型的,其它的都是文本型的。
...全文
147 点赞 收藏 19
写回复
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
gpedit250715312 2010-08-07
[Quote=引用 6 楼 chinmo 的回复:]
给你一个建议,对于是数字类型的
判断是否数字,是才允许程序执行,如果不是,那就提示有错误

应该是你传送过来的过程中,类型变了,不是数字类型了
比如多了空格一类的
[/Quote]
哎,还是没有解决,分还是给你算了,回去后,再仔细琢磨琢磨。。。
回复
php_wsd 2010-08-06
你插入的数字型字段是不是有一个表单名称写错了,导致读取的数据是空,却要向一个数字型字段里面插入,会出错的。
建议你先将所有的数字型字段从sql语句中删除保留一个,再插入。如果成功,再增加一个字段,再插入……
回复
gaozhen1990 2010-08-06
。。是不是编码有问题呀。。。 或者你insert into 一个字段一个字段的试试。。
回复
in0512 2010-08-05
现在有人做站还用access啊.......
如果是简单企业站用ACCESS倒是可以考虑的/

将你的所有数字类型的值传过来后,response.write 值
response.end
一下,看是什么值.

或者改成sql="insert into..." 的语法
response.write sql
response.end

看得出的是什么,对比就可以了
回复
beluker1 2010-08-05
数据接收后,过滤一下。

检查下,goods_weight,goods_number,goods_point是数字型的,对其过滤,强转后,再写库

回复
gpedit250715312 2010-08-05
[Quote=引用 15 楼 chinmo 的回复:]
引用 14 楼 gpedit250715312 的回复:
引用 11 楼 fumingk 的回复:
问题都说不明白 搞毛编程 回家种地去吧


不会吧,兄弟,。。。别人都明白了,为什么你没明白?


靠,不知道你搞什么

早就告诉你解决思路了

还在这耗什么呢?
[/Quote]

嗯,你说的我明白一些,但是不知道怎么实现。。。
不好意思,我也是才自学ASP的,菜的很,不要怪啊。。。
回复
[Quote=引用 14 楼 gpedit250715312 的回复:]
引用 11 楼 fumingk 的回复:
问题都说不明白 搞毛编程 回家种地去吧


不会吧,兄弟,。。。别人都明白了,为什么你没明白?
[/Quote]

靠,不知道你搞什么

早就告诉你解决思路了

还在这耗什么呢?
回复
gpedit250715312 2010-08-05
[Quote=引用 11 楼 fumingk 的回复:]
问题都说不明白 搞毛编程 回家种地去吧
[/Quote]

不会吧,兄弟,。。。别人都明白了,为什么你没明白?
回复
fumingk 2010-08-04
问题都说不明白 搞毛编程 回家种地去吧
回复
gpedit250715312 2010-08-04
[Quote=引用 9 楼 wgsnet 的回复:]
友情帮顶下!顺便学习学习!
[/Quote]
我晕。。。你这也算帮助啊。。。
帮我分析分析问题啊。。。
回复
kaifadi 2010-08-03
“血案”找老包啊,发这里是不是发错地方了。呵呵!
回复
[Quote=引用 6 楼 chinmo 的回复:]
给你一个建议,对于是数字类型的
判断是否数字,是才允许程序执行,如果不是,那就提示有错误

应该是你传送过来的过程中,类型变了,不是数字类型了
比如多了空格一类的
[/Quote]

同意楼上的,是你要添加的值不符合你设定的数据类型,含有非数字字符是无论如何也插入不了的,这个你在插入数据之前最好判断一下,客户端用正则,服务端可用函数IsNumeric()判断或者Int()转换
回复
给你一个建议,对于是数字类型的
判断是否数字,是才允许程序执行,如果不是,那就提示有错误

应该是你传送过来的过程中,类型变了,不是数字类型了
比如多了空格一类的
回复
gpedit250715312 2010-08-03
是一致的
如果表里面的数据类型是文本的,在写入变量的时候就是:'"&变量&"'
如果表里面的数据类型是数值的,在写入变量的时候就是:"&变量&",也就是去掉单引号就可以了。。。但是只要我的表里面有数据类型是数值的时候,在执行SQL命令时就会出错,奇怪的是,当我把表里面数据类型都换成文本时,却执行正常,不会出错,郁闷死了,都不知道是咋回事。。。
回复
BlueSky4014 2010-08-03
数据类型要和表里的一致
回复
灬上海爽爷 2010-08-03
不是太明白你的意思。。不过在插入INT型的数据前可以先用CINT()函数转换一下,通常就不会出错了。
回复
gpedit250715312 2010-08-03
为什么还没人来啊。。。。小弟可是在线等待啊。。。
回复
gpedit250715312 2010-08-03
高手速来帮忙看看,小弟先在此谢过了。。。
回复
发动态
发帖子
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
社区公告
暂无公告