DB マスタメンテ

  HM040.cpp





  
#include "stdafx.h"
#include "resource.h"
#include "MyClass.h"
#include "MyDlg.h"

MyClass App;
MyDlg Dlg;

DEFINE_DLG(Dlg)

WINMAIN(App)

	App.MenuId = IDC_HM040;
	App.IconId = IDI_HM040;
	App.IconIdSmall = IDI_SMALL;

	INIT_DLG(Dlg)

	// DTPicker 使用の為の初期化
	INITCOMMONCONTROLSEX IC;
	IC.dwSize = sizeof( INITCOMMONCONTROLSEX );
	IC.dwICC = ICC_DATE_CLASSES;
	InitCommonControlsEx( &IC );

END_WINMAIN
  



  MyClass.cpp



  
#include "stdafx.h"
#include "resource.h"
#include "MyClass.h"
#include "MyDlg.h"

USE_OBJECT(MyDlg,Dlg)

//////////////////////////////////////////////////////////////////////
// 構築/消滅
//////////////////////////////////////////////////////////////////////

MyClass::MyClass()
{

}

MyClass::~MyClass()
{

}

void MyClass::WMCreate()
{
	Dlg.Open( this, IDD_DIALOG1 );
	this->ReturnValue = -1;
}
  



  MyDlg.h

  
#include "CLClass.h"
#include <LboxDatabase.h>

class MyDlg : public CLDlg  
{
public:
	void UpdateData();
	void CancelData();
	void CheckData();
	void ProcOperator();
	void ProcEnd();
	void WMInitdialog();
	MyDlg();
	virtual ~MyDlg();

	LboxDatabase CurDb;	// データベースオブジェクト(実体型)
	LboxDTPicker CreateDate;	// DTPicker(実体型)
	LboxCombobox *Type;
	LboxCombobox *Syozoku;

  



  WMInitdialog

  
// *********************************************************
// ダイアログ初期化イベント
// *********************************************************
void MyDlg::WMInitdialog()
{
	this->CenterWindow();

	// ダイアログのプロパティでシステムメニューのチェックボックスを外して下さい
	this->ChangeStyle( WS_MINIMIZEBOX | WS_SYSMENU, 0 );
	this->ChangeExStyle( WS_EX_APPWINDOW, 0 );
	this->ChangeIcon( IDI_HM040 );
	this->StatusCreate( 0 );

	LboxString Buff;

	// MySQL 接続文字列
	Buff.operator = ("MySQL,lightbox,root,");
	CurDb.SetConnectString( 3, &Buff );

	// 処理区分(コンボボックス)
	Type = new LboxCombobox( this->GetHandle( IDC_TYPE ) );
	Type->Add( "1", "登録" );
	Type->Add( "2", "修正" );
	Type->Add( "3", "削除" );
	Type->Select( 0 );

	// 社員コード
	this->EditLimitText( IDC_KEY, 4 );
	this->EditNumberonly( IDC_KEY, true );

	// 氏名
	this->EditLimitText( IDC_NAME, 50 );

	// 所属(コンボボックス)
	Syozoku = new LboxCombobox( this->GetHandle( IDC_SYOZOKU ) );

	// 作成日(日時指定コントロール)
	CreateDate.hWnd = this->GetHandle( IDC_CREATEDATE );

	// 所属コンボボックスに所属データをロード
	LboxString Query(100);
	if ( CurDb.Connect() ) {
		Query.operator = ("select コード,名称 from コード名称マスタ");
		Query.operator += (" where 区分 = 2");
		Query.operator += (" order by コード");
		CurDb.LoadSqlData( Syozoku, &Query );
		CurDb.DisConnect();
	}
	else {
		MsgOk("データベースの接続に失敗しました");
		this->EndFlg = true;	// プログラム終了
		return;
	}

	// プログラムID(プロジェクト名)
	LboxString LWork(100);
	LoadString(
		this->Instance(),
		IDC_HM040,
		LWork.szLboxString,
		100
	);
	this->EditSetText( IDC_PROGID, &LWork );
	this->EditFocus( IDC_KEY );

}
  



  ProcEnd

  
// *********************************************************
// ダイアログ終了処理
// *********************************************************
void MyDlg::ProcEnd()
{
	delete Syozoku;
	delete Type;
}
  



  ProcOperator

  
// *********************************************************
// オペレータイベント
// *********************************************************
void MyDlg::ProcOperator()
{
	switch( ControlId ) {
		case IDC_CHECK:
			CheckData();
			break;
		case IDC_CANCEL:
			CancelData();
			break;
		case IDC_UPDATE:
			UpdateData();
			break;
	}
}
  



  CheckData

MsgErr はマクロです (CLClass.h にあります)

  
// *********************************************************
// HEAD 部チェック
// 1) HEAD 部チェック
// 2) BODY 部の画面編集
// 3) BODY 部への画面遷移
// *********************************************************
void MyDlg::CheckData()
{
	LboxString LWork;

	// 社員コードの未入力チェック
	this->EditGetText( IDC_KEY, &LWork );
	LWork.Trim( "  " );
	if ( LWork.operator == ( "" ) ) {
		MsgErr( IDC_KEY , "社員コードを入力して下さい" );
		return;
	}

	// データベース接続
	if ( !CurDb.Connect() ) {
		MsgOk("接続に失敗しました \n%s", CurDb.ErrMessage.szLboxString);
		return;
	}

	// データ読み出し
	LboxString Query;
	BOOL bRet;

	Query.operator = ("select * from 社員マスタ");
	Query.operator += (" where 社員コード = '");
	Query.operator += (&LWork);
	Query.operator += ("'");

	bRet = CurDb.Query( &Query );
	if ( bRet ) {
		// 氏名
		CurDb.GetText( "氏名", &LWork );
		this->EditSetText( IDC_NAME, &LWork );
		// 所属
		CurDb.GetText( "所属", &LWork );
		Syozoku->Select( Syozoku->FindData( &LWork ) );
		// 作成日
		CurDb.GetText( "作成日", &LWork );
		CreateDate.SetDateString( &LWork, "/" );
	}

	// データベース接続解除
	CurDb.DisConnect();	

	// 処理区分別の画面編集
	LboxString LType;
	Type->SelectedGetData( <ype );
	int nType;
	nType = LType.Atoi();
	switch( nType ) {
	// 登録
	case 1:
		if ( bRet ) {
			MsgErr( IDC_KEY ,"既に存在します" );
			return;
		}
		this->Disable( IDC_TYPE );
		this->Disable( IDC_KEY );
		this->Disable( IDC_CHECK );
		this->Enable( IDC_NAME );
		this->Syozoku->Enable();
		this->Syozoku->Select( 0 );
		this->Enable( IDC_CANCEL );
		this->Enable( IDC_UPDATE );
		this->EditFocus( IDC_NAME );
		break;
	// 修正
	case 2:
		if ( !bRet ) {
			MsgErr( IDC_KEY ,"該当する社員コードは存在しません" );
			return;
		}
		this->Disable( IDC_TYPE );
		this->Disable( IDC_KEY );
		this->Disable( IDC_CHECK );
		this->Enable( IDC_NAME );
		this->Syozoku->Enable();
		this->CreateDate.Enable();
		this->Enable( IDC_CANCEL );
		this->Enable( IDC_UPDATE );
		this->EditFocus( IDC_NAME );
		break;
	// 削除
	case 3:
		if ( !bRet ) {
			MsgErr( IDC_KEY ,"該当する社員コードは存在しません" );
			return;
		}
		this->Disable( IDC_TYPE );
		this->Disable( IDC_KEY );
		this->Disable( IDC_CHECK );
		this->Enable( IDC_CANCEL );
		this->Enable( IDC_UPDATE );
		this->EditFocus( IDC_CANCEL );
		break;
	}

}
  



  CancelData

  
// *********************************************************
// キャンセル
// *********************************************************
void MyDlg::CancelData()
{
	this->Enable( IDC_TYPE );
	this->Enable( IDC_KEY );
	this->Enable( IDC_CHECK );
	this->EditSetText( IDC_NAME, "" );
	this->Disable( IDC_NAME );
	this->Syozoku->Select( -1 );
	this->Syozoku->Disable();
	LboxString LWork;
	this->Date( &LWork );
	this->CreateDate.SetDateString( &LWork, "/" );
	this->CreateDate.Disable();
	this->Disable( IDC_CANCEL );
	this->Disable( IDC_UPDATE );
	this->EditFocus( IDC_KEY );

}
  



  UpdateData

  
// *********************************************************
// 更新
// 1) 更新前のチェック
// 2) 更新
// 3) 更新後の画面編集
// 4) 更新後の画面遷移
// *********************************************************
void MyDlg::UpdateData()
{
	// 更新確認
	if ( !MsgOkCancel( "更新してよろしいですか?   " ) ) {
		return;
	}

	// データベース接続
	if ( !CurDb.Connect() ) {
		MsgOk("接続に失敗しました \n%s", CurDb.ErrMessage.szLboxString);
		return;
	}

	// 処理区分別の更新処理
	LboxString Query;
	LboxString LWork;
	LboxString LType;
	Type->SelectedGetData( &LType );
	int nType;
	nType = LType.Atoi();
	switch( nType ) {
	// 登録
	case 1:
		Query.operator = ("insert into 社員マスタ");
		Query.operator += (" (社員コード,氏名,所属,作成日,更新日)");
		Query.operator += (" values(");
		this->EditGetText( IDC_KEY, &LWork );
		LWork.Enclose( "'" );
		Query.operator += (&LWork);
		this->EditGetText( IDC_NAME, &LWork );
		LWork.Enclose( "'" );
		Query.operator += (",");
		Query.operator += (&LWork);
		this->Syozoku->SelectedGetData( &LWork );
		LWork.Enclose( "'" );
		Query.operator += (",");
		Query.operator += (&LWork);
		Query.operator += (",CURDATE(),CURDATE())");
		if ( !CurDb.Query( &Query ) ) {
			MsgOk("%s", CurDb.ErrMessage.szLboxString);
			CurDb.DisConnect();	
			return;
		}
		break;
	// 修正
	case 2:
		Query.operator = ("update 社員マスタ");
		Query.operator += (" set 氏名 = ");
		this->EditGetText( IDC_NAME, &LWork );
		LWork.Enclose( "'" );
		Query.operator += (&LWork);
		Query.operator += (",所属 = ");
		this->Syozoku->SelectedGetData( &LWork );
		LWork.Enclose( "'" );
		Query.operator += (&LWork);
		Query.operator += (",作成日 = ");
		this->CreateDate.GetDateString( &LWork );
		LWork.Enclose( "'" );
		Query.operator += (&LWork);
		Query.operator += (",更新日 = CURDATE()");
		Query.operator += (" where 社員コード = ");
		this->EditGetText( IDC_KEY, &LWork );
		LWork.Enclose( "'" );
		Query.operator += (&LWork);
		if ( !CurDb.Query( &Query ) ) {
			MsgOk("%s", CurDb.ErrMessage.szLboxString);
			CurDb.DisConnect();	
			return;
		}
		break;
	// 削除
	case 3:
		Query.operator = ("delete from 社員マスタ");
		Query.operator += (" where 社員コード = ");
		this->EditGetText( IDC_KEY, &LWork );
		LWork.Enclose( "'" );
		Query.operator += (&LWork);
		if ( !CurDb.Query( &Query ) ) {
			MsgOk("%s", CurDb.ErrMessage.szLboxString);
			CurDb.DisConnect();	
			return;
		}
		break;
	}

	// データベース接続解除
	CurDb.DisConnect();	

	// 画面編集
	this->StatusSetText( "正常に更新されました" );
	this->EditSetText( IDC_KEY, "" );

	// 画面遷移
	this->CancelData();
}
  



  EN_KILLFOCUS

社員コードからフォーカスが失われた時に、ステータスバーをクリアして先行ゼロ編集を行います

  
// *********************************************************
// オペレータイベント
// *********************************************************
void MyDlg::ProcOperator()
{
	switch( ControlId ) {
		case IDC_CHECK:
			CheckData();
			break;
		case IDC_CANCEL:
			CancelData();
			break;
		case IDC_UPDATE:
			UpdateData();
			break;

		case IDC_KEY:
			if ( this->NotifyCode == EN_KILLFOCUS ) {
				this->StatusSetText( "" );
				LboxString LWork;
				this->EditGetText( IDC_KEY, &LWork );
				if ( LWork.operator != ("") ) {
					this->EditPrintf(
						IDC_KEY,
						"%04s",
						LWork.szLboxString
					);
				}
			}
			break;
	}
}
  



  Enter To Tab

MyDlg クラスにツールオブジェクトを追加し、WMAll をオーバーロード

  
class MyDlg : public CLDlg  
{
public:
	void WMAll();
	void UpdateData();
	void CancelData();
	void CheckData();
	void ProcOperator();
	void ProcEnd();
	void WMInitdialog();
	MyDlg();
	virtual ~MyDlg();

	LboxDatabase CurDb;	// データベースオブジェクト(実体型)
	LboxDTPicker CreateDate;
	LboxCombobox *Type;
	LboxCombobox *Syozoku;
	LboxTool Tool;

};
  

  
// *********************************************************
// イベント処理
// *********************************************************
void MyDlg::WMAll()
{
	switch( message ) {
	case LBOX_RETURN:
		// Enter キーをタブ扱いしないコントロール
		if ( this->GetHandle( IDC_CHECK ) == (HWND)this->wParam ) {
			break;
		}
		if ( this->GetHandle( IDC_CANCEL ) == (HWND)this->wParam ) {
			break;
		}
		if ( this->GetHandle( IDC_UPDATE ) == (HWND)this->wParam ) {
			break;
		}
		this->Tool.TabKey();
		break;
	}
}
  



  ESC で終了しない

WMInitdialog で以下の記述を行なう

  
this->bEscCancel = true;
  



  メニューからプログラム終了

  
// *********************************************************
// オペレータイベント
// *********************************************************
void MyDlg::ProcOperator()
{
	switch( ControlId ) {
		case IDC_CHECK:
			CheckData();
			break;
		case IDC_CANCEL:
			CancelData();
			break;
		case IDC_UPDATE:
			UpdateData();
			break;

		case IDM_EXIT:
			this->PostCommand( IDCANCEL );
			break;

		case IDC_KEY:
			if ( this->NotifyCode == EN_KILLFOCUS ) {
				this->StatusSetText( "" );
				LboxString LWork;
				this->EditGetText( IDC_KEY, &LWork );
				if ( LWork.operator != ("") ) {
					this->EditPrintf(
						IDC_KEY,
						"%04s",
						LWork.szLboxString
					);
				}
			}
			break;
	}
}
  



  メニューから問合せ

MyDlg.cpp
  
#include "stdafx.h"
#include "resource.h"
#include "MyDlg2.h"
#include "MyDlg.h"

USE_OBJECT(MyDlg2,Dlg2)
  

  
// *********************************************************
// オペレータイベント
// *********************************************************
void MyDlg::ProcOperator()
{
	switch( ControlId ) {
		case IDC_CHECK:
			CheckData();
			break;
		case IDC_CANCEL:
			CancelData();
			break;
		case IDC_UPDATE:
			UpdateData();
			break;

		case IDM_EXIT:
			this->PostCommand( IDCANCEL );
			break;

		case IDC_KEY:
			if ( this->NotifyCode == EN_KILLFOCUS ) {
				this->StatusSetText( "" );
				LboxString LWork;
				this->EditGetText( IDC_KEY, &LWork );
				if ( LWork.operator != ("") ) {
					this->EditPrintf(
						IDC_KEY,
						"%04s",
						LWork.szLboxString
					);
				}
			}
			break;

		case IDM_REF:
			Dlg2.Open( this, IDD_DIALOG2 );
			break;

	}
}
  

MyDlg2.h
  
#include "CLClass.h"
#include <LboxDatabase.h>

class MyDlg2 : public CLDlg
{
public:
	void LVDblclick();
	void WMAll();
	void GetData();
	void ProcOperator();
	void ProcEnd();
	void WMInitdialog();
	MyDlg2();
	virtual ~MyDlg2();

	LboxDatabase CurDb;	// データベースオブジェクト(実体型)
	LboxListview *LView;
};
  

MyDlg2.cpp
  
#include "stdafx.h"
#include "resource.h"
#include "MyDlg2.h"
#include "MyDlg.h"

USE_OBJECT(MyDlg,Dlg)

//////////////////////////////////////////////////////////////////////
// 構築/消滅
//////////////////////////////////////////////////////////////////////

MyDlg2::MyDlg2()
{

}

MyDlg2::~MyDlg2()
{

}

// *********************************************************
// ダイアログ初期化イベント
// *********************************************************
void MyDlg2::WMInitdialog()
{
	this->CenterWindow();

	// ダイアログのプロパティでシステムメニューのチェックボックスを外して下さい
	this->ChangeStyle( WS_MINIMIZEBOX | WS_SYSMENU, 0 );
	this->ChangeExStyle( WS_EX_APPWINDOW, 0 );
	this->ChangeIcon( IDI_HM040 );
	this->StatusCreate( 0 );

	LboxString Buff;

	// MySQL 接続文字列
	Buff.operator = ("MySQL,lightbox,root,");
	CurDb.SetConnectString( 3, &Buff );

	// リストビューインスタンス作成
	LView = new LboxListview( ::GetDlgItem( hDlg, IDC_LIST1 ), 0 );
	LView->Grid();

	GetData();

	this->MoveWindow( 0, 0 );
}

// *********************************************************
// ダイアログ終了処理
// *********************************************************
void MyDlg2::ProcEnd()
{
	delete LView;
}

// *********************************************************
// オペレータイベント
// *********************************************************
void MyDlg2::ProcOperator()
{
	switch( ControlId ) {
		case IDOK:
			GetData();
			break;
	}
}

// *********************************************************
// 問合せ処理
// *********************************************************
void MyDlg2::GetData()
{
	if ( !CurDb.Connect() ) {
		MsgOk("接続に失敗しました \n%s", CurDb.ErrMessage.szLboxString);
		return;
	}

	LboxString Query;

	Query.operator = ("select * from 社員マスタ");

	LboxString Cond( "" );
	LboxString Buff;

	this->EditGetText( IDC_EDIT1, &Buff );
	Buff.Trim( "  " );
	if ( Buff.operator != ( ""  ) ) {
		if ( Cond.operator == ( "" ) ) {
			Cond.operator += (" where ");
		}
		else {
			Cond.operator += (" and ");
		}
		Cond.operator += (" 氏名 like ");
		Buff.Enclose( "%" );
		Buff.Enclose( "'" );
		Cond.operator += ( &Buff );
	}

	Query.operator += ( &Cond );

	int nRet;

	LView->Hide();
	this->StatusSetText( "" );
	nRet = CurDb.LoadSqlData( LView, 0, &Query );
	switch( nRet ) {
		case -1:
			this->StatusSetText( &(CurDb.ErrMessage) );
			break;
		case 0:
			this->StatusSetText( "対象データが存在しません" );
			break;
		default:
			this->StatusPrintf( "%d 件のデータが選択されました", nRet );
			break;
	}
	LView->Fit();
	LView->Show();

	CurDb.DisConnect();	
}

// *********************************************************
// 初期化とオペレータイベント以外の処理
// *********************************************************
void MyDlg2::WMAll()
{
	USE_LVIEW(LView)
}

// *********************************************************
// ダブルクリックイベント
// *********************************************************
void MyDlg2::LVDblclick()
{
	LboxString LWork;

	if ( LView->IsHandle( this->hTargetWindow ) ) {
		LView->GetColumnText( 0, &LWork );
		Dlg.EditSetText( IDC_KEY, &LWork );
		this->PostCommand( IDCANCEL );
		Dlg.Type->SelectedGetData( &LWork );
		if ( LWork.operator == ("1") ) {
			Dlg.Type->Select( 1 );
		}
		Dlg.PostCommand( IDC_CHECK );
	}

}
  

HM040.cpp
  
#include "stdafx.h"
#include "resource.h"
#include "MyClass.h"
#include "MyDlg.h"
#include "MyDlg2.h"

MyClass App;
MyDlg Dlg;
MyDlg2 Dlg2;

DEFINE_DLG(Dlg)
DEFINE_DLG(Dlg2)

WINMAIN(App)

	App.MenuId = IDC_HM040;
	App.IconId = IDI_HM040;
	App.IconIdSmall = IDI_SMALL;

	INIT_DLG(Dlg)
	INIT_DLG(Dlg2)

	// DTPicker 使用の為の初期化
	INITCOMMONCONTROLSEX IC;
	IC.dwSize = sizeof( INITCOMMONCONTROLSEX );
	IC.dwICC = ICC_DATE_CLASSES;
	InitCommonControlsEx( &IC );

END_WINMAIN
  



  メニューを使用不可にする

MyDlg.h
  
#include "CLClass.h"
#include <LboxDatabase.h>

class MyDlg : public CLDlg  
{
public:
	void WMAll();
	void UpdateData();
	void CancelData();
	void CheckData();
	void ProcOperator();
	void ProcEnd();
	void WMInitdialog();
	MyDlg();
	virtual ~MyDlg();

	LboxDatabase CurDb;	// データベースオブジェクト(実体型)
	LboxDTPicker CreateDate;
	LboxCombobox *Type;
	LboxCombobox *Syozoku;
	LboxTool Tool;
	LboxMenu Menu;

};
  

WMInitdialog() の最後で以下を実行
  
	Menu.SetBaseMenu( this->hDlg );
  

CheckData() の最後で以下を実行
  
	Menu.Disable( "", IDM_REF, true );
	this->DrawMenuBar();
  

CancelData() の最後で以下を実行
  
	Menu.Disable( "", IDM_REF, false );
	this->DrawMenuBar();
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ