Rss & SiteMap

金字塔客服中心 - 专业程序化交易软件提供商 http://www.weistock.com/bbs/

专业程序化软件提供商
共19 条记录, 每页显示 10 条, 页签: [1] [2]
[浏览完整版]

标题:[求助]如何成功将数据写入数据库?

1楼
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编辑过]
2楼
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)&')');

 

再试

3楼
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编辑过]
4楼
admin 发表于:2010/8/10 17:13:24
建议你先补习基础的编程语言的基本语法结构,字符串和变量的主要区别。
5楼
xtortoise 发表于:2010/8/11 9:12:20

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

6楼
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)&')');

 

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

7楼
xtortoise 发表于:2010/8/12 14:17:57

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

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

 

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

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

 

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

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

 

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

 

8楼
admin 发表于:2010/8/12 14:34:31
你这是想抓取行情数据,目前来看只能用VBA来实现
9楼
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的数据

10楼
xtortoise 发表于:2010/8/13 9:18:38

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

 

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

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

共19 条记录, 每页显示 10 条, 页签: [1] [2]


Powered By Dvbbs Version 8.3.0
Processed in 0.05469 s, 2 queries.