C++ 访问新数据库时应用程序崩溃

C++ 访问新数据库时应用程序崩溃,c++,symbian,C++,Symbian,我的应用程序在从数据库读取/写入数据时崩溃。我在c:上有一个数据库,我用不同的名称复制粘贴和重命名。以下流程是我用于复制的流程…如果您有任何建议或解决方案,请指导我 RFs fs; fs.Connect(); CFileMan* fileMan=CFileMan::NewL(fs); CleanupStack::PushL(fileMan); TInt err=fileMan->Copy(anOld,aNew); CleanupStack::PopAndDestroy(fileMan

我的应用程序在从数据库读取/写入数据时崩溃。我在c:上有一个数据库,我用不同的名称复制粘贴和重命名。以下流程是我用于复制的流程…如果您有任何建议或解决方案,请指导我

RFs fs;
fs.Connect();

CFileMan* fileMan=CFileMan::NewL(fs);
CleanupStack::PushL(fileMan);

TInt err=fileMan->Copy(anOld,aNew);

CleanupStack::PopAndDestroy(fileMan);
fs.Close();

if(err==KErrNone)
return ETrue;
else
return EFalse;
当我试图从数据库中插入或获取任何数据时,它会在下面一行崩溃

User::LeaveIfError( iDatabase.Execute( strSQL ) );
数据库创建: 开放数据库:
User::LeaveIfError()
iDatabase.Execute()返回错误代码时引发异常

您可以在以下位置找到最常见的Symbian错误代码:

如果崩溃发生在
RDbDatabase::Execute()
实际运行之前,我们需要查看更多代码,以了解
iDatabase
处于不良状态的原因。

User::LeaveIfError()
iDatabase.Execute()
返回错误代码时引发异常

您可以在以下位置找到最常见的Symbian错误代码:

如果崩溃发生在
RDbDatabase::Execute()
实际运行之前,我们需要查看更多代码,以了解
iDatabase
处于不良状态的原因。

您需要解释“崩溃”的含义-异常/离开?恐慌?如果是,留下什么代码,或者什么类别和编号

如果它在这里“崩溃”

您可能需要检查返回值,即

TInt error = iDatabase.Execute( strSQL );
//Now log/display the error
User::LeaveIfError(error);
还有几点需要注意:

  • 如果在对象上使用
    cleanupclosepush()
    ,则不需要同时调用
    Close()
    CleanupStack::popandestroy()
    。后者将为您调用
    Close()
  • 您的
    OpenL()
    函数混合使用了离开代码和返回代码,这通常被认为是糟糕的风格。此外,在清理堆栈上留下内容的函数通常命名为
    xxxxLC()
    ,后面的“C”表示清理项
您需要解释“崩溃”的含义-例外/离开?恐慌?如果是,留下什么代码,或者什么类别和编号

如果它在这里“崩溃”

您可能需要检查返回值,即

TInt error = iDatabase.Execute( strSQL );
//Now log/display the error
User::LeaveIfError(error);
还有几点需要注意:

  • 如果在对象上使用
    cleanupclosepush()
    ,则不需要同时调用
    Close()
    CleanupStack::popandestroy()
    。后者将为您调用
    Close()
  • 您的
    OpenL()
    函数混合使用了离开代码和返回代码,这通常被认为是糟糕的风格。此外,在清理堆栈上留下内容的函数通常命名为
    xxxxLC()
    ,后面的“C”表示清理项

请编辑您的帖子,使代码可读。请编辑您的帖子,使代码可读。
User::LeaveIfError( iDatabase.Execute( strSQL ) );
TInt error = iDatabase.Execute( strSQL );
//Now log/display the error
User::LeaveIfError(error);