Please, this code keeps returning "SQLITE BUSY : Database is locked" even though I was not accessing it from another external thread or process and how can I resolve this?
The code uses CppSQLite3 C++ wrapper for SQLite.
int DepartmentAccess::SaveOrDeleteAccess(long long iDeptNameID,long long &iUserID,int &iAccessTypeID)
{
char szString[1000];
char chAccessTypeID[1000];
StringCbPrintfA(szString,sizeof(szString),"%d",iAccessTypeID);
EncryptString(szString,chAccessTypeID);
try
{
char szDatabaseFile[1000];
GetDatabaseA(szDatabaseFile,sizeof(szDatabaseFile));
CppSQLite3DB db;
db.open(szDatabaseFile);
CppSQLite3Statement stmt = db.compileStatement("SELECT AccessID FROM DepartmentAccess WHERE (InsututionID = ? AND DeptNameID = ? AND UserID = ? AND AccessType = ?)");
stmt.bind(1,m_iInsututionID);
stmt.bind(2,iDeptNameID);
stmt.bind(3,iUserID);
stmt.bind(4,chAccessTypeID);
CppSQLite3Query q = stmt.execQuery();
if(!q.fieldIsNull(0))
{
if(!m_iMode)
{
return -2;
}
}
if(!m_iMode)
{
StringCbCopyA(szString,sizeof(szString),"INSERT INTO DepartmentAccess(InsututionID,DeptNameID,UserID,AccessType) VALUES(?,?,?,?)");
}
else
{
StringCbCopyA(szString,sizeof(szString),"DELETE FROM DepartmentAccess WHERE (InsututionID = ? AND DeptNameID = ? AND UserID = ? AND AccessType = ?)");
}
CppSQLite3Statement stmt1 = db.compileStatement(szString);
int iPosition = 1;
stmt1.bind(iPosition++, m_iInsututionID);
stmt1.bind(iPosition++, iDeptNameID);
stmt1.bind(iPosition++, iUserID);
stmt1.bind(iPosition++, chAccessTypeID);
stmt1.execDML();
if(!m_iMode)
{
StringCbPrintfA(szString,sizeof(szString),"DELETE FROM DepartmentAccessRequest WHERE (InsututionID = ? AND DeptNameID = ? AND UserID = ? AND RequestedAccess = ?)");
CppSQLite3Statement stmt2 = db.compileStatement(szString);
int iPosition = 1;
stmt2.bind(iPosition++, m_iInsututionID);
stmt2.bind(iPosition++, iDeptNameID);
stmt2.bind(iPosition++, iUserID);
stmt2.bind(iPosition++, chAccessTypeID);
stmt2.execDML();
}
return 1;
}
catch(CppSQLite3Exception & e)
{
char szString[200];
StringCbPrintfA(szString,sizeof(szString),"Error Code: %d\n Error Mesage: %s",e.errorCode(),e.errorMessage());
MessageBoxA(NULL,szString,"Save Or Delete Access Error(Department Access)",MB_OK);
}
return 0;
}