日期:2014-05-16  浏览次数:20785 次

要把一个遍历语句改写成不循环的
一个产品资料库:产品编号,产品名称,产品图片1,产品图片2,产品图片3,产品图片4,产品图片5...(每个产品的图片数量不一样,我在数据库中设计了5个可以存放图片路径的字段,在前端,用户可以自行选择上传图片的个数)
       数据库结构:id,productname,images1,images2,images3,images4,images5...

现在情况是:上传程序写好了,图片也能正常上传,和上传图片同一个form下的文本信息也能成功写入数据库对应的字段。
问题是:图片的路径要写入数据库,我下面的写法不对。

原始思路:
        用下面的for each ...in....next遍历了所有上传文件,能成功把所有上传的文件路径\文件名都写入数据库,问题是同一个产品的每个图片路径都写入了不同 的行中,没有实现我的目的:“同一个产品的图片只写入同一行”----也就是说,下面这个遍历让所有图片的路径全部写在了image1字段内,没有如我预计一样写入image1,image2,image3,images4,images5....中


... ...
For Each formName In upload.Files ''列出所有上传了的文件
  Set file = upload.Files(formName)  ''生成一个文件对象
'-------------------下面写入数据库-------------------------------------------------
Sql = "insert into p_table (id,productname,image1) values"
Sql = Sql& " ('"& upload.Form("product_id") &"','"& upload.Form("product_name") &"','"& File.NewFileName &"')"
 conn.execute(sql)
Set file=nothing
 Next
... ...


求高手指点!谢谢
------解决方案--------------------
你的if语句没闭合
         For i = 0 To UBound(arr)
           If arr(i) = "" Then 
              s = s & "Null,"
           Else
              s = s & "'" & arr(i) & "',"
           end if
         Next
------解决方案--------------------
上面的sql语句
如果你response.write sql 输出
你会发现他最后组成的是insert into p_table (id,productname,image1,image2,image3,image4) values (1,'产品名','image1','image2','image3','image4')这样的格式,

其实思路本来就很简单,就是想办法组合成这样的一个sql语句就好
------解决方案--------------------
下载了楼主的代码,弄了一下,测试可以通过(借鉴前面一位兄弟的思路:hookee):

'前面的其它代码不改
If upload.ErrMsg = "" then

arr = Array("", "", "", "", "")             '添加代码,数组1:新文件名
oldname = Array("", "", "", "", "")  '添加代码,数组2:旧文件名
i = 0   '给数组赋初始值

 For Each formName In upload.Files ''列出所有上传了的文件
  Set file = upload.Files(formName)  ''生成一个文件对象
  arr(i) = formPath&File.NewFileName '   构建数组1,用于存储更名后的文件名和路径
  oldname(i) = File.FileName'构建数组2,用于存放第一个页面上传时给出的文件原始名称
  i = i +1    '开始循环计数
  Set file=nothing  '释放对象
 Next

''以下q和s分别用于sql语句向DB插入数据
q = ""
s = ""
For i = 0 To UBound(arr)
    If arr(i) = "" Then 
       s = s & "Null,"
    Else
      s = s &