Files
yasuhirokimura-db18/examples/sql/wce_sql/excxx_wce_sqlDlg.cpp
T
Yasuhiro KIMURA 923a4cd4e6 Update to 18.1.32
2020-07-24 00:46:17 +09:00

174 lines
4.4 KiB
C++

/*-
* Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
*
* See the file EXAMPLES-LICENSE for license information.
*
*/
// excxx_wce_sqlDlg.cpp : implementation file
//
#include "stdafx.h"
#include "excxx_wce_sql.h"
#include "excxx_wce_sqlDlg.h"
#include "sqlite3.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// Cexcxx_wce_sqlDlg dialog
Cexcxx_wce_sqlDlg::Cexcxx_wce_sqlDlg(CWnd* pParent /*=NULL*/)
: CDialog(Cexcxx_wce_sqlDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void Cexcxx_wce_sqlDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(Cexcxx_wce_sqlDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
ON_WM_SIZE()
#endif
//}}AFX_MSG_MAP
ON_STN_CLICKED(IDC_STATIC_1, &Cexcxx_wce_sqlDlg::OnStnClickedStatic1)
ON_BN_CLICKED(IDC_BUTTON1, &Cexcxx_wce_sqlDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &Cexcxx_wce_sqlDlg::OnBnClickedButton2)
END_MESSAGE_MAP()
// Cexcxx_wce_sqlDlg message handlers
BOOL Cexcxx_wce_sqlDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
void Cexcxx_wce_sqlDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
{
if (AfxIsDRAEnabled())
{
DRA::RelayoutDialog(
AfxGetResourceHandle(),
this->m_hWnd,
DRA::GetDisplayMode() != DRA::Portrait ?
MAKEINTRESOURCE(IDD_SIMPLEPROJECT_DIALOG_WIDE) :
MAKEINTRESOURCE(IDD_SIMPLEPROJECT_DIALOG));
}
}
#endif
void Cexcxx_wce_sqlDlg::OnStnClickedStatic1()
{
// TODO: Add your control notification handler code here
}
void Cexcxx_wce_sqlDlg::OnBnClickedButton1()
{
wchar_t msg[512];
sqlite3 *db;
int rc;
rc = sqlite3_open("\\My Documents\\test.db", &db);
if( rc ){
StringCbPrintfW(msg, 512,
_T("Can't open database: %hs\r\n"), sqlite3_errmsg(db));
SetDlgItemText(IDC_TEXT_OUT, msg);
} else
SetDlgItemText(IDC_TEXT_OUT, _T("Opened the database.\r\n"));
sqlite3_close(db);
}
int printer(void *dlg, int argc, char **argv, char**azColName) {
int i, offset;
wchar_t msg[512];
memset(msg, 0, 512);
Cexcxx_wce_sqlDlg *dialog = (Cexcxx_wce_sqlDlg *)dlg;
for (i = 0; i < argc; i++) {
dialog->GetDlgItemText(IDC_TEXT_OUT, msg, 512);
offset = wcslen(msg);
StringCbPrintfW(msg + offset, 512 - offset,
_T("%hs%hs = %hs%hs"), i == 0 ? "" : ", ", azColName[i],
argv[i] ? argv[i] : "NULL", (i + 1 == argc) ? "\r\n" : "");
dialog->SetDlgItemText(IDC_TEXT_OUT, msg);
}
return (0);
}
void Cexcxx_wce_sqlDlg::OnBnClickedButton2()
{
wchar_t value[512];
char sql[512], *errors;
GetDlgItemText(IDC_EDIT2, value, 512);
if (value[0] == 0) {
SetDlgItemText(IDC_TEXT_OUT,
_T("You must set a value in the text field.\r\n"));
return;
}
wchar_t msg[512];
sqlite3 *db;
int rc;
rc = sqlite3_open("\\My Documents\\test.db", &db);
if (rc) {
StringCbPrintfW(msg, 512,
_T("Can't open database: %s\n"), sqlite3_errmsg(db));
SetDlgItemText(IDC_TEXT_OUT, msg);
return;
}
rc = sqlite3_exec(db,
"CREATE TABLE t1(x INTEGER PRIMARY KEY AUTOINCREMENT, y UNIQUE);",
NULL, NULL, &errors);
if (rc && strcmp(errors, "table t1 already exists") != 0) {
StringCbPrintfW(msg, 512,
_T("sqlite3_exec create failed: %hs\r\n"), errors);
SetDlgItemText(IDC_TEXT_OUT, msg);
sqlite3_free(errors);
goto err;
}
_snprintf(sql, 512, "%s%S%s",
"INSERT OR REPLACE INTO t1(y) VALUES (\"", value, "\");");
rc = sqlite3_exec(db, sql, NULL, NULL, &errors);
if (rc) {
StringCbPrintfW(msg, 512,
_T("sqlite3_exec insert failed: %hs\r\n"), errors);
SetDlgItemText(IDC_TEXT_OUT, msg);
sqlite3_free(errors);
goto err;
}
SetDlgItemText(IDC_TEXT_OUT, _T(""));
rc = sqlite3_exec(db, "SELECT * FROM t1;", printer, this, &errors);
if (rc) {
StringCbPrintfW(msg, 512,
_T("sqlite3_exec select failed: %hs\r\n"), errors);
SetDlgItemText(IDC_TEXT_OUT, msg);
sqlite3_free(errors);
goto err;
} else {
GetDlgItemText(IDC_TEXT_OUT, msg, 512);
StringCbPrintfW(msg + wcslen(msg), 512 - wcslen(msg),
_T("Insert completed\r\n"));
SetDlgItemText(IDC_TEXT_OUT, msg);
}
err: sqlite3_close(db);
}