以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  [求助]如何成功将数据写入数据库?  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=2423)

--  作者:xtortoise
--  发布时间:2010/8/10 13:22:58
--  [求助]如何成功将数据写入数据库?

DATABASE(\'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Test.mdb\');
DBEXECUTE(\'insert into RB(stockclose) values(close)\');

没办法写入数据,错误在哪,请教!
(数据库都按要求建好得)

 

请版主给予一个具体可用的例子,感谢

[此贴子已经被作者于2010-8-10 13:23:45编辑过]

--  作者:admin
--  发布时间:2010/8/10 16:35:01
--  

DBEXECUTE(\'insert into RB(stockclose) values(close)\');

 

这里的close是字符串变量,无论哪个数据库都不会认得

 

DATABASE(\'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Test.mdb\');
DBEXECUTE(\'insert into RB(stockclose) values(\'&NUMTOSTR(close,2)&\')\');

 

再试


--  作者:xtortoise
--  发布时间:2010/8/10 17:07:38
--  

没搞明白  INSERT INTO 语句为:

INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)

 

我将stockclose定义数据类型为:数字 ; close 是我要写入的收盘价也应该是:数字

 

如果使用NUMTOSTR(close,2) 不就是字符值?

[此贴子已经被作者于2010-8-10 17:08:42编辑过]

--  作者:admin
--  发布时间:2010/8/10 17:13:24
--  
建议你先补习基础的编程语言的基本语法结构,字符串和变量的主要区别。
--  作者:xtortoise
--  发布时间:2010/8/11 9:12:20
--  

加载公式提示 : 没有为命令对象设置命令。


--  作者:admin
--  发布时间:2010/8/11 22:45:22
--  

DATABASE(\'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Test.mdb\');

DBTABLE2(\'Select * From \');
DBEXECUTE(\'insert into RB(stockclose) values(\'&NUMTOSTR(close,2)&\')\');

 

暂时增加中间一列看看是否可以正常工作了


--  作者:xtortoise
--  发布时间:2010/8/12 14:17:57
--  

增加中间一列后,可成功写入数据;

但写入数据的结果与想实现的效果有较大出入;

 

在实时的接收行情中加载公式,软件基本上就不可能运行甚至崩溃;

打开数据库查看,里面是有数据,而且当相多,细心看会发现有周期重复的数据;

 

个人的想法是将当前周期的数值写入数据库,下一个周期的数值增加入下一条记录;

但看到的结果却是每一个周期,语句就将从第一个周期至当前周期的每个数值一个个写入数据库,然后下一个周期又重复一次,是否就这个原因导致运行不了崩溃?

 

如果只要实现我原有想法,只将当前周期记录写入,过往的记录不再重复写入应该如何编写?

 


--  作者:admin
--  发布时间:2010/8/12 14:34:31
--  
你这是想抓取行情数据,目前来看只能用VBA来实现
--  作者:wattwei
--  发布时间:2010/8/12 21:20:37
--  
有一种办法可以不取过去的数据

加上语句
DATABASE(\'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Test.mdb\');
DBTABLE2(\'Select * From RB\');
If Not(IsLastBar) Then exit;
DBEXECUTE(\'insert into RB(stockclose) values(\'&NUMTOSTR(close,2)&\')\');


这一语句的意思是只考虑最后一个数据BAR

但是实验下来的效果不理想,即使是最后一个bar,金字塔也要操作多次,估计了下大概2秒钟一次。如果是等时间间隔(需admin确认),这种方法可能可以用来采集些盘口数据。

如果想对应一根K线,仅仅采集一次数据,如何实现,方法如下
1.在数据表中加多个数据项,cnt,设定为索引不重复
2.改写公式DBEXECUTE(\'insert into RB(cnt,stockclose) values(\'&NUMTOSTR(barpos-1,0)&\',\'&NUMTOSTR(ref(close,1),5)&\')\');

利用索引不重复的机理,使每个bar的数据仅写入表一次。注意写入数据要使用ref(...,1),由于当前的bar的数据没有完全形成,只能记录上一根bar的数据


--  作者:xtortoise
--  发布时间:2010/8/13 9:18:38
--  

为了不使行情软件负担过重,影响数据的接收,已将工作迁到VBA上去了;

 

但遇到一个问题:使用RegReportNotify触发事件,执行写入数据的动作; 

查看数据库,发现同一条记录有不定数量的重复记录数(大概1~5条),这怎会事?