⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bdetestdlg.cpp

📁 在Visual C++访问Borland数据库引擎(BDE)
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// BdeTestDlg.cpp : implementation file
//

#include "stdafx.h"
#include "BdeTest.h"
#include "BdeTestDlg.h"

#include "BdeDatabase.h"
#include "BdeException.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CBdeTestDlg dialog

CBdeTestDlg::CBdeTestDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CBdeTestDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CBdeTestDlg)
	m_strBcd = _T("");
	m_strChar = _T("");
	m_strCurrency = _T("");
	m_strDate = _T("");
	m_strFloat = _T("");
	m_strLogical = _T("");
	m_strLong = _T("");
	m_strMemo = _T("");
	m_strShort = _T("");
	m_strTime = _T("");
	m_strTimeStamp = _T("");
	m_bLogical = FALSE;
	m_fBcd = 0.0;
	m_fCurrency = 0.0;
	m_dtDate = COleDateTime::GetCurrentTime();
	m_fFloat = 0.0;
	m_lLong = 0;
	m_nShort = 0;
	m_dtTime = COleDateTime::GetCurrentTime();
	m_dtTimeStamp = COleDateTime::GetCurrentTime();
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_pBdeDb = NULL;
	m_bParadox = TRUE;

}

void CBdeTestDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CBdeTestDlg)
	DDX_Text(pDX, ET_BCD, m_strBcd);
	DDX_Text(pDX, ET_CHAR, m_strChar);
	DDX_Text(pDX, ET_CURRENCY, m_strCurrency);
	DDX_Text(pDX, ET_DATE, m_strDate);
	DDX_Text(pDX, ET_FLOAT, m_strFloat);
	DDX_Text(pDX, ET_LOGICAL, m_strLogical);
	DDX_Text(pDX, ET_LONG, m_strLong);
	DDX_Text(pDX, ET_MEMO, m_strMemo);
	DDX_Text(pDX, ET_SHORT, m_strShort);
	DDX_Text(pDX, ET_TIME, m_strTime);
	DDX_Text(pDX, ET_TIMESTAMP, m_strTimeStamp);
	DDX_Check(pDX, CB_LOGICAL_TYPE, m_bLogical);
	DDX_Text(pDX, ET_BCD_TYPE, m_fBcd);
	DDX_Text(pDX, ET_CURRENCY_TYPE, m_fCurrency);
	DDX_Text(pDX, ET_DATE_TYPE, m_dtDate);
	DDX_Text(pDX, ET_FLOAT_TYPE, m_fFloat);
	DDX_Text(pDX, ET_LONG_TYPE, m_lLong);
	DDX_Text(pDX, ET_SHORT_TYPE, m_nShort);
	DDX_Text(pDX, ET_TIME_TYPE, m_dtTime);
	DDX_Text(pDX, ET_TIMESTAMP_TYPE, m_dtTimeStamp);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CBdeTestDlg, CDialog)
	//{{AFX_MSG_MAP(CBdeTestDlg)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDB_TEST_CONNECTION, OnTestConnection)
	ON_BN_CLICKED(IDB_EDIT, OnEdit)
	ON_BN_CLICKED(IDB_APPEND, OnAppend)
	ON_BN_CLICKED(IDB_CONNECT, OnConnect)
	ON_BN_CLICKED(IDB_DISCONNECT, OnDisconnect)
	ON_BN_CLICKED(IDB_FIRST, OnFirst)
	ON_BN_CLICKED(IDB_PRIOR, OnPrior)
	ON_BN_CLICKED(IDB_NEXT, OnNext)
	ON_BN_CLICKED(IDB_LAST, OnLast)
	ON_BN_CLICKED(IDB_DELETE, OnDelete)
	ON_BN_CLICKED(IDB_INSERT, OnInsert)
	ON_BN_CLICKED(IDB_POST, OnPost)
	ON_BN_CLICKED(IDB_CANCEL_EDIT, OnCancelEdit)
	ON_BN_CLICKED(IDB_SET_BLANK, OnSetBlank)
	ON_BN_CLICKED(IDB_SET_TYPE_VALUES, OnSetTypeValues)
	ON_BN_CLICKED(IDB_CONNECT_DBASE, OnConnectDbase)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CBdeTestDlg message handlers

BOOL CBdeTestDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// get the directory in which the application is running
	char drive[_MAX_DRIVE];
  char dir[_MAX_DIR];
  char fname[_MAX_FNAME];
  char ext[_MAX_EXT];
	const char *path = _pgmptr ;
  _splitpath(path, drive, dir, fname, ext );

	// get the Application path for the 
	m_strAppPath.Format("%s%s", drive, dir);




	// 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
	
	m_pBdeDb = new CBdeDatabase();

	EnableControls();

	return TRUE;  // return TRUE  unless you set the focus to a control
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CBdeTestDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CBdeTestDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}


void CBdeTestDlg::OnCancel() 
{
	m_pBdeDb->CloseDatabase();
	m_pBdeDb->Uninitialize();

	delete m_pBdeDb;	
	
	CDialog::OnCancel();
}



void CBdeTestDlg::OnTestConnection() 
{
	try
	{
		if (m_pBdeDb->OpenDatabase(m_strAppPath + "Test.DB"))
			AfxMessageBox("Opened Database");
	}
	catch (CBdeException* e)
	{
		e->ReportError();
		e->Delete();	
		return;	
	}

	try
	{

		TRACE("%s\n", m_pBdeDb->GetFieldName(1));
		TRACE("%s\n", m_pBdeDb->GetFieldName(2));
		TRACE("%s\n", m_pBdeDb->GetFieldName(3));
		TRACE("%s\n", m_pBdeDb->GetFieldName(4));
		TRACE("%s\n", m_pBdeDb->GetFieldName(5));
		TRACE("%s\n", m_pBdeDb->GetFieldName(6));
		TRACE("%s\n", m_pBdeDb->GetFieldName(7));
		TRACE("%s\n", m_pBdeDb->GetFieldName(8));
		TRACE("%s\n", m_pBdeDb->GetFieldName(9));
		TRACE("%s\n", m_pBdeDb->GetFieldName(10));
		TRACE("%s\n", m_pBdeDb->GetFieldName(11));
		TRACE("%s\n", m_pBdeDb->GetFieldName(12));

		TRACE("\nField numbers\n");
		TRACE("%d\n", m_pBdeDb->FieldNumberFromName("Char"));
		TRACE("%d\n", m_pBdeDb->FieldNumberFromName("Float"));
		TRACE("%d\n", m_pBdeDb->FieldNumberFromName("Long"));
		TRACE("%d\n", m_pBdeDb->FieldNumberFromName("Short"));
		TRACE("%d\n", m_pBdeDb->FieldNumberFromName("Currency"));
		TRACE("%d\n", m_pBdeDb->FieldNumberFromName("Logical"));
		TRACE("%d\n", m_pBdeDb->FieldNumberFromName("Date"));
		TRACE("%d\n", m_pBdeDb->FieldNumberFromName("Time"));
		TRACE("%d\n", m_pBdeDb->FieldNumberFromName("TimeStamp"));
		TRACE("%d\n", m_pBdeDb->FieldNumberFromName("Memo"));
		TRACE("%d\n", m_pBdeDb->FieldNumberFromName("Formatted Memo"));
		TRACE("%d\n", m_pBdeDb->FieldNumberFromName("Graphic Blob"));

		
		BOOL bIsBlank;

		m_pBdeDb->MoveFirst();
		m_pBdeDb->MoveNext();
		while (m_pBdeDb->IsEOF() == FALSE)
		{
			TRACE("Char      %s\n", m_pBdeDb->GetFieldAsString(1, &bIsBlank));
			TRACE("Short     %g\n", m_pBdeDb->GetFieldAsFloat(2, &bIsBlank));
			TRACE("Long      %g\n", m_pBdeDb->GetFieldAsFloat(3, &bIsBlank));
			TRACE("Float     %g\n", m_pBdeDb->GetFieldAsFloat(4, &bIsBlank));
			TRACE("Currency  %g\n", m_pBdeDb->GetFieldAsFloat(5, &bIsBlank));
			TRACE("Logical   %s\n", m_pBdeDb->GetFieldAsString(6, &bIsBlank));
			TRACE("Date      %s\n", m_pBdeDb->GetFieldAsString(7, &bIsBlank));
			TRACE("Time      %s\n", m_pBdeDb->GetFieldAsString(8, &bIsBlank));
			TRACE("TimeStamp %s\n", m_pBdeDb->GetFieldAsString(9, &bIsBlank));
			TRACE("Memo      %s\n", m_pBdeDb->GetFieldAsString(10, &bIsBlank));
//			TRACE("FormMemo  %s\n", m_pBdeDb->GetFieldAsString(11, &bIsBlank));
//			TRACE("Graphic   %s\n", m_pBdeDb->GetFieldAsString(12, &bIsBlank));
			TRACE("BCD   %s\n---\n", m_pBdeDb->GetFieldAsString(13, &bIsBlank));

			TRACE("  Date      %s\n", m_pBdeDb->GetFieldAsDate(7, &bIsBlank).Format("%m-%d-%Y"));
			TRACE("  Time      %s\n", m_pBdeDb->GetFieldAsDate(8, &bIsBlank).Format("%H:%M:%S"));
			TRACE("  TimeStamp %s\n\n", m_pBdeDb->GetFieldAsDate(9, &bIsBlank).Format("%m-%d-%Y  %H:%M:%S"));
					
			m_pBdeDb->MoveNext();
		}

	}
	catch (CBdeException* e)
	{
		e->ReportError();
		e->Delete();	
		return;	
	}
	
	if (m_pBdeDb->CloseDatabase())
		AfxMessageBox("Closed Database");
	EnableControls();
}


//////////////////////////////////////////////////////////////////////////////////////////
///

void CBdeTestDlg::UpdateDialogData(BOOL bSaveAndValidate)
{
	BOOL bIsBlank = FALSE;
	if (bSaveAndValidate)
	{
		UpdateData(TRUE);
		try
		{
			m_pBdeDb->SetFieldAsString(1, m_strChar);
			m_pBdeDb->SetFieldAsString(2, m_strShort);
			m_pBdeDb->SetFieldAsString(3, m_strLong);
			m_pBdeDb->SetFieldAsString(4, m_strFloat);
			m_pBdeDb->SetFieldAsString(5, m_strCurrency);
			m_pBdeDb->SetFieldAsString(6, m_strLogical);
			m_pBdeDb->SetFieldAsString(7, m_strDate);
			m_pBdeDb->SetFieldAsString(8, m_strTime);
			m_pBdeDb->SetFieldAsString(9, m_strTimeStamp);
			m_pBdeDb->SetFieldAsString(10, m_strMemo);
			m_pBdeDb->SetFieldAsString(13, m_strBcd);
			m_pBdeDb->Post();
		}
		catch (CBdeException* e)
		{
			e->ReportError();
			e->Delete();	
		}
	}
	else
	{
		try
		{
			if (m_pBdeDb->GetRecordCount() > 0)
			{
				if (m_pBdeDb->IsActive())
				{
					if (m_pBdeDb->GetEditMode() == FALSE)
					{
						m_strChar = m_pBdeDb->GetFieldAsString(1, &bIsBlank);
						m_strShort = m_pBdeDb->GetFieldAsString(2, &bIsBlank);
						m_strLong = m_pBdeDb->GetFieldAsString(3, &bIsBlank);
						m_strFloat = m_pBdeDb->GetFieldAsString(4, &bIsBlank);
						m_strCurrency = m_pBdeDb->GetFieldAsString(5, &bIsBlank);
						m_strLogical = m_pBdeDb->GetFieldAsString(6, &bIsBlank);
						m_strDate = m_pBdeDb->GetFieldAsString(7, &bIsBlank);
						m_strTime = m_pBdeDb->GetFieldAsString(8, &bIsBlank);
						m_strTimeStamp = m_pBdeDb->GetFieldAsString(9, &bIsBlank);
						if (m_bParadox) m_strMemo = m_pBdeDb->GetFieldAsString(10, &bIsBlank);
					//	m_strFormMemo = m_pBdeDb->GetFieldAsString(11, &bIsBlank);
					//	m_strGraphic = m_pBdeDb->GetFieldAsString(12, &bIsBlank);
						m_strBcd = m_pBdeDb->GetFieldAsString(13, &bIsBlank);

						m_nShort = m_pBdeDb->GetFieldAsInteger(2, &bIsBlank);
						m_lLong = m_pBdeDb->GetFieldAsInteger(3, &bIsBlank);
						m_fFloat = m_pBdeDb->GetFieldAsFloat(4, &bIsBlank);
						m_fCurrency = m_pBdeDb->GetFieldAsFloat(5, &bIsBlank);
						m_bLogical = m_pBdeDb->GetFieldAsBoolean(6, &bIsBlank);
						m_dtDate = m_pBdeDb->GetFieldAsDate(7, &bIsBlank);
						m_dtTime = m_pBdeDb->GetFieldAsDate(8, &bIsBlank);
						m_dtTimeStamp = m_pBdeDb->GetFieldAsDate(9, &bIsBlank);
						m_fBcd = m_pBdeDb->GetFieldAsFloat(13, &bIsBlank);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -