以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  [求助]如何用VBA操作sql server进行插入  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=48543)

--  作者:rocket98
--  发布时间:2013/2/8 20:34:01
--  [求助]如何用VBA操作sql server进行插入
刚接触金字塔,想把数据导入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
--  发布时间: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
--  发布时间:2013/2/8 22:36:24
--  

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

参考下


--  作者:rocket98
--  发布时间: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


--  作者:王锋
--  发布时间:2013/2/9 13:18:02
--  

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

 

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

 

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


--  作者:rocket98
--  发布时间:2013/2/10 13:27:01
--  
搞清楚了,sql server中表名应该加上方括号[]。
其他示范例子没有说明啊,总算折腾出来的。