网上查了很久,不知道为什么出问题,无法解析的外部符号 _PyString_FromString
原来我用的是Python3.x 版,
函数都变了
PyString_* 改为PyUnicode_*,
Pyint_*改为PyLong_*,
程序回复正常,版的问题一定要注意。
又一个WordPress站点
网上查了很久,不知道为什么出问题,无法解析的外部符号 _PyString_FromString
原来我用的是Python3.x 版,
函数都变了
PyString_* 改为PyUnicode_*,
Pyint_*改为PyLong_*,
程序回复正常,版的问题一定要注意。
PHP源代码生成 main/config.w32.h
准备好PHP源代码,假设解压到 D:\phpsrc
下载2个必要的包
http://inhhh.com/download/bindlib_w32.zip
http://inhhh.com/download/win32build.zip
把这2个包的内容放一起,例如解压缩到 D:\win32build
请使用 Visual Studio Tools 下的 Visual Studio 命令提示 操作
进入D:\php-src\
执行buildconf.bat
建立一个临时环境变量,执行set path=%path%;D:\win32build\bin
执行 cscript /nologo configure.js –with-php-build=”../win32build” –without-libxml –disable-odbc
如果想要No Thread Safe 模式就在上面的命令最后加上参数 –disable-zts
然后看看是不是main下面多了一个 config.w32.h~
还有一点,config.w32.h 里面 #define PHP_COMPILER_ID 改成和你正在用的 PHP 编译版本相同的编译器ID,例如VC6或者VC9,不然编译出来的扩展没法载入,说实话,这个ID的判断真的很傻很天真….
注:以上过程在PHP5.3.5 + VS2010 下测试通过
我写的这些文章,都是边做,边截图,做写文章的,所以之后还会更新。
安装linux Gentoo的原因很多,因为需要这样一个环境,去试东西,
准备工作
配置VM
开始安装
mount -t proc none /mnt/gentoo/proc
chroot /mnt/gentoo /bin/bash env-update source /etc/profile
emerge --sync --quiet # 验证系统profile eselect profile list
ls /usr/share/zoneinfo #查看时区 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #我使用的是上海
emerge gentoo-sources #安装内核源码 ls -l /usr/src/linux #查看内核连接
首先通过VC++ 建新一个项目,选择空项目,并且在项目中添加 testpython.c文件
如何实现 C/C++ 与 Python 的通信? – 编程 – 知乎
在Windows平台下,打开Visual Studio命令提示符,编译命令为
cl testpython.c -IC:\Python34\include C:\Python34\libs\python34.lib
编译成功,直接输入 testpython.exe 就可以运行,看到执行效果如图
Vc++ 调用python 是成功。
也算是一个抛砖引玉的过程,首先在CStkLibWnd中加入方法
int LoadCodetable( CStockContainer &container ); // 读取所有股票的信息 int LoadCodeTableByMarket(CStockContainer& container, DWORD dwMarket);
int CStkLibWnd::LoadCodetable( CStockContainer & container ) { if(!IsOK()) return 0; //上海指数 LoadCodeTableByMarket(container, CStock::marketSHSE); //深圳指数 LoadCodeTableByMarket(container, CStock::marketSZSE); return container.GetSize(); } int CStkLibWnd::LoadCodeTableByMarket(CStockContainer& container, DWORD dwMarket) int ncrow=0; CSPString strSql = ""; CSPString strStockCode = ""; CSPString strMarKet=GetMarket(dwMarket); strSql.Format( "select * from StockList where Market='%s' order by Market,Code",strMarKet); int nRow=0; try { _RecordsetPtr m_pRecordsetT; m_pRecordsetT.CreateInstance(__uuidof(Recordset)); m_pRecordsetT->Open(_variant_t(strSql), m_pCnn.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText); if(!m_pRecordsetT->adoEOF) { _variant_t var; while(!m_pRecordsetT->adoEOF) { CStockInfo info; var = m_pRecordsetT->GetCollect("Code"); if(var.vt != VT_NULL) { strStockCode=(LPCSTR)_bstr_t(var); info.SetStockCode(dwMarket,strStockCode); } var = m_pRecordsetT->GetCollect("ChineseName"); if(var.vt != VT_NULL) { CSPString sValue=(LPCSTR)_bstr_t(var); info.SetStockName(sValue); } var = m_pRecordsetT->GetCollect("ShortName"); if(var.vt != VT_NULL) { CSPString sValue=(LPCSTR)_bstr_t(var); info.SetStockShortName(sValue); } var = m_pRecordsetT->GetCollect("otherName"); if(var.vt != VT_NULL) { CSPString sValue=(LPCSTR)_bstr_t(var); info.SetStockNameEnu(sValue); } void * pArrayID = NULL; if (info.IsValidStock()) { container.Add(info); } m_pRecordsetT->MoveNext(); } } m_pRecordsetT->Close(); } catch(_com_error e) { return container.GetSize(); } ncrow = container.GetSize(); return container.GetSize(); }
打开 StkLib项目中Database.cpp 找到函数LoadCodetable( CStockContainer & container )
函数里面加入
int nSize = 0; int nSize2 = 0; if(AfxGetCStkLibWnd().IsOK()) { nSize2 = AfxGetCStkLibWnd().LoadCodetable(container); if(nSize2>0) return nSize2; }
确保首先执行。
看看调试的结果.
成功能了。
Windows7 Eclipse和PyDev搭建完美Python开发环境
首先说明,为什么要配置这个呢,因为有一些接口,要必须使用python的。例如 tushare,之前用过别人的红茶接口味,是DLL来的,这次就用tushare, 我自己之前也没有用到,就当边学边用吧。
目录
安装Python
python for eclipse插件安装
配置PyDev插件
测试
安装Python
从网站上下载最新的版本,从http://python.org/download/下载。安装过程与其他Windows软件类似。目前稳定版本为Python 2.7.6和Python 3.3.4。
在Windows命令行中使用Python
如果你想要从Windows命令行调用Python,那么需要先设置Python环境变量。
对于Windows,点击控制面板->系统->高级->环境变量。在“系统变量”表单中点击叫做PATH的变量,然后编辑这个变量,把;D:\dev\python2.7.6加到它的结尾。当然,是Python所在的安装目录。
测试python环境变量是否设置成功
C:\Users\jiqinlin>python Python 2.7.6 (default, Nov 10 2013, 19:24:24) [MSC v.1500 64 bit (AMD64)] on win 32 Type "help", "copyright", "credits" or "license" for more information. >>>
python for eclipse插件安装
1、下载python for eclipse
2、解压pydev插件后,会发现有features、plugins两个文件夹,然后把features文件夹下的文件移到D:\dev\eclipse\features目录下,把plugins文件夹下的文件移到D:\dev\eclipse\plugins目录下。
注意:D:\dev\eclipse\为eclipse安装目录
注意:这里提供另一个方法:
打开eclipse 菜单-> Help -> Install new software ,添加 这个网址 http://pydev.sourceforge.net/updates, 之后选择安装即
3、重启eclipse,在windows->preferences出现PyDev配置项,表示PyDev插件安装成功。
配置PyDev插件
在Window菜单中选Preference,
1、windows->preferences->PyDev->Interpreter – Python,New一个Python解释器,填上解释器名字和路径,路径选相应的python.exe
以下几步Python 3.x必选,Python 2随意。个人比较习惯Unicode,所以一次性在这儿设定了。
2、General->Editors->Text Editors->Spelling,Encoding改成Other:UTF-8
3、General->Workspace,Text file encoding改成Other:UTF-8
至此,PyDev的配置就完成了。
测试
File->New->Project,选PyDev下的PyDev Project,Grammer和Interpreter选相应的版本,Finish。
在PyDev Package Explorer的项目上右键,New->PyDev Module,随便写个名字,Finish。
然后随便写几行代码,Run在弹出的对话框中选择Python Run,OK
代码如下:
def hw(n):
if n==1:
return 1
else:
return 2*n
print (hw(2));
注意:python 3.x后的 一定要这样写 print (hw(2));
python 2.x 可以 写成 print hw(2);
安装相关的插件
下载相关插件
http://www.inhhh.com/download/pip-8.1.2.tar.gz
解压缩到python 安装目录,比如安装在d:\python34, 就把文件解压缩到:\python34\pip-8.1.2.tar.gz
下载 setuptool
http://www.inhhh.com/download/ez_setup.py
在Windows下cmd中找到setup.py所在的目录,输入python setup.py运行该文件。然后会在python的安装目录下生成一个Scripts文件夹,里面有easy_install.exe。去系统的环境变量中修改用户变量,将scripts的文件夹路径加入path中。
安装完成之后,在cmd中输入easy_install-script.py –help,如果有输出,则说明easy_install安装成功
打开cmd输入easy_install –allow-hosts=lxml.de,*.python.org lxml==3.4.4,然后回车,注意这里的3.4.4是版本号会更新,要依据官网的版本号
注意:如果你已经装了vs2008,vs2010等的开发工具,会安装失败,可以使用cmd 命令:pip install virtualenv 与 set STATICBUILD=true && pip install lxml 安装, 又或者,先下载wheel 文件,再安装wheel, 之后安装lxml就可以了
http://www.inhhh.com/download/lxml-3.4.4-cp34-none-win32.whl
pip install wheel
pip install lxml-3.6.0-cp35-cp35m-win32.whl
lxml装好,现在就装 pandas
直接在命令行输入 pip install pandas
打开Eclipse ,
输入
import tushare print(tushare.__version__) print(ts.get_hist_data('600848'))
运行通过,哈哈,这次真的用上python了。
.完.
//编写了几个连接数据库的函数,由于是公共函数,可以独立编写在新的文件中,例如我自己建了一个StkFunction.h ,StkFunction.cpp上
在CStkLibWnd 中增加了数据库相关的变量及初始化的函数,
BOOL m_IsSqlDBConnect; //是否已经连接Sql Db
_ConnectionPtr m_pCnn; //连接数据库
CSPString m_szConnString;//连接字符串
DBInitTable() ; //数据库初始化
CnnExecuteSql(CSPString sSql, bool nErr); //执行Sql命令
////////用于执行Sql命令
int CStkLibWnd::CnnExecuteSql(CSPString sSql, bool nErr)
{
_variant_t vntRecs[100];
long lRecs=1;
if(nErr)
{
try
{
m_pCnn->Execute(_bstr_t(sSql),
vntRecs,
adCmdText);
}
catch(_com_error e)
{
lRecs=0;
}
}
else
{
m_pCnn->Execute(_bstr_t(sSql),
vntRecs,
adCmdText);
}
return lRecs;
}
// DBInitTable() 只需要运行一次即可,把test()的改一下并运行一次就好。
int CStkLibWnd::DBInitTable()
{
CSPString sSql = “”;
int nflase =0;
//1. 证券代码表
sSql= “CREATE TABLE STK_STOCK( \n”
“m_wMarket [varchar](8), \n”
“m_szLabel Varchar(10), \n”
“m_szName Varchar(32), \n”
“m_szPingYing [varchar](10), \n”
“m_nUnit numeric(4), \n”
“m_nDigit numeric(4), \n”
“m_fLastClose [numeric](18,6), \n”
“[m_time] [datetime] ) \n”;
nflase += CnnExecuteSql(sSql, true);
//2. 实行行情
sSql= “CREATE TABLE STK_REPORT( \n”
“[m_cbSize] [varchar](4), \n”
“[m_wMarket] [varchar](8), \n”
“[m_szLabel] [varchar](10) ,\n”
“[m_szName] [varchar](30), \n”
“[m_time] [datetime] , \n”
“[m_dwFlag] [varchar](4), \n”
“[m_fLast] [numeric](18,6), \n”
“[m_fOpen] [numeric](18,6), \n”
“[m_fHigh] [numeric](18,6), \n”
“[m_fLow] [numeric](18,6), \n”
“[m_fNew] [numeric](18,6), \n”
“[m_fVolume] [numeric](18,6), \n”
“[m_fAmount] [numeric](18,6), \n”
“[m_fBuyPrice1] [numeric](18,6), \n”
“[m_fBuyVolume1] [numeric](18,6), \n”
“[m_fSellPrice1] [numeric](18,6), \n”
“[m_fSellVolume1] [numeric](18,6), \n”
“[m_fBuyPrice2] [numeric](18,6), \n”
“[m_fBuyVolume2] [numeric](18,6), \n”
“[m_fSellPrice2] [numeric](18,6), \n”
“[m_fSellVolume2] [numeric](18,6), \n”
“[m_fBuyPrice3] [numeric](18,6), \n”
“[m_fBuyVolume3] [numeric](18,6), \n”
“[m_fSellPrice3] [numeric](18,6), \n”
“[m_fSellVolume3] [numeric](18,6), \n”
“[m_fBuyPrice4] [numeric](18,6), \n”
“[m_fBuyVolume4] [numeric](18,6), \n”
“[m_fSellPrice4] [numeric](18,6), \n”
“[m_fSellVolume4] [numeric](18,6), \n”
“[m_fBuyPrice5] [numeric](18,6), \n”
“[m_fBuyVolume5] [numeric](18,6), \n”
“[m_fSellPrice5] [numeric](18,6), \n”
“[m_fSellVolume5] [numeric](18,6), \n”
“[m_fAvgPrice] [numeric](18,6), \n”
“[m_dwTickAll] [varchar](4)) \n”;
nflase += CnnExecuteSql(sSql, true);
//3. 分笔数据(盘口) 主表
sSql= “CREATE TABLE STK_TICK_HDR ( \n”
“[m_wMarket] [varchar](8), \n”
“[m_szLabel] [varchar](10), \n”
“[m_lDate] DateTime, \n”
“[m_fLastClose] [numeric](18,6), \n”
“[m_fOpen] [numeric](18,6), \n”
“[m_nAllCount] [numeric](18,6), \n”
“[m_nCount] [numeric](18,6)) \n”;
nflase += CnnExecuteSql(sSql, true);
//4. 分笔数据(盘口) 从表
sSql= “CREATE TABLE STK_TICK( \n”
“[m_wMarket] [varchar](8), \n”
“[m_szLabel] [varchar](10) ,\n”
“[m_szName] [varchar](30), \n”
“[m_time] DateTime, \n”
“[m_lTime] DateTime, \n”
“[m_fHigh] [numeric](18,6), \n”
“[m_fLow] [numeric](18,6), \n”
“[m_fNewPrice] [numeric](18,6), \n”
“[m_fVolume] [numeric](18,6), \n”
“[m_fAmount] [numeric](18,6), \n”
“[m_lStroke] [numeric](18,6), \n”
“[m_fBuyPrice1] [numeric](18,6), \n”
“[m_fBuyVolume1] [numeric](18,6), \n”
“[m_fSellPrice1] [numeric](18,6), \n”
“[m_fSellVolume1] [numeric](18,6), \n”
“[m_fBuyPrice2] [numeric](18,6), \n”
“[m_fBuyVolume2] [numeric](18,6), \n”
“[m_fSellPrice2] [numeric](18,6), \n”
“[m_fSellVolume2] [numeric](18,6), \n”
“[m_fBuyPrice3] [numeric](18,6), \n”
“[m_fBuyVolume3] [numeric](18,6), \n”
“[m_fSellPrice3] [numeric](18,6), \n”
“[m_fSellVolume3] [numeric](18,6), \n”
“[m_fBuyPrice4] [numeric](18,6), \n”
“[m_fBuyVolume4] [numeric](18,6), \n”
“[m_fSellPrice4] [numeric](18,6), \n”
“[m_fSellVolume4] [numeric](18,6), \n”
“[m_fBuyPrice5] [numeric](18,6), \n”
“[m_fBuyVolume5] [numeric](18,6), \n”
“[m_fSellPrice5] [numeric](18,6), \n”
“[m_fSellVolume5] [numeric](18,6))\n”;
nflase += CnnExecuteSql(sSql, true);
//5. 补充除权数据
sSql= “CREATE TABLE STK_POWER ( \n”
“[m_dwHeadTag] [varchar](4), \n”
“[m_wMarket] [varchar](8), \n”
“[m_szLabel] [varchar](10), \n”
“[m_time] DateTime, \n”
“[m_fGive] [numeric](18,6), \n”
“[m_fPei] [numeric](18,6), \n”
“[m_fPeiPrice] [numeric](18,6), \n”
“[m_fProfit] [numeric](18,6), \n”
“[m_dwReserved] [varchar](4)) \n”;
nflase += CnnExecuteSql(sSql, true);
//6. 分时数据
sSql= “CREATE TABLE STK_KDATA_MIN (\n”
“[m_dwHeadTag] [varchar](4), \n”
“[m_wMarket] [varchar](8), \n”
“[m_szLabel] [varchar](10), \n”
“[m_date] DateTime, \n”
“[m_time] DateTime, \n”
“[m_fOpen] [numeric](18,6), \n”
“[m_fHigh] [numeric](18,6), \n”
“[m_fLow] [numeric](18,6), \n”
“[m_fClose] [numeric](18,6), \n”
“[m_fVolume] [numeric](18,6), \n”
“[m_fAmount] [numeric](18,6), \n”
“[m_dwAdvance] [varchar](4), \n”
“[m_dwDecline] [varchar](4), \n”
“[m_dwReserved] [varchar](4)) \n”;
nflase += CnnExecuteSql(sSql, true);
//7. 日线数据表
sSql= “CREATE TABLE STK_KDATA_DAY( \n”
“[m_dwHeadTag] [varchar](4), \n”
“[m_wMarket] [varchar](8), \n”
“[m_szLabel] [varchar](10), \n”
“[m_time] DateTime, \n”
“[m_fOpen] [numeric](18,6), \n”
“[m_fHigh] [numeric](18,6), \n”
“[m_fLow] [numeric](18,6), \n”
“[m_fClose] [numeric](18,6), \n”
“[m_fVolume] [numeric](18,6), \n”
“[m_fAmount] [numeric](18,6), \n”
“[m_wAdvance] [varchar](4), \n”
“[m_wDecline] [varchar](4)) \n”;
nflase += CnnExecuteSql(sSql, true);
//8. 1分钟数据线
sSql= “CREATE TABLE STK_KDATA_MIN1 (\n”
“[m_dwHeadTag] [varchar](4), \n”
“[m_wMarket] [varchar](8), \n”
“[m_szLabel] [varchar](10), \n”
“[m_date] DateTime, \n”
“[m_time] DateTime, \n”
“[m_fOpen] [numeric](18,6), \n”
“[m_fHigh] [numeric](18,6), \n”
“[m_fLow] [numeric](18,6), \n”
“[m_fClose] [numeric](18,6), \n”
“[m_fVolume] [numeric](18,6), \n”
“[m_fAmount] [numeric](18,6), \n”
“[m_dwAdvance] [varchar](4), \n”
“[m_dwDecline] [varchar](4), \n”
“[m_dwReserved] [varchar](4)) \n”;
nflase += CnnExecuteSql(sSql, true);
//9. 5分钟数据线
sSql= “CREATE TABLE STK_KDATA_MIN5 ( \n”
“[m_dwHeadTag] [varchar](4), \n”
“[m_wMarket] [varchar](8), \n”
“[m_szLabel] [varchar](10), \n”
“[m_date] DateTime, \n”
“[m_time] DateTime, \n”
“[m_fOpen] [numeric](18,6), \n”
“[m_fHigh] [numeric](18,6), \n”
“[m_fLow] [numeric](18,6), \n”
“[m_fClose] [numeric](18,6), \n”
“[m_fVolume] [numeric](18,6), \n”
“[m_fAmount] [numeric](18,6), \n”
“[m_dwAdvance] [varchar](4), \n”
“[m_dwDecline] [varchar](4), \n”
“[m_dwReserved] [varchar](4)) \n”;
nflase += CnnExecuteSql(sSql, true);
//10. 操作记录表
sSql= “CREATE TABLE STK_LOG ( \n”
” m_date DateTime, \n”
” m_Updated [varchar](10), \n”
” m_nCount [numeric](8), \n”
” m_wMarket [varchar](10), \n”
” m_szLabel [varchar](10), \n”
” m_Type [varchar](30)) \n”;
nflase += CnnExecuteSql(sSql, true);
//11. 基本信息表
sSql= “create table basedata( \n”
“m_dwMarket varchar(8),\n” // DWORD ; 证券市场类型,see CStock::StockMarket
“m_szCode varchar(8),\n” // char m_szCode[STKLIB_MAX_CODE2]; // 证券代码,以’\0’结尾
“m_szDomain varchar(20),\n” // char m_szDomain[STKLIB_MAX_DOMAIN]; // 板块
“m_szProvince varchar(20),\n” // char m_szProvince[STKLIB_MAX_PROVINCE]; // 省份
“m_time datetime,\n” // time_t m_time; // 日期,time_t
“m_date datetime,\n” // DWORD m_date; // 日期 Format is YYYYMMDD for base data
“m_reporttype numeric(18,6),\n” // LONG m_reporttype; // 报告类型:年报、中报、季报
“m_fErate_dollar numeric(18,6),\n” // float m_fErate_dollar; // 当期美元汇率
“m_fErate_hkdollar numeric(18,6),\n” //float m_fErate_hkdollar; // 当期港币汇率 –// ★偿债能力
“m_fRatio_liquidity numeric(18,6),\n” // float m_fRatio_liquidity; // 流动比率
“m_fRatio_quick numeric(18,6),\n” // float m_fRatio_quick; // 速动比率
“m_fVelocity_receivables numeric(18,6),\n” // float m_fVelocity_receivables; // 应收帐款周率–// ★经营能力
“m_fVelocity_merchandise numeric(18,6),\n” // float m_fVelocity_merchandise; // 存货周转率
“m_fMain_income numeric(18,6),\n” // float m_fMain_income; // 主营业务收入
“m_fCash_ps numeric(18,6),\n” // float m_fCash_ps; // 每股净现金流量–// ★盈利能力
“m_fProfit_margin numeric(18,6),\n” // float m_fProfit_margin; // 主营业务利润率 %
“m_fNetasset_yield numeric(18,6),\n” // float m_fNetasset_yield; // 净资产收益率 %
“m_datebegin datetime,\n” // DWORD m_datebegin; // 上市日期 Format is YYYYMMDD-// ★资本结构
“m_fShare_count_total varchar(20),\n” // float m_fShare_count_total; // 总股本
“m_fShare_count_a varchar(20),\n” // float m_fShare_count_a; // 流通A股
“m_fShare_count_b varchar(20),\n” //float m_fShare_count_b; // 流通B股
“m_fShare_count_h varchar(20),\n” //float m_fShare_count_h; // 流通H股
“m_fShare_count_national varchar(20),\n” //float m_fShare_count_national; // 国有股
“m_fShare_count_corp varchar(20),\n” //float m_fShare_count_corp; // 法人股
“m_fProfit_psud varchar(20),\n” //float m_fProfit_psud; // 每股未分配利润
“m_fAsset varchar(20),\n” //float m_fAsset; // 总资产
“m_fRatio_holderright varchar(20),\n” //float m_fRatio_holderright; // 股东权益比率
“m_fRatio_longdebt varchar(20),\n” //float m_fRatio_longdebt; // 长期负债率
“m_fRatio_debt varchar(20),\n” //float m_fRatio_debt; // 资产负债率–// ★投资收益能力
“m_fNetasset_ps varchar(20),\n” //float m_fNetasset_ps; // 每股净资产
“m_fNetasset_ps_regulate varchar(20),\n” //float m_fNetasset_ps_regulate; // 调整每股净资产
“m_fEps varchar(20),\n” //float m_fEps; // 每股收益
“m_fEps_deduct varchar(20),\n” //float m_fEps_deduct; // 扣除后每股收益
“m_fNet_profit varchar(20),\n” //float m_fNet_profit; // 净利润
“m_fMain_profit varchar(20),\n” //float m_fMain_profit; // 主营业务利润
“m_fTotal_profit varchar(20),\n” //float m_fTotal_profit; // 利润总额–// ★增长率
“m_fProfit_inc varchar(20),\n” //float m_fProfit_inc; // 主营利润增长率%
“m_fIncome_inc varchar(20),\n” //float m_fIncome_inc; // 主营收入增长率%
“m_fAsset_inc varchar(20),\n” //float m_fAsset_inc; // 总资产增长率%” –// ★技术数据统计值
“m_fYield_average varchar(20),\n” //float m_fYield_average; // 平均收益率%
“m_fYield_stddev varchar(20),\n” //float m_fYield_stddev; // 收益标准差%
“m_fBeite varchar(20),\n” //float m_fBeite; // β值
“m_dwReserved1 varchar(8),\n” // DWORD m_dwReserved[4];
“m_dwReserved2 varchar(8),\n” //
“m_dwReserved3 varchar(8),\n” //
“m_dwReserved4 varchar(8),\n” //
“) \n”; //
nflase += CnnExecuteSql(sSql, true);
sSql.Format(“insert into STK_LOG (m_date, m_Updated, m_nCount, m_wMarket, m_szLabel, m_Type)”
“select GETDATE(),’SYSTEM’, %d, ”,”,’连接,更新数据表'”,nflase);
nflase += CnnExecuteSql(sSql,true);
return nflase;
}
首先项目要加入SQL 支持
打开StkLib 中 StdAfx.h,加入
#ifndef _AFX_NO_STKLIBAFXADO_SUPPORT
#import “c:\program files\common files\system\ado\msado15.dll” \
no_namespace \
rename (“EOF”, “adoEOF”)
#define _AFX_NO_STKLIBAFXADO_SUPPORT
#endif
在项目StkLib中添加类 CStkLibWnd, 即添加了 StkLibWnd.h 与 StkLibWnd.cpp 两个文件
//////////////// StkLibWnd.h /////////////////
#if !defined(AFX_StkLibWnd_H____INCLUDED_)
#define AFX_StkLibWnd_H____INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif
#include “StdAfx.h”
class CStkLibWnd;
STKLIB_API CStkLibWnd& AfxGetCStkLibWnd(); //参考工程中其它项目的实例化,以后可以直接调用
struct COMM_PACKET;
class STKLIB_API CStkLibWnd //: public CWnd
{
public:
CStkLibWnd();
virtual ~CStkLibWnd(); //析构
bool test(); //用来测试
};
#endif
//////////////// StkLibWnd.cpp /////////////////
#include “StkLibWnd.h”
//
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CStkLibWnd &AfxGetCStkLibWnd()
{
static CStkLibWnd g_stStkLibwnd;
return g_stStkLibwnd;
}
bool CStkLibWnd::test()
{
return true;
}
CStkLibWnd::CStkLibWnd()
{
}
CStkLibWnd::~CStkLibWnd()
{
}
//////
为了测试,修改Database.cpp文件,测试,能否正常运行
首先 SelfDB.h 加入相关头文件 #include “StkLibWnd.h”
修改 int CStDatabase::LoadCodetable( CStockContainer & container ) 函数
加入一行
bool bFlag = AfxGetCStkLibWnd().test();
如果编辑与运行正常通过,表示,编写方法正确,以后调整 读取文件的方法,只需要调用 AfxGetCStkLibWnd().同构函数,就可以了。
有人问为什么不直接改写其中一个钱龙的格式或FXJ的格式变成sql数据库,这里是个人经验,因为是派生类修改麻烦
class CSelfDB : public CQianlong = 》 class CQianlong : public IStStore
你要么就要改写全部,要么就编译不通过,当然,我也不是高手,如果有人有更方便的方法,请告诉我,QQ或者发邮件都可以, 不胜感激。
这个过程将是比较长的,需要一定的时间,首先说明,增加SQL存储并不是不用原来的文件存储,只是SQL在某些方面查询上比较优化,编写SQL查询估计很多人都会。
第一步,创建数据库 与 表格
首先创建数据库,这方面,由于之前已经看过相关的数据结构,只是把原有文件数据,按原来的格式构建表结构,
数据结构的参考文档,
可以查阅: http://www.inhhh.com/download/股票数据格式文档(适用于股票软件开发人员).pdf
创建的阶段就是写SQL了,这里只举个例子,例如 [日线] 数据
struct DAY_DATA {
__time32_t date; //日期
float open; //开盘价
float high; //最高价
float low; //最低价
float close; //收盘价
float amount; //成交量
float money; //成交金额
unsigned short int rise; // 上涨家数
unsigned short int fall; // 下跌家数
};
CREATE TABLE [dbo].[STK_KDATA_DAY](
[m_dwHeadTag] [varchar](4) NULL,
[m_wMarket] [varchar](8) NULL, //市场
[m_szLabel] [varchar](10) NULL, //股票代码
[m_time] [datetime] NULL, //日期
[m_fOpen] [numeric](18, 6) NULL, //开盘价
[m_fHigh] [numeric](18, 6) NULL, //最高价
[m_fLow] [numeric](18, 6) NULL, //最低价
[m_fClose] [numeric](18, 6) NULL, //收盘价
[m_fVolume] [numeric](18, 6) NULL, //成交量
[m_fAmount] [numeric](18, 6) NULL, //成交金额
[m_wAdvance] [varchar](4) NULL, //上涨家数
[m_wDecline] [varchar](4) NULL //下跌家数
) ON [PRIMARY]
下图为创建的全部表,当然当中有些与存储无关。
数据库编写完毕,之后会进行代码编写。。待续。
VC开发 CWebBrowser2 弹出javascript错误[解决办法]
只需要加上CWebBrowser2 ::put_Silent(true); 即可
例如
VARIANT vt;
COleVariant vaUrl=”www.163.com”;
m_web.put_Silent(true);
m_web.Navigate2(vaUrl,&vt,&vt,&vt,&vt);