Foxtable(狐表)用户栏目专家坐堂 → [求助] SQL语句插入行报错


  共有4394人关注过本帖树形打印复制链接

主题:[求助] SQL语句插入行报错

帅哥哟,离线,有人找我吗?
lsy
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
[求助] SQL语句插入行报错  发帖心情 Post By:2014/6/23 16:01:00 [只看该作者]

InSert Into {订单} (产品,客户,雇员,单价,数量,日期,折扣,金额,已付款) Values (PD05,CS02,EP03,30.5,289,2012-02-13,0,8814.5,False)

 

ACCESS数据源,上面的代码,错在哪里,为什么会提示如下错误?

 

.NET Framework 版本:2.0.50727.3053
Foxtable 版本:2014.5.12.1
错误所在事件:
详细错误信息:
至少一个参数没有被指定值。

 



 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/6/23 16:02:00 [只看该作者]

InSert Into {订单} (产品,客户,雇员,单价,数量,日期,折扣,金额,已付款) Values ('PD05','CS02','EP03',30.5,289,#2012-02-13#,0,8814.5,False)


 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2014/6/23 16:25:00 [只看该作者]

谢谢Bin,连数据类型都忘判断了,该打。

 

想对比狐表的保存和SQL语句直接插入行,效率到底有何差距,测试结果,却是狐表更快。

是不是我的SQL语句,有缺陷?

 

Dim cmd As New SQLCommand
cmd.ConnectionName = _Connection
Dim sql1,sql2 As String
For Each c As Col In Tables("导入订单").Cols
    sql1 + = c.Name & ","
Next
For Each r As Row In Tables("导入订单").Rows
    sql2 = ""
    For Each c As Col In Tables("导入订单").Cols
        If c.IsDate Then
            sql2 + = _rq & r(c.Name) & _rq & ","
        ElseIf c.IsString Then
            sql2 + = "'" & r(c.Name) & "',"
        Else
            sql2 + = r(c.Name) & ","
        End If
    Next
    cmd.CommandText = "InSert Into 订单 (" & sql1.Trim(",") & ") Values (" & sql2.Trim(",") & ")"
    cmd.ExecuteNonQuery
Next
MessageBox.Show("OK")

[此贴子已经被作者于2014-6-23 16:25:53编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/6/23 16:27:00 [只看该作者]

试试
For Each r As Row In Tables("导入订单").Rows
    sql2 = ""
    For Each c As Col In Tables("导入订单").Cols
        If c.IsDate Then
            sql2 + = _rq & r(c.Name) & _rq & ","
        ElseIf c.IsString Then
            sql2 + = "'" & r(c.Name) & "',"
        Else
            sql2 + = r(c.Name) & ","
        End If
    Next
    cmd.CommandText = cmd.CommandText & vbcrlf & "InSert Into 订单 (" & sql1.Trim(",") & ") Values (" & sql2.Trim(",") & ")"
    
Next
cmd.ExecuteNonQuery

 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2014/6/23 16:50:00 [只看该作者]

用Union all连接SQL语句试试,

 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2014/6/23 16:53:00 [只看该作者]

慢在cmd.CommandText的合成上。

 

现在想用下面的语句:

 

Dim cmd As New SQLCommand
cmd.ConnectionName = _Connection 'ACCESS
cmd.CommandText = "Insert Into 订单 Select * From 导入订单"
cmd.ExecuteNonQuery
MessageBox.Show("OK")

 

但【导入订单】在内部数据源,而【订单】在ACCESS数据源,两个数据源如何兼顾?

 


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/6/23 16:55:00 [只看该作者]

那就不能用这种方案.

 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2014/6/23 17:00:00 [只看该作者]

谁有成套又高效的方法,请赐教。

狐表其他方面都简单快捷,就是最后一步:保存,不够快。


 回到顶部
帅哥哟,离线,有人找我吗?
jspta
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2014/6/23 17:03:00 [只看该作者]

以下是引用lsy在2014-6-23 16:53:00的发言:

慢在cmd.CommandText的合成上。

 

现在想用下面的语句:

 

Dim cmd As New SQLCommand
cmd.ConnectionName = _Connection 'ACCESS
cmd.CommandText = "Insert Into 订单 Select * From 导入订单"
cmd.ExecuteNonQuery
MessageBox.Show("OK")

 

但【导入订单】在内部数据源,而【订单】在ACCESS数据源,两个数据源如何兼顾?

 

合成SQL语句不会慢把?除非你这个表非常大,SQL语句也有长度限制,可能要分批。


跨数据源的话就没办法按照插入表的方法了


 回到顶部
帅哥哟,离线,有人找我吗?
lsy
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2014/6/23 17:20:00 [只看该作者]

就两千多行,既然测试,就该用更多的数据。

 回到顶部
总数 24 1 2 3 下一页