欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → [求助]如何用VBA操作sql server进行插入

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


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

主题:[求助]如何用VBA操作sql server进行插入

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


加好友 发短信
等级:新手上路 帖子:6 积分:40 威望:0 精华:0 注册:2013/1/27 13:35:04
[求助]如何用VBA操作sql server进行插入  发帖心情 Post By:2013/2/8 20:34:01 [只看该作者]

刚接触金字塔,想把数据导入sql server2008后再进行策略运算,学习了资料,现在可以连结上数据库了,照猫画虎,可是卡在如何插入数据这里,请哪位大侠指点一二:
报错信息如下:
编译器错误 ‘424’
缺少对象:‘[string:“INSERT INTO 000300 (:]'

照猫画虎的代码如下:
'定义一个函数,供vba 开始运行时调用
sub DataInsert()
'设置对象adoConn,进行连接
Set SqlConn=CreateObject("Adodb.Connection")
SvrIP=".\SQLExpress"
SqlConn.Open "Provider=SQLOLEDB;Server=.\SQLExpress;Database=StockIndex;UID=roy;PWD=9817"

set qtzq= marketdata.GetHistoryData("000300","SH",0,1000)
'调试数据调入是否成功
'call application.MsgOut(qtzq.close(qtzq.Count-1))

'取得HS300指数价格

for i=1 to qtzq.Count-1
set strSqlins="INSERT INTO 000300 (Date,O,H,L,C) VALUES ('"&qtzq.Date(i)&"','"&qtzq.Open(i)&"','"&qtzq.High(i)&"','"&qtzq.Low(i)&"','"&qtzq.Close(i)&"')"
sqlConn.Execute(strSqlins)
next
sqlConn.close
end sub

'数据库启动时调用
sub application_vbastart()
call DataInsert()
'调试
call application.MsgOut("11")
end sub

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


加好友 发短信
等级:新手上路 帖子:6 积分:40 威望:0 精华:0 注册:2013/1/27 13:35:04
  发帖心情 Post By:2013/2/8 21:15:14 [只看该作者]

数据表字段定义如下:
Date (datetime2(0), not null)
O (float, not null)
H (float, not null)
L (float, not null)
C (float, not null)

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


加好友 发短信 czt
等级:蜘蛛侠 帖子:1445 积分:6114 威望:0 精华:3 注册:2012/1/16 10:31:19
  发帖心情 Post By:2013/2/8 22:36:24 [只看该作者]


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


加好友 发短信
等级:新手上路 帖子:6 积分:40 威望:0 精华:0 注册:2013/1/27 13:35:04
  发帖心情 Post By:2013/2/8 23:39:43 [只看该作者]

以下是引用rushtaotao在2013-2-8 22:36:24的发言:

http://www.weistock.com/bbs/dispbbs.asp?boardid=5&Id=30622

参考下


客服,我看了你的帖子,给出的实例是操作access数据库的,而我用的是SQL Server ,是否sql server的插入新纪录操作命令是不同的? 参照你的帖子,我修改了下不符合的地方,还是报错,报错信息如下:

编译器错误 '3604'

Incorrect syntax near '000300'



而我修改后的代码是如下:


'定义一个函数,供vba 开始运行时调用

sub DataInsert()

'设置对象adoConn,进行连接

Set SqlConn=CreateObject("Adodb.Connection")

SvrIP=".\SQLExpress"

SqlConn.Open "Provider=SQLOLEDB;Server=.\SQLExpress;Database=StockIndex;UID=roy;PWD=9817"


set qtzq= marketdata.GetHistoryData("000300","SH",0,1000)

'调试数据调入是否成功

'call application.MsgOut(qtzq.close(qtzq.Count-1))


'取得HS300指数价格


for i=1 to qtzq.Count-1

strSqlins = "INSERT INTO 000300 (Date,O,H,L,C) VALUES ('"&qtzq.Date(i)&"','"&qtzq.Open(i)&"','"&qtzq.High(i)&"','"&qtzq.Low(i)&"','"&qtzq.Close(i)&"')"

sqlConn.Execute(strSqlins)

next

sqlConn.close

end sub


'数据库启动时调用

sub application_vbastart()

call DataInsert()

'调试

call application.MsgOut("11")

end sub


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


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2013/2/9 13:18:02 [只看该作者]

INSERT INTO 000300 (Date,O,H,L,C)

 

注意这类插入语句,检查字段是否存在,类型是否是日期和数字型的。

 

Sql Server提供了一些客户端工具,可以直接使用SQL语句进行操作,你先在这些工具上操作试试,调试完毕没问题后再放到金字塔里



金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
rocket98
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:6 积分:40 威望:0 精华:0 注册:2013/1/27 13:35:04
  发帖心情 Post By:2013/2/10 13:27:01 [只看该作者]

搞清楚了,sql server中表名应该加上方括号[]。
其他示范例子没有说明啊,总算折腾出来的。

 回到顶部