C++Builder:在运行时创建BDE别名

原创 2001年06月28日 06:34:00

 

  C++Builder:在运行时创建BDE别名
    通过BDE别名来连接数据库,确实很方便,然而,那些没有确定的数据库,我们却无法给它创建别名。
而大多数时候,当我们把程序交给别人真正投入使用时,别名的路径也是不确定的。这就要求我们在程序
运行时动态连接到数据库。
  现在,假设在程序运行目录下有个通讯录Friends.db,我们要通过TQuery、TDataSource等控件来访问:
本人学习编程不久,如有错误或失漏,请不吝赐教

在窗体上添加相关控件
在头文件中声明会话句柄
hDBISes tmpSession;

要在程序启动时装入数据库,可以如下:
void __fastcall TmainFrm::FormCreate(TObject *Sender)
{
        if (Query1->State==dsInactive)
                {
               
                DbiInit(NULL);//BDE初始化
                DbiStartSession(NULL,tmpSession,"");//打开一个临时的BDE session
                //设别名路径为程序所在目录,要注意前头要加上"PATH:"字串
        AnsiString strPath="PATH:"+ExtractFileDir(Application->ExeName);
                DbiAddAlias(NULL,"tmpMyFriends",
                        "PARADOX",strPath.c_str(),false);//增加别名完成
                Query1->DatabaseName="tmpMyFriends";//接下来就可如常使用了。
                Query1->Active=true;

                }
      
       Query1->SQL->Clear ();
       Query1->SQL->Add("select * from Friends.db");
       Query1->Open();
}

  当程序关闭时,要记得释放BDE占用的资源
void __fastcall TmainFrm::FormClose(TObject *Sender, TCloseAction &Action)
{
        if (Query1->Active )
                Query1->Active=false;
        DbiCloseSession(tmpSession);//关闭当前会话
        DbiExit();//放掉BDE资源

}      

     可以说明一下的是DbiStartSession和DbiAddAlias函数。
 DbiStartSession函数语法如下:
DBIResult DBIFN DbiStartSession ([pszName], phSes, [pNetDir]);
 其中,pszName参数是pCHAR类型指针,用来为最近打开的Session命名,可以是NULL而让BDE任意指定
;phSes参数则用来指定你要找开的Session的句柄。pNetDir为指向Network路径的指针,具体我也没有用过。
函数调用成功,则返回DBIERR_NONE。
        DbiAddAlias函数语法如下:
DBIResult DbiAddAlias( [hCfg], pszAliasName, pszDriverType, pszParams, bPersistent );
 其中,hCfg指定要使用的配置文件,设NULL则把当前Session加入配置文件;pszDriverType指明数据
库驱动类型,NULL表示为STANDARD型。bPersitent为bool值,指定是否一直保存别名到配置文件中,如果为
false则要加入的别名只有当前Session中使用。函数如调用成功,返回DBIERR_NONE。
          稻草人
                                                                        2001.6.22

delphi通过BDE方式连接数据库以及程序Demo

1、设置BDE连接 2、
  • huangwei19900407
  • huangwei19900407
  • 2014年08月19日 10:24
  • 1239

在运行时创建刚体

首先要感谢Emanuele Feronato给我们分享那么多精品教程,我的文章灵感也都是来自他的博客。 在"掉落的苹果——b2Body"和"创建圆形刚体"中,我们学会了如果创建矩形和圆形刚体。今...
  • Flood_Dragon
  • Flood_Dragon
  • 2013年06月19日 16:38
  • 504

如何在运行时确定对象类型(RTTI)

RTTI 是“Runtime Type Information”的缩写,意思是:运行时类型信息。它提供了运行时确定对象类型的方法。本文将简略介绍 RTTI 的一些背景知识、描述 RTTI 的概念,并通...
  • zhaofuguang
  • zhaofuguang
  • 2013年10月18日 14:51
  • 309

JAVA 笔记(四) RTTI - 运行时类型检查

运行时类型检查,即Run-time Type Identification。这是Java语言里一个很强大的机制,那么它到底给我们的程序带来了什么样的好处呢? 在了解运行时类型检查之前,我们要首先知道...
  • ghost_Programmer
  • ghost_Programmer
  • 2016年05月29日 14:43
  • 3572

delphi代码创建bde别名示例

实际应用中可能需要程序自动创建BDE别名 特试建 MSsql和paradox数据库别名 //单元代码 unit Unit11; interface uses Windows, Messa...
  • simonhehe
  • simonhehe
  • 2013年01月08日 15:06
  • 1866

C++ 运行时绑定

C++ 动态绑定 C++ 的虚函数 + 派生类对象及派生类到基类的类型转换 共同完成了C++ 面向对象程序设计的三个基本概念之一--动态绑定。 同样一段代码运行时才能决定运行的具体函数是哪个(相对于编...
  • chenqiang0721
  • chenqiang0721
  • 2013年11月05日 09:38
  • 942

在运行时请求权限

从 Android 6.0(API 级别 23)开始,用户开始在应用运行时向其授予权限,而不是在应用安装时授予。此方法可以简化应用安装过程,因为用户在安装或更新应用时不需要授予权限。它还让用户可以对应...
  • lyj1005353553
  • lyj1005353553
  • 2016年11月30日 11:15
  • 384

Java多线程系列(8)--线程优先级和守护线程(后台线程)

线程优先级和守护线程
  • L_kanglin
  • L_kanglin
  • 2017年02月21日 19:48
  • 204

android面试五

1.【单选】关于广播以下陈述正确的是(D ). A.广播接收器只能在配置文件中注册             B.广播接收器注册后不能注销 C.广播接收器只能接收自定义的广播消息      ...
  • dengshengjin2234
  • dengshengjin2234
  • 2013年01月23日 16:19
  • 6115

Java反射机制(一)

Java反射机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public, static 等)、superclass(例...
  • yangdongsheng95
  • yangdongsheng95
  • 2016年09月06日 19:21
  • 202
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++Builder:在运行时创建BDE别名
举报原因:
原因补充:

(最多只允许输入30个字)