Rss & SiteMap

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

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

标题:如何通过VBA写数据到ACCESS

1楼
日积月累 发表于:2015/2/5 21:55:49
我今天才下载金字塔,对VBA也不熟悉,请问我想实现以下功能,需要如何做,谢谢!!!

每1秒通过金字塔读取某合约(如IF1502)的价格、分时线的均线、1分钟K线图的60日均线值并保存到Access中。(如果分时均线和60日均线不好同时读取,只读取均线也可以)
Access数据库文件名Trade.mdb,表名为DayRecord,字段如下:
ID,Time,Contract,Price,Average,SixtyAverage
[此贴子已经被作者于2015/2/5 21:57:07编辑过]
2楼
日积月累 发表于:2015/2/5 22:36:29
Sub APPLICATION_VBAStart()
'设定access文件
AccessFilePath = "D:Trade.accdb"   

'在ACCESS数据库中插入数据********************************************************************
'打开数据库
Set adoConn=CreateObject("Adodb.Connection")
adoConn.Open"Provider=MicroSoft.Jet.OLEDB.4.0;Data Source=D:\Trade.mdb"
    
'在access数据库中写入记录
strSqlcre="INSERT INTO DayRecord (TradeTime,Contract,Price,Average,SixtyAverage) VALUES ('09:52:05','IF1502',3520,3515,3585) "
adoConn.Execute(strSqlcre)
application.MsgOut "SQL语句: "& strSqlcre
adoConn.close
application.MsgOut "结束"
'结束在ACCESS数据库中插入数据********************************************************************   
    
End Sub

3楼
日积月累 发表于:2015/2/5 22:59:37
摸索了一下,参考别人的代码,用上面的方法可以向ACCESS插入一行数据。
我想问下,如何读取某合约(如IF1502)的价格、分时线的均线、1分钟K线图的60日均线值?还有如何让上面的代码能够每1秒钟执行一次
4楼
日积月累 发表于:2015/2/5 23:12:02
sub  Application_VBAStart()
 Call Application.SetTimer(1,1*1000)   '每1秒执行1次SetTimer,SetTimer里应该是毫秒
end sub
 

Sub Application_Timer(ID)
'设定access文件
'AccessFilePath = "D:\*******\Asset.accdb"    
AccessFilePath = "D:Trade.accdb"   

'开始在ACCESS数据库中新建表********************************************************************
'application.MsgOut "新建Access表"
'Set adoConn=CreateObject("Adodb.Connection")
'连接数据库(数据指向是金字塔安装目录下的test.mdb,也可以自己更改想要的路径)
'adoConn.Open"Provider=MicroSoft.Jet.OLEDB.4.0;Data Source=D:\艺的文件夹\自编程序\风控系列06 金字塔vbs文件\DailyAsset.mdb"
'adoConn.Open"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & AccessFilePath '可以连接access2007数据库格式
'adoConn.Open"Provider=MicroSoft.Jet.OLEDB.4.0;Data Source=D:\Trade.mdb"

'查找表是否存在
'Dim Rs
'Set Rs = adoConn.OpenSchema(20)
'Do While Not Rs.EOF
'     If Rs("Table_Name") = "TreadingRecord" Then
'          '找到表的操作。。
'          strSqldro="drop table TreadingRecord"
'          adoConn.Execute(strSqldro)
'     End If
'     Rs.MoveNext
'Loop
'Rs.Close
'Set Rs = Nothing

'创建表 各列代表的意义分别是 交易时间,交易品种,交易状态(买卖,买空,卖空,头寸模型,风险百分比)
' strSqlcre="create table TreadingRecord (TreadeDateTime DateTime NOT NULL, TreadMarket varchar(10) NOT NULL, TreadeStatus varchar(10) NOT NULL,PositionSizeModle varchar(10) NOT NULL, PercentRisk real)"
' adoConn.Execute(strSqlcre)
'adoConn.Close
'结束在ACCESS数据库中新建表********************************************************************  


'在ACCESS数据库中插入数据********************************************************************
'打开数据库
Set adoConn=CreateObject("Adodb.Connection")
'adoConn.Open"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & AccessFilePath '可以连接access2007数据库格式
adoConn.Open"Provider=MicroSoft.Jet.OLEDB.4.0;Data Source=D:\Trade.mdb"
    
'在access数据库中写入记录
strSqlcre="INSERT INTO DayRecord (TradeTime,Contract,Price,Average,SixtyAverage) VALUES (Now,'IF1502',3520,3515,3585) "
adoConn.Execute(strSqlcre)
application.MsgOut "SQL语句: "& strSqlcre
adoConn.close
application.MsgOut "结束"
'结束在ACCESS数据库中插入数据********************************************************************    
   
End Sub





'用上面的代码可以实现1秒钟插入1次数据了
'最后一个问题,如何读取某合约的分时均价?????
5楼
王锋 发表于:2015/2/6 10:26:31
http://www.weistock.com/bbs/dispbbs.asp?boardid=5&Id=75418 
共5 条记录, 每页显示 10 条, 页签: [1]


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