#include "sqlite3.h"
#pragma comment(lib, "sqlite3.lib")
class CSqlite3Ex
{public:
CSqlite3Ex();
~CSqlite3Ex();
BOOL Init_Sqlite3();
BOOL IsExistSN(CString SN);
BOOL Insert_SN_Sqlite3(CString SN, BOOL bMark = FALSE);
private:
sqlite3* m_sqlite3db;
};
cpp文件
CStringA g_strSQLResult = "";
static int Sqlite3_Callback(void *NotUsed, int argc, char **argv, char **azColName);
CSqlite3Ex::CSqlite3Ex()
{
m_sqlite3db = NULL;
Init_Sqlite3();
}
CSqlite3Ex::~CSqlite3Ex()
{
if (m_sqlite3db)
sqlite3_close(m_sqlite3db);
}
BOOL CSqlite3Ex::Init_Sqlite3()
{
char* errmsg;
int nResult = sqlite3_open("Hymsonlaser.hmxdb",&m_sqlite3db);
if (nResult != SQLITE_OK)
{
sqlite3_close(m_sqlite3db);
m_sqlite3db = NULL;
return FALSE;
}
CTime __tCurrent = CTime::GetCurrentTime();
CString strSQL;
strSQL.Format(_T("create table LaserRecoder_%s(id integer primary key autoincrement,MarkSN varchar(255),MarkTime TimeStamp NOT NULL DEFAULT (datetime('now','localtime')))"), __tCurrent.Format(_T("%Y")));
nResult = sqlite3_exec(m_sqlite3db,(CStringA)strSQL,NULL,NULL,&errmsg);
if (nResult != SQLITE_OK)
{
CStringA ss = errmsg;
strSQL.Format(_T("table LaserRecoder_%s already exists"), __tCurrent.Format(_T("%Y")));
if (ss == (CStringA)strSQL) return true;
sqlite3_close(m_sqlite3db);
m_sqlite3db = NULL;
return FALSE;
}
return TRUE;
}
BOOL CSqlite3Ex::IsExistSN(CString SN)
{
if (m_sqlite3db == NULL) return FALSE;
char* errmsg;
CString strSQL;
CTime __tCurrent = CTime::GetCurrentTime();
strSQL.Format(_T("select count(*) from LaserRecoder_%s where MarkSN='%s'"), __tCurrent.Format(_T("%Y")),SN.GetBuffer());
int nResult = sqlite3_exec(m_sqlite3db, (CStringA)strSQL, Sqlite3_Callback, NULL, &errmsg);
if (nResult != SQLITE_OK)
{
return FALSE;
}
if (g_strSQLResult == "0") return FALSE;
else return TRUE;
}
BOOL CSqlite3Ex::Insert_SN_Sqlite3(CString SN, BOOL bMark)
{
if (m_sqlite3db == NULL) return FALSE;
char* errmsg;
CString strSQL = _T("");
CTime __tCurrent = CTime::GetCurrentTime();
if (!bMark) strSQL.Format(_T("insert into LaserRecoder_%s(MarkSN) values ('%s')"), __tCurrent.Format(_T("%Y")), SN.GetBuffer());
else strSQL.Format(_T("update LaserRecoder_%s set ScannerSN='%s', ScannerTime=datetime('now','localtime') where MarkSN='%s'"), __tCurrent.Format(_T("%Y")), SN.GetBuffer(), SN.GetBuffer());
int nResult = sqlite3_exec(m_sqlite3db, (CStringA)strSQL, NULL, NULL, &errmsg);
if (nResult != SQLITE_OK)
{
return FALSE;
}
return TRUE;
}
static int Sqlite3_Callback(void *NotUsed, int argc, char **argv, char **azColName)
{
CStringA str;
g_strSQLResult= "";
for (int i = 0; i < argc; i++)
{
str = azColName[i];
if (str.MakeUpper() == "COUNT(*)")
{
g_strSQLResult = argv[i] ? argv[i] : "-1";
break;
}
}
return 0;
}