欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 请教DLL读取数据库表格的问题

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有3392人关注过本帖树形打印复制链接

主题:请教DLL读取数据库表格的问题

帅哥哟,离线,有人找我吗?
智慧梦
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:45 积分:0 威望:0 精华:0 注册:2015/12/25 9:16:30
请教DLL读取数据库表格的问题  发帖心情 Post By:2016/4/22 10:56:52 [只看该作者]

问题描述:

编制一个DLL,其功能是:ODBC或者ADO打开一个Foxpro的数据表DBF, 读取我自己的生成的数据。

在行情总表(序列方式下?)这个DLL被频繁调用。每个股票调用一次, 建立数据连接,SQL访问,返回数据..调用完毕,关闭数据连接.下次再调用,再建立链接,,再关闭链接..时间都废在建立链接这里了.

请教:能否一次链接多次访问呢?如何加快提高访问效率?

谢谢!


 回到顶部
帅哥哟,离线,有人找我吗?
王锋
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2016/4/22 11:11:51 [只看该作者]

勾选这里选项。

然后你的DLL应该在初始化的位置将数据库的建立连接部分放到公共的全局部分,软件调用接口后直接就只去调用具体数据就可以了,这样速度就加快了


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20160422110820.gif
图片点击可在新窗口打开查看


金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
onlyflyttn
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:20 积分:0 威望:0 精华:0 注册:2013/1/8 19:42:27
  发帖心情 Post By:2016/4/26 18:42:30 [只看该作者]

请问金字塔的VBA不是可以直接调用ADO进行数据访问么,Dll有什么优势?

 回到顶部
帅哥哟,离线,有人找我吗?
智慧梦
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:45 积分:0 威望:0 精华:0 注册:2015/12/25 9:16:30
  发帖心情 Post By:2016/5/8 12:02:44 [只看该作者]

以下是引用智慧梦在2016/4/22 10:56:52的发言:

问题描述:

编制一个DLL,其功能是:ODBC或者ADO打开一个Foxpro的数据表DBF, 读取我自己的生成的数据。

在行情总表(序列方式下?)这个DLL被频繁调用。每个股票调用一次, 建立数据连接,SQL访问,返回数据..调用完毕,关闭数据连接.下次再调用,再建立链接,,再关闭链接..时间都废在建立链接这里了.

请教:能否一次链接多次访问呢?如何加快提高访问效率?

谢谢!

 

王峰专家您好:

      按照您的指引,我做了尝试,暂时还未有结果.因为中途被卡住了(我使用ADO). 源码如下,请专家指点为盼,谢谢!

 

hr=m_pConnection.CreateInstance("ADODB.Connection") ;       // 创建Connection对象
if(SUCCEEDED(hr))
  {

 

_bstr_t strConnect=

     "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=c:\\JZTTEST\\;Exclusive=No;Collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;";

 

m_pConnection->Open(strConnect,"","",adModeUnknown);       /* 金字塔调用时,就卡死在这里...而做成一般EXE程序时,就正常运行读取数据*/

 

 

  }

 

     

[此贴子已经被作者于2016/5/8 12:04:09编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
智慧梦
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:45 积分:0 威望:0 精华:0 注册:2015/12/25 9:16:30
王峰专家,源码在此,请赐教为盼,谢谢!  发帖心情 Post By:2016/5/8 12:18:35 [只看该作者]

以下是引用智慧梦在2016/4/22 10:56:52的发言:

问题描述:

编制一个DLL,其功能是:ODBC或者ADO打开一个Foxpro的数据表DBF, 读取我自己的生成的数据。

在行情总表(序列方式下?)这个DLL被频繁调用。每个股票调用一次, 建立数据连接,SQL访问,返回数据..调用完毕,关闭数据连接.下次再调用,再建立链接,,再关闭链接..时间都废在建立链接这里了.

请教:能否一次链接多次访问呢?如何加快提高访问效率?

谢谢!

王峰专家您好:

      按照您的指引,我做了尝试,暂时还未有结果.因为中途被卡住了(我使用ADO). 源码如下,请专家指点为盼,谢谢!

 

........
_RecordsetPtr  m_pRecordset("ADODB.Recordset");
_ConnectionPtr m_pConnection("ADODB.Connection");
........


//以上是定义,,以下是DLLMain程序
BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
//::CoInitialize(NULL);
try
  {
    hr=m_pConnection.CreateInstance("ADODB.Connection");
    if(SUCCEEDED(hr))
        {
          _bstr_t strC;
          m_pConnection->Open(strConnect,"","",adModeUnknown);       /*为什么死在这里*/
          mylog<<"死在上一句,为什么到不了这里???"<<endl;

        }
   }
catch(_com_error e) 
  { 
   mylog<<"这个错误信息是什么都显示不出来?"<<e.ErrorMessage()<<endl;
   return TRUE; 
  } 
 
m_pRecordset.CreateInstance(__uuidof(Recordset));// 创建记录集对象

switch (ul_reason_for_call) {
   case DLL_PROCESS_ATTACH:
        ::CoInitialize(NULL);
   case DLL_THREAD_ATTACH:
   case DLL_THREAD_DETACH:
   case DLL_PROCESS_DETACH:
        ::CoUninitialize();
      break;
  }

if(m_pConnection->State) 
    m_pConnection->Close();
//::CoUninitialize();

return TRUE;
}


 回到顶部
帅哥哟,离线,有人找我吗?
马良
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:1516 积分:229 威望:0 精华:0 注册:2012/3/30 12:40:56
  发帖心情 Post By:2016/5/8 13:04:28 [只看该作者]

你用的是什么数据库?试试换成access看看能否正常调用。

 回到顶部
帅哥哟,离线,有人找我吗?
智慧梦
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:45 积分:0 威望:0 精华:0 注册:2015/12/25 9:16:30
  发帖心情 Post By:2016/5/9 12:18:55 [只看该作者]

以下是引用马良在2016/5/8 13:04:28的发言:
你用的是什么数据库?试试换成access看看能否正常调用。

还没到链接数据库这一步,就死掉了,死在"创建Connection对象"这一步就死掉了

但是我做成EXE文件就正常.

 

hr=m_pConnection.CreateInstance("ADODB.Connection") ;       // 创建Connection对象-------在这一步就死掉了


 回到顶部
帅哥哟,离线,有人找我吗?
王锋
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2016/5/9 13:32:40 [只看该作者]

那应该与金字塔无关的,是不是你的在项目中还有其他什么东西,导致冲突了


金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
智慧梦
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:45 积分:0 威望:0 精华:0 注册:2015/12/25 9:16:30
  发帖心情 Post By:2016/5/9 20:58:06 [只看该作者]

以下是引用王锋在2016/5/9 13:32:40的发言:
那应该与金字塔无关的,是不是你的在项目中还有其他什么东西,导致冲突了

 

以下是网上的案例,与我一样.他的解决方法就是:首先在调用的EXE程序(也就是金字塔程序)里先初始化,奇怪就可以了

 

http://bbs.csdn.net/topics/340181461

 


 回到顶部
帅哥哟,离线,有人找我吗?
智慧梦
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:45 积分:0 威望:0 精华:0 注册:2015/12/25 9:16:30
  发帖心情 Post By:2016/5/10 11:39:20 [只看该作者]

以下是引用王锋在2016/5/9 13:32:40的发言:
那应该与金字塔无关的,是不是你的在项目中还有其他什么东西,导致冲突了

 

王峰等专家: 请问,有无现成的使用ADO的DLL源码实例,我来学习一下,拜托了.

 


 回到顶部