关于文件打开GetOpenFileName和sqlite3_preprare的有关问题

关于文件打开GetOpenFileName和sqlite3_preprare的问题
本人最近在做一个VC项目需要用到sqlite3数据库和EXCEL功能,所以采用GetOpenFileName打开文件方式。本来是先打开excel文件取出内容释放excel再读取sqlite3数据库中的数据进行对比。最后发现sql语句运行到sqlite3_preprare这一句是产生了SQLITE_ERROR(第一个错误 SQL error or missing database这里的错误是sql语句错误或数据库丢失),但是我单调过只要不执行GetOpenFileName这条语句sqlite一切都正常所以不可能是sql语句错误,而且我打开excel取得数据之后也有对excel内容进行释放。请各位大神帮我看下为什么打开excel文件后会出现sqlite3错误的问题。
以下是打开excel文件的代码:

int Excel::Excelopen()
{
ZeroMemory(&ofn, sizeof(ofn));  
szBuffer = new TCHAR[MAX_PATH*sizeof(TCHAR)];
szBuffer[0] = NULL;  
static const TCHAR szFilter[]    
= TEXT("Excel Files (*.xls)\0*.xls");  //加\0限定只识别.xls文件 
ofn.lStructSize         = sizeof(OPENFILENAME);  
ofn.hwndOwner           = NULL;//g_hWnd;  
ofn.hInstance           = NULL;  
ofn.lpstrFilter         = szFilter;  
ofn.nFilterIndex        = 1;  
ofn.lpstrCustomFilter   = NULL;  
ofn.nMaxCustFilter      = 0;  
ofn.lpstrFile           = szBuffer;  
ofn.nMaxFile            = MAX_PATH;  
ofn.lpstrFileTitle      = NULL;  
ofn.nMaxFileTitle       = 0;  
ofn.lpstrInitialDir     = NULL;  
ofn.lpstrTitle          = TEXT("请打开Excel文件");  
ofn.Flags               = OFN_HIDEREADONLY;  
ofn.nFileOffset         = 0;  
ofn.nFileExtension      = 0;  
ofn.lpstrDefExt         = TEXT(".xls");  
ofn.lCustData           = 0L;  
ofn.lpfnHook            = NULL;  
ofn.lpTemplateName  = NULL;  
//return 1;
return GetOpenFileName (&ofn);  // user specified a file  
}

释放excel资源的代码:

void Excel::Excelclose()
{
sheet.ReleaseDispatch();
sheets.ReleaseDispatch();
book.ReleaseDispatch();
books.ReleaseDispatch();
app.Quit();
app.ReleaseDispatch();
delete covOptional;
}

sqlite3读取数据代码(其中在sqlite3_prepare位置出错返回值为1)

bool Csqlite::Readfromdb()//
{
CString sql;
// err_msg = new char[100];
//memset(err_msg,0,100);
char *err_msg;
char *tmp_char;
Source src_tmp;
if (sqlite3_open("source.db", &con)!=SQLITE_OK)
{
return FALSE;
}
sql = "select * from source";
if (sqlite3_prepare(con, sql, -1, &stmt, NULL)!=SQLITE_OK)
{
sqlite3_finalize(stmt);
}
else
{
while (sqlite3_step(stmt)==SQLITE_ROW)
{
src_tmp.name = sqlite3_column_text(stmt, 0);
src_tmp.cmd = sqlite3_column_text(stmt, 1);
myList.AddTail(src_tmp);
}
sqlite3_finalize(stmt);
}
sqlite3_close(con);
return TRUE;
}

------解决方案--------------------
本帖最后由 zyq5945 于 2013-12-06 18:14:23 编辑
可能是当前目录改变了,调用GetOpenFileName前先用GetCurrentDirectory获取当前目录,调用GetOpenFileName后再用GetCurrentDirectory获取当前目录,看下是否一致,如果不一致用SetCurrentDirectory设置回去试试。