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]]