老师好,如题:1、快速写入股票,只要股票的历史数据,不要债券等的历史数据写入SQL SERVER数据库
2、我的VBA方法太慢,请老师帮忙改改,提高写入速度。谢谢。、
sub SQL_Con1()
application.MsgOut Date &" " &Time& "检索股票名称及代码"
Dim marketName
marketName=Array("SZ","SH")'此处只查上海及深圳A股"SZ","SH"。不查期货市场"SQ","DQ","ZQ","ZJ",
'找到股票的代码及名称
dim markets
For j=0 To UBound(marketName)
markets=marketName(j)'某一市场名称
n=marketData.GetReportCount(markets)'某一市场名称下股票或商品的数量
For i=0 To n-1
Set reportData=marketdata.GetReportDataByIndex(markets,i)'某一市场名称下某种(i号)股票或商品的所有信息(代码、名称等)
Dim Table_name,Code,Open,Close,High,Low,Date
table_name1="M1_"+reportData.Label
'=====================================================================================================
dim cn,rs
Set cn = CreateObject("Adodb.Connection")
Set rs = CreateObject("Adodb.Recordset")
'连接数据库``
strCn="Provider=sqloledb;Server=高大\MYSQL;Database=MyStocK;Uid=sa;Pwd=88888888;"
cn.Open strCn
strfield1 ="[OpenD] [varchar](53) NOT NULL,[CloseD] [varchar](53) NOT NULL,[StockO] [float](53) NULL,[StockC] [float](53) NULL,[StockH] [float](53) NULL,[StockL] [float](53) NULL,[StockV] [float](53) NULL,[StockOI] [float](53) NULL"
strsqlcre ="CREATE TABLE [dbo].["+ table_name1 + "]("+strfield1+")"
cn.Execute(strsqlcre)
strSQL ="select * from ["&table_name1&"]" '定义SQL查询命令字符串
rs.Open strSQL,cn,1,3 '执行strSQL所含的SQL命令,结果保存在rs记录集对象中
'调入调试数据,4 60分钟
set qtzq= marketdata.GetHistoryData(reportData.Label,marketName(j),0)'周期类型:0 1分钟,1 5分钟,2 15分钟,3 30分钟,4 60分钟,5日线,6周线,7月线,8年线,9多日线,10分笔成交,11多小时线,12多秒线,13多分钟线,14季度线,15半年线,16节气线,17 3分钟,18 10分钟,19 多笔线
for ii=0 to qtzq.Count-1
rs.addnew
rs("OpenD")=DateAdd("n", -1, qtzq.Date(ii))
rs("CloseD")=qtzq.Date(ii)
rs("StockO")=CSng(qtzq.Open(ii))
rs("StockC")=CSng(qtzq.Close(ii))
rs("StockH")=CSng(qtzq.High(ii))
rs("StockL")=CSng(qtzq.Low(ii))
rs("StockV")=CSng(qtzq.Volume(ii))
rs("StockOI")=CSng(qtzq.OpenInt(ii))
rs.update
next
rs.close
cn.Close '关闭数据库链接,释放资源
Set cn = Nothing'释放连接
next
next
MSGBOX "table text1表已存在"
end sub
sub SQL_Con1()
application.MsgOut Date &" " &Time& "检索股票名称及代码"
Dim marketName
marketName=Array("SZ","SH")'此处只查上海及深圳A股"SZ","SH"。不查期货市场"SQ","DQ","ZQ","ZJ",
'找到股票的代码及名称
dim markets
For j=0 To UBound(marketName)
markets=marketName(j)'某一市场名称
n=marketData.GetReportCount(markets)'某一市场名称下股票或商品的数量
For i=0 To n-1
Set reportData=marketdata.GetReportDataByIndex(markets,i)'某一市场名称下某种(i号)股票或商品的所有信息(代码、名称等)
Dim Table_name,Code,Open,Close,High,Low,Date
table_name1="M1_"+reportData.Label
'=====================================================================================================
dim cn,rs
Set cn = CreateObject("Adodb.Connection")
Set rs = CreateObject("Adodb.Recordset")
'连接数据库``
strCn="Provider=sqloledb;Server=高大\MYSQL;Database=MyStocK;Uid=sa;Pwd=88888888;"
cn.Open strCn
strfield1 ="[OpenD] [varchar](53) NOT NULL,[CloseD] [varchar](53) NOT NULL,[StockO] [float](53) NULL,[StockC] [float](53) NULL,[StockH] [float](53) NULL,[StockL] [float](53) NULL,[StockV] [float](53) NULL,[StockOI] [float](53) NULL"
strsqlcre ="CREATE TABLE [dbo].["+ table_name1 + "]("+strfield1+")"
cn.Execute(strsqlcre)
strSQL ="select * from ["&table_name1&"]" '定义SQL查询命令字符串
rs.Open strSQL,cn,1,3 '执行strSQL所含的SQL命令,结果保存在rs记录集对象中
'调入调试数据,4 60分钟
set qtzq= marketdata.GetHistoryData(reportData.Label,marketName(j),0)'周期类型:0 1分钟,1 5分钟,2 15分钟,3 30分钟,4 60分钟,5日线,6周线,7月线,8年线,9多日线,10分笔成交,11多小时线,12多秒线,13多分钟线,14季度线,15半年线,16节气线,17 3分钟,18 10分钟,19 多笔线
for ii=0 to qtzq.Count-1
rs.addnew
rs("OpenD")=DateAdd("n", -1, qtzq.Date(ii))
rs("CloseD")=qtzq.Date(ii)
rs("StockO")=CSng(qtzq.Open(ii))
rs("StockC")=CSng(qtzq.Close(ii))
rs("StockH")=CSng(qtzq.High(ii))
rs("StockL")=CSng(qtzq.Low(ii))
rs("StockV")=CSng(qtzq.Volume(ii))
rs("StockOI")=CSng(qtzq.OpenInt(ii))
rs.update
next
rs.close
cn.Close '关闭数据库链接,释放资源
Set cn = Nothing'释放连接
next
next
MSGBOX "table text1表已存在"
end sub