以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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中表名应该加上方括号[]。 其他示范例子没有说明啊,总算折腾出来的。
|