这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 嵌入式数据库empress编程1

共2条 1/1 1 跳转至

嵌入式数据库empress编程1

菜鸟
2008-05-29 17:15:41     打赏

Empress数据库mr编程1

Empress为c\c++编程提供了两套直接访问数据库的接口程序:mx和mr。这两套接口提供了比任何查询语言更快的执行速度,能够更好的控制数据库,允许用户实现功能更复杂的函数,自定义报表格式,开发高层接口等等。

mr与mx比较:

mx比mr简单,只适应一些简单的应用;

mx一次只能访问一个表实例,mr则可以访问多个;

mr编程比mx运行速度快;

mr提供了测试程序判断某个系统目录是否是empress数据库;

mr具有打开整个数据库功能,需要多个表的并发访问;

mr提供了更复杂的条件查询。

 

 

示例数据库: repairs,   表:personnel,loans。

 

CREATE table personnel (number INTEGER, name CHAR (25, 1),

        phone CHAR (15, 1), credit_limit dollar (6, 1));

表personnel记录:

 *** Table: personnel ***

  

   number     name          phone        credit_limit

  

   10         Kilroy        426-9681     $500.00

   3          Jones         667-2951     $500.00

   5          Mosca         544-2243     $750.00

   17         Wladislaw     723-6073     $600.00

   8          Peterson      978-6060     $250.00

   4          Scarlatti     961-7363     $100.00

 

 

CREATE table loans (name CHAR (25, 1),

        date DATE (1), amount DOLLAR (6, 1));

表loans记录:

   *** Table: loans ***

  

   name          date                 amount

  

   Mosca         2 February 1992      $150.00

   Jones         7 February 1992       $33.95

   Kilroy        16 February 1992     $250.00

   Wladislaw     27 February 1992      $55.00

   Jones         3 April 1992          $25.00

   Mosca         4 May 1992           $200.00

   Wladislaw     12 May 1992           $25.00

   Peterson      6 June 1992           $50.00

   Wladislaw     25 June 1992          $75.00

   Jones         12 August 1992       $300.00

   Jones         25 December 1992     $100.00

 

 

(一)访问MR接口程序

例1

    #include <mscc.h> // 包含mr库文件         

        main ()  

    {

             msinit ();       // 初始化

        //     ...

             msexit (1);       // 执行程序结束时的清理工作

       }

例2

       #include <mscc.h>

       msmain ()          // 使用msmain()自动初始化和结束清理工作

       {

       //    ...

       }

 

(二)打开和关闭表

 

table_desc = mropen (database_name, table_name, mode);

 

database_name:数据库名

table_name:表名

mode:  ‘r’读模式

    ‘u’更新模式

    ‘d’延迟模式

table_desc:成功:返回表描述符

       失败:终止调用程序

 

说明:  (1)打开表时自动上锁;

        (2)为了获得表的信息会打开数据字典;

        (3)如果数据字典已经打开,可以使用CHARNIL代替database_name。

 

flag = mrclose (table_desc);

 

flag:成功返回真,失败返回假。

 

说明:关闭表会解锁表。

 

例3

#include    <mscc.h>

#define     DATABASE   "repairs"

 

msmain ()

{

    addr     loans_tabdesc;

   

    //  打开表loans

    loans_tabdesc = mropen (DATABASE, "loans", 'u');

    if (!mrclose (loans_tabdesc))

    {   // 打印出错信息

       fprintf (stderr, "Unable to close the table\n");

       fprintf (stderr, "mroperr='%d' : %s\n", mroperr, mrerrmsg ());

    }

    return 0;

}

 

 

(三)打开和关闭数据字典

mropdict (database_name, mode);

 

mode: ‘r’读模式

    ‘u’更新模式

 

说明:(1)一次只能打开一个数据字典;

      (2)打开数据字典后,打开和关闭表的速度会加快。

 

mrcldict ();

 

例4

#include    <mscc.h>  

#define     DATABASE   "repairs"

  

msmain ()

{

    addr     loans_tabdesc;

  

    mropdict (DATABASE, 'r');

    loans_tabdesc = mropen (CHARNIL, "loans", 'u');

    mrcldict ();

    if (!mrclose (loans_tabdesc))

    {

       fprintf (stderr, "Unable to close the table\n");

       fprintf (stderr, "mroperr='%d' : %s\n", mroperr, mrerrmsg ());

    }

    return 0;

}

 

(四)检测目录是否是数据库

 

flag = mrqdb (directory);

 

directory:目录名,可以是相对路径,也可以是绝对路径;

flag:成功返回真,失败返回假。

 

例5

#include <mscc.h>

#define DATABASE "repairs"

 

msmain()

{

    if (mrqdb(DATABASE))

    {

       printf("%s is an Empress database!\n",DATABASE);

    }

}




关键词: 嵌入式     数据库     empress     编程     打开     loa    

工程师
2008-05-30 17:06:01     打赏
2楼

学习!


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]