以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助] SQL语句插入行报错  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=52807)

--  作者:lsy
--  发布时间:2014/6/23 16:01:00
--  [求助] SQL语句插入行报错

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
--  发布时间:2014/6/23 16:02:00
--  

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


--  作者:lsy
--  发布时间: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
--  发布时间: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
--  发布时间:2014/6/23 16:50:00
--  
用Union all连接SQL语句试试,
--  作者: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数据源,两个数据源如何兼顾?

 


--  作者:Bin
--  发布时间:2014/6/23 16:55:00
--  
那就不能用这种方案.
--  作者:lsy
--  发布时间:2014/6/23 17:00:00
--  

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

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


--  作者:jspta
--  发布时间: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
--  发布时间:2014/6/23 17:20:00
--  
就两千多行,既然测试,就该用更多的数据。