43 12
发新话题
打印

[高级] 利用ADO创建、读取Access数据库示例代码-南客

利用ADO创建、读取Access数据库示例代码-南客

包含2个公式:
1、ADO创建、刷新Access数据库
2、ADO读取Access数据库
公式代码如下:

一、创建、刷新Access数据库:
复制内容到剪贴板
代码:
fc:close;fo:=open;fl:=low;fh:=high;
fv:=vol;
gpdm:=stklabel; scdm:=MARKETLABEL;
fy:=year; fm:=month; fd:=day;
<%
vo=ffl.vardata("fo")
vh=ffl.vardata("fh")
vl=ffl.vardata("fl")
vc=ffl.vardata("fc")
vv=ffl.vardata("fv")
gpdm=ffl.vardata("gpdm")
scdm=ffl.vardata("scdm")
vy=ffl.vardata("fy")
vm=ffl.vardata("fm")
vd=ffl.vardata("fd")
n=ffl.vardata("n")

Const Jet3x = 4  'Access97数据库格式
Const Jet4x = 5  'Access2000数据库格式

'创建 Access2000 数据库,位于飞狐安装目录user子目录下
FileName="user\a2000.mdb"
TableName=scdm & gpdm
Set fso = CreateObject("Scripting.FileSystemObject")
If (Not fso.FileExists(FileName)) Then
  CreateNewMDB FileName, Jet4x
End If
  On Error Resume Next
  CreateNewTable TableName
  Dim Conn,RS
  WriteTable FileName, TableName
  last=ubound(vc)
  if Rs.RecordCount<last+1 then
    if Rs.RecordCountstart=0 then start=0 else start=last
    for i=start to last
      vdate=DateSerial(vy(i), vm(i), vd(i))
      Rs.AddNew
      Rs.Fields("日期")=vdate
      Rs.Fields("开盘价")=Round(vo(i),2)
      Rs.Fields("最高价")=Round(vh(i),2)
      Rs.Fields("最低价")=Round(vl(i),2)
      Rs.Fields("收盘价")=Round(vc(i),2)
      Rs.Fields("成交量")=Round(vv(i),2)
      'Rs.Update
    next
    Rs.UpdateBatch
  End if   
  Set Rs=Nothing
  Set Conn=Nothing

Sub WriteTable(FileName,TableName)
  Set Conn=CreateObject("ADODB.Connection")
  Conn.Provider="Microsoft.Jet.OLEDB.4.0"
  Conn.Open FileName
  Set Rs=CreateObject("ADODB.Recordset")
  Rs.CursorType = 3
  Rs.LockType = 3
  Rs.Open TableName, Conn
End Sub

Sub OpenTable(TableName) '打开表
  Set Conn=CreateObject("ADODB.Connection")
  Conn.Provider="Microsoft.Jet.OLEDB.4.0"
  Conn.Open FileName
  SQL="Select * From TableName"
  Set RS=conn.Execute(SQL)
End Sub

Sub CreateNewTable(TableName) '创建新表
  Dim conn,rs
  Set conn=CreateObject("ADODB.Connection")
  Conn.Provider="Microsoft.Jet.OLEDB.4.0"
  Conn.Open FileName
  SQL="Create Table " & TableName & "([日期]Text(10),[开盘价]Single,[最高价]Single,[最低价]Single,[收盘价]Single,[成交量]Single)"
  Set RS=conn.Execute(SQL)
  Set Rs=Nothing
  Set Conn=Nothing
End Sub

Sub CreateNewMDB(FileName, Format) '创建Access2000数据库
Dim Catalog
  Set Catalog = CreateObject("ADOX.Catalog")
  Catalog.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Jet OLEDB:Engine Type=" & Format & _
    ";Data Source=" & FileName
  Set CataLog=Nothing
End Sub
%>

////////

TOP

二、读取Access数据库:
复制内容到剪贴板
代码:
fc:=close;fo:=fc;fl:=fc;fh:=fc;
fv:=fc;
gpdm:=stklabel; scdm:=MARKETLABEL;
fy:=year; fm:=month; fd:=day;
<%
vo=ffl.vardata("fo")
vh=ffl.vardata("fh")
vl=ffl.vardata("fl")
vc=ffl.vardata("fc")
vv=ffl.vardata("fv")
gpdm=ffl.vardata("gpdm")
scdm=ffl.vardata("scdm")
vy=ffl.vardata("fy")
vm=ffl.vardata("fm")
vd=ffl.vardata("fd")
n=ffl.vardata("n")

Const Jet3x = 4
Const Jet4x = 5
  FileName="user\a2000.mdb"
  TableName=scdm & gpdm
  On Error Resume Next
  ReadTable FileName,TableName

Sub ReadTable(FileName,TableName)
  Dim Conn,RS
  Set Conn=CreateObject("ADODB.Connection")
  Conn.Provider="Microsoft.Jet.OLEDB.4.0"
  Conn.Open FileName
  Set Rs=CreateObject("ADODB.Recordset")
  Rs.CursorType = 3
  Rs.LockType = 3
  Rs.Open TableName, Conn
  Rs.MoveFirst
  Last=ubound(vc)
  if Rs.RecordCount=Last+1 then
    for i=0 to Last
      vo(i)=Rs.Fields("开盘价")
      vh(i)=Rs.Fields("最高价")
      vl(i)=Rs.Fields("最低价")
      vc(i)=Rs.Fields("收盘价")
      vv(i)=Rs.Fields("成交量")
      Rs.MoveNext
    next
  End if   
  Set Rs=Nothing
  Set Conn=Nothing  
End Sub

ffl.vardata("fo")=vo
ffl.vardata("fh")=vh
ffl.vardata("fl")=vl
ffl.vardata("fc")=vc
ffl.vardata("fv")=vv
%>
开盘:fo;
最高:fh;
最低:fl;
收盘:fc;
成交:fv,linethick0;


///////////////
公式附件如下:
附件: 您所在的用户组无法下载或查看附件

TOP

如何把5分钟数据放在FH之外而不影响FH速度?

TOP

引用:
ayqjg 于 2004-3-10 05:41 PM 写道:
如何把5分钟数据放在FH之外而不影响FH速度?
在系统设置里面,设置5分钟数据调入的大小

参考精华区的“数据管理篇”

TOP

请教ADO创建、刷新Access数据库的用法

HX817老师:
     ADO读取Access数据库可在副图中显示,请教刷新Access数据库怎么用呢:

TOP

引用:
闲人 于 2004-3-12 02:52 AM 写道:
HX817老师:
     ADO读取Access数据库可在副图中显示,请教刷新Access数据库怎么用呢:
首次建数据库表时,会将所有数据都写入数据库表(当然也就较慢了),此后就只将最新的数据写入数据库表中。

操作:
1、调入公式
2、当翻到某只股票时,就自动将该股票的数据写入数据库表中
3、将该公式进行选股或排序,就会将所有股票的所有数据写入数据库,不过很慢的,因为数据量太大了。Access数据库,对于数据量很大的场合,速度会比较慢。

TOP

谢谢HX817老师的指点.

TOP

谢谢

TOP

还要麻烦老师

南客老师:您好!
      忧豫了好几天,最后还得麻烦老师.在这之前老师帮我介决了读取Excel里的数据的难题.由于Axcel本身容量有限,不可能无限制添加数据进去,为介决这一问题必得重建一个Access数据库,由于我还没学会这门知识,所以无法建一个新数据库.看了老师的利用ADO创建、读取Access数据库示例受到了启发:是否利用ADO创建Access,写一个公式读取Excel里的数据,然后再利用二楼的公式(稍作修改)读取Access里的数据.老师您觉得我这一想法可行吗?如果可行恳请老师再帮帮我.我知道这肯定又是一个费时费力的事情.多谢老师!企盼隹音!

TOP

好!

TOP

ok

TOP

谢谢

TOP

谢谢老师!!

TOP

谢谢HX817老师的指点

谢谢HX817老师的指点

TOP

请HX817老师指教

谢谢HX817老师!
这两个公式怎么用?请指教。
谢谢!
             LHL311

TOP

引用:
hx817 于 2004-3-10 17:10 写道:
包含2个公式:
1、ADO创建、刷新Access数据库
2、ADO读取Access数据库
公式代码如下:

一、创建、刷新Access数据库:
[code]
fc:close;fo:=open;fl:=low;fh:=high;
fv:=vol;
gpdm:=stklabel; scdm:=MARK ...
创建 、刷新Access数据库输出的是软件系统自有的O、H、L、C、vol,请教hx817或南客先生:利用公式可否输出任一指标的数据如kdj、macd或自编公式的数据到Access里呢?然后再用ADO渎取Access数据库。如能,公式作何修改?
恳切希望hx817或南客少老师给予帮助。非常感谢!

TOP

引用:
gusi 于 2004-9-16 21:49 写道:
创建 、刷新Access数据库输出的是软件系统自有的O、H、L、C、vol,请教hx817或南客先生:利用公式可否输出任一指标的数据如kdj、macd或自编公式的数据到Access里呢?然后再用ADO渎取Access数据库。如能,公式作何修 ...

TOP

创建 、刷新Access数据库输出的是软件系统自有的O、H、L、C、vol,请教hx817或南客先生:利用公式可否输出任一指标的数据如kdj、macd或自编公式的数据到Access里呢?然后再用ADO渎取Access数据库。如能,公式作何修改?
恳切希望hx817或南客老师给予帮助。非常感谢!
     再请二位老师能给予回应!谢谢!

TOP

引用:
gusi 于 2004-9-19 01:14 写道:
创建 、刷新Access数据库输出的是软件系统自有的O、H、L、C、vol,请教hx817或南客先生:利用公式可否输出任一指标的数据如kdj、macd或自编公式的数据到Access里呢?然后再用ADO渎取Access数据库。如能,公式作何修 ...
hx817老师:您在线上,请您给予回复,万分感谢!!!

TOP

TOP

谢谢

TOP

引用:
hx817 于 2004-3-10 17:11 写道:
二、读取Access数据库:
[code]
fc:=close;fo:=fc;fl:=fc;fh:=fc;
fv:=fc;
gpdm:=stklabel; scdm:=MARKETLABEL;
fy:=year; fm:=month; fd:=day;
<%
vo=ffl.vardata("fo")
vh=ffl.vardata(&qu ...
南客老师:用您上面同一公式读取同一Access表中的数据会有不同的结果,当然在老师的公式中想当然地作了一些改动:
  第一行fc:=0,
以下也改动了:
      vo(i)=Rs.Fields("主力仓位(万股)")
      vh(i)=Rs.Fields("仓位比率 ‰")
      vl(i)=Rs.Fields("当日强度")
      vc(i)=Rs.Fields("智能体检(分)")
      vv(i)=Rs.Fields("量比")
     .........
     .........
     .........

主力仓位:fo,LINETHICK0;
仓位比率‰:fh;
当日强度:fl;
智能体检分:fc;
量比:fv;
显示结果:主力仓位、仓位比率、当日强度显示的是年、日、月的数字,智能体检分显示的是 1),智能体检分的数字(在画面为3图时),  2),是主力仓位的数字(在3图+2图时),量比的数字不知从何而来.
  如果第一行fc:=close时四幅副图显示的全是收盘价.
       我怀疑是读取了我另外作的Excel表里的数据,因为第一和第三副图读的是Excel里的数据,而Access表里的日期和数据要比Excel里的日期早得多.

不知错在何处?恳切期望老师给予指教.万分感榭!!!企盼佳音!
上传贴图
附件: 您所在的用户组无法下载或查看附件

TOP

这是Access表里2003-10-22的数据
附件: 您所在的用户组无法下载或查看附件

TOP

上图错发了,更正
附件: 您所在的用户组无法下载或查看附件

TOP

 43 12
发新话题
报警岗亭