查看完整版本: 数据库操作源代码

Greenland 2008-6-21 14:00

数据库操作源代码

[font=Times New Roman][size=16px]在操作数据库时,有很多API函数,十分繁杂。我编写了一个简单的函数,给定数据库名称,可以打开这个数据库,如果没有则创建一个。[/size][/font]
[font=Times New Roman][size=16px]定义如下:[/size][/font]
[font=Times New Roman][size=16px]头文件中写入:[/size][/font]
[color=#006600][font=Times New Roman][size=16px]Err OpenDatabase (const Char * databaseName, const UInt16 mode, DmOpenRef & databaseRef, LocalID & databaseID);[/size][/font][/color]
[size=3][font=Times New Roman][size=16px]cpp文件中写入:[/size][/font][/size]
[color=#006600][font=Times New Roman][size=16px]Err OpenDatabase (const Char * databaseName, const UInt16 mode, DmOpenRef & databaseRef, LocalID & databaseID)
{
   Err error = errNone;
   //是否有数据库
   databaseID = DmFindDatabase (defaultCardNumber, databaseName);
   error = DmGetLastErr ();
   if ((databaseID == 0) || (error != errNone))
   {
      //如果没有则创建一个
      error = DmCreateDatabase (defaultCardNumber, databaseName, appFileCreator, 'DATA', false);
      if (error != errNone)
      {
         //alert
         FrmCustomAlert (CommonErrorAlert, "创建数据库失败!", " ", " ");
      }
      else
      {
         //打开
         databaseID = DmFindDatabase (defaultCardNumber, databaseName);
         databaseRef = DmOpenDatabase (defaultCardNumber, databaseID, mode);
         error = DmGetLastErr ();
         if ((databaseRef == 0) || (error != errNone))
         {
            //failed to open database
            //alert
            FrmCustomAlert (CommonErrorAlert, "打开数据库失败!", " ", " ");
         }
      }
   }
   else
   {  
      //如果有,则直接打开
      databaseRef = DmOpenDatabase (defaultCardNumber, databaseID, mode);
      error = DmGetLastErr ();
      if ((databaseRef == 0) || (error != errNone))
      {
         //failed to open database
         //alert
         FrmCustomAlert (CommonErrorAlert, "打开数据库失败!", " ", " ");
      }
   }
   return error;
}[/size][/font][/color]
[font=Times New Roman][size=16px][/size][/font]
[size=3][color=#000000][font=Times New Roman][size=16px]其中defaultCardNumber,在头文件中是如下定义的。[/size][/font][/color][/size]
[color=#006600][font=Times New Roman][size=16px]const UInt16 defaultCardNumber = 0;[/size][/font][/color]
[size=3][color=#000000][font=Times New Roman][size=16px]CommonErrorAlert在资源中是如下定义的。[/size][/font][/color][/size]
[color=#006600][font=Times New Roman][size=16px]ALERT ID CommonErrorAlert
ERROR
BEGIN
     TITLE "错误"
     MESSAGE "^1^2^3"
     BUTTONS "确定"
END[/size][/font][/color]

[font=Times New Roman][size=3][color=#000000]我们使用时,可以这样调用[/color][/size][/font]
[font=Times New Roman][size=3][color=#006600]Err error = errNone;
error = OpenDatabase (defaultAbbreviationDatabaseName, dmModeReadWrite, g_prefs.abbreviationDBRef, g_prefs.abbreviationDBID);[/color][/size][/font]

[font=Times New Roman][size=3][color=black]其中defaultAbbreviationDatabaseName是我自己定义的默认的数据库名静态变量,其它两个则是在preference结构中的两个变量。如果没有特殊情况,就可以顺利打开所需要的数据库了。[/color][/size][/font]
[font=Times New Roman][size=3][/size][/font]
[font=Times New Roman][size=16px]光打开不行,程序退出的时候,还要记得关闭啊。[/size][/font]
[font=Times New Roman][size=16px]因而,需要在事件中加入这么一条:[/size][/font]

[color=seagreen][font=Times New Roman][size=16px]case frmCloseEvent:[/size][/font][/color]
[color=seagreen][font=Times New Roman][size=16px]{
   if (g_prefs.abbreviationDBRef)
   {
       Err error = DmCloseDatabase (g_prefs.abbreviationDBRef);
   }
   break;
}[/size][/font][/color]
[font=Times New Roman][size=3][color=#2e8b57][/color][/size][/font]
[font=Times New Roman][size=3][color=#2e8b57]欢迎大家访问我的博客[/color][/size][/font]
[url=http://blog.sina.com.cn/agilemind]http://blog.sina.com.cn/agilemind[/url]

[[i] 本帖最后由 Greenland 于 2008-6-21 14:02 编辑 [/i]]
页: [1]
查看完整版本: 数据库操作源代码