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

📄 dyset.cpp

📁 一个VC写的关于数据库操作的实用例子。可供学习
💻 CPP
字号:
// DYSet.cpp : implementation file
//

#include "stdafx.h"
#include "flydragon.h"
#include "DYSet.h"

#include "Odbc.h"
#include "afxdb.h"

extern 	_chan gw_schan[MAX_NUM];
extern COdbc gw_odbc;
extern int checksql(CString *sql);
extern int gw_num;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDYSet dialog


CDYSet::CDYSet(CWnd* pParent /*=NULL*/)
	: CDialog(CDYSet::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDYSet)
	//}}AFX_DATA_INIT
	
}


void CDYSet::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDYSet)
	DDX_Control(pDX, IDC_CHECK1, m_sql);
	DDX_Control(pDX, IDC_SQL, m_sqltext);
	DDX_Control(pDX, IDC_EDIT, m_tiaojian);
	DDX_Control(pDX, IDC_INDEX, m_index);
	DDX_Control(pDX, IDC_PDA, m_pda);
	DDX_Control(pDX, IDC_FIELDLIST, m_Cfield);
	DDX_Control(pDX, IDC_TABLELIST, m_Ctablist);
	DDX_Control(pDX, IDC_TYPE, m_type);
	DDX_Control(pDX, IDC_DECLIST, m_Desc);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDYSet, CDialog)
	//{{AFX_MSG_MAP(CDYSet)
	ON_WM_CANCELMODE()
	ON_LBN_SELCHANGE(IDC_DECLIST, OnSelDec)
	ON_BN_CLICKED(IDC_BAOCUN, OnBaocun)
	ON_BN_CLICKED(IDC_QUXIAO, OnQuxiao)
	ON_LBN_DBLCLK(IDC_TABLELIST, OnDblclkTablelist)
	ON_LBN_DBLCLK(IDC_FIELDLIST, OnDbFieldlist)
	ON_LBN_SELCHANGE(IDC_TABLELIST, OnSelTablelist)
	ON_BN_CLICKED(IDC_CHECK1, OnCheck1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDYSet message handlers

BOOL CDYSet::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_nfront = 0;

	m_type.AddString("标准");
	m_type.AddString("最大值");
	m_type.AddString("最小值");
	m_type.AddString("非空值");
	m_type.SetCurSel(0);
	
	CStringArray table;
	gw_odbc.GetTable(&table,1);
	for(int j = 0;j<table.GetUpperBound()+1 ;j++)
		m_Ctablist.AddString(table.GetAt(j));


	//写入控件
	ReadTo();
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CDYSet::OnCancelMode() 
{
	CDialog::OnCancelMode();
	
	// TODO: Add your message handler code here
	
}

void CDYSet::OnSelDec() 
{
	// TODO: Add your control notification handler code here
	
	CString szText;
	
	
	m_Desc.GetText(m_Desc.GetCurSel(),szText);
	szText += "对应设置";
	SetDlgItemText(IDC_SHEZHI,szText);


	Save(m_nfront);
	Load(m_Desc.GetCurSel());
	m_nfront = m_Desc.GetCurSel();

	
}

void CDYSet::OnBaocun() 
{
	// TODO: Add your control notification handler code here
 
	CString sql;
	CString ext;
	CString ll;
	char buffer[300];
	
	CDatabase m_db;
	m_db.OpenEx(gw_odbc.m_DesDsn,0);
	Save(m_Desc.GetCurSel());
	for(int i = 0;i<gw_num;i++)
	{
		ext = " WHERE VName =";
		ext +="\"";
		ext +=gw_schan[i].name + "\"";
		ll.Empty();
		ll = "UPDATE Interfa SET ";
		if(gw_schan[i].sql == 0)
			gw_schan[i].text = "";
		sprintf(buffer,"PDA = %d,INDEX = %d,VTable = \'%s\',VField = \'%s\',Type = \'%s\',Qual = \'%s\',VSQL = %d,VText = \'%s\' ",
			gw_schan[i].pda,
			gw_schan[i].index,
			gw_schan[i].table,
			gw_schan[i].field,
			gw_schan[i].types,
			gw_schan[i].qual,
			gw_schan[i].sql,
			gw_schan[i].text);
			
		ll += buffer;
		ll += ext;
		m_db.ExecuteSQL(ll);
		
		
	}
	m_db.Close();
	CDialog::OnCancel();

}

void CDYSet::OnQuxiao() 
{
	// TODO: Add your control notification handler code here
	CDialog::OnCancel();
}

void CDYSet::OnDblclkTablelist() 
{
	// TODO: Add your control notification handler code here
	
}

void CDYSet::OnDbFieldlist() 
{
	// TODO: Add your control notification handler code here
	CString field;
	CString temp;
	CString left;
	CString right;

	int pos;

	GetDlgItemText(IDC_FIELDEDIT,field);
	m_Cfield.GetText(m_Cfield.GetCurSel(),temp);
	
	if(field.IsEmpty())
	{
		field+= temp; 
	}
	else
	{
		
		//temp+=",";
		if((pos=field.Find(temp)) == -1)
		{
			field+=",";
			field +=temp;
		}
		else
		{
			left = field.Left(pos-1);
			if(pos == 0)
				pos++;
			right = field.Right(field.GetLength()-(pos+temp.GetLength()));
			field.Empty();
			field +=left;
			field +=right;
		}
	}
	SetDlgItemText(IDC_FIELDEDIT,field);
}

void CDYSet::OnSelTablelist() 
{
	// TODO: Add your control notification handler code here
	CString table;
	CStringArray field;
	CString temp;

	 
	m_Ctablist.GetText(m_Ctablist.GetCurSel(),temp);
	SetDlgItemText(IDC_TABLEEDIT,temp);

	m_Ctablist.GetText(m_Ctablist.GetCurSel(),table);
	m_Cfield.ResetContent();
	SetDlgItemText(IDC_FIELDEDIT,"");
	if(table.CompareNoCase(gw_schan[m_Desc.GetCurSel()].table)==0)
		SetDlgItemText(IDC_FIELDEDIT,gw_schan[m_Desc.GetCurSel()].field);
	
	gw_odbc.GetColInfo(table,&field,1);
	for(int i=0;i<field.GetUpperBound()+1;i++)
		m_Cfield.AddString(field.GetAt(i));
	
}

int CDYSet::deal(char *data,int pos)
{
	char temp[1024];
	
	char *pp;
	
	char bak1[5] = ";";
	char bak2[5] = ",";

	char *point;
	int tok = 0;
	lstrcpy(temp,data);
	

	point = temp;
	pp = temp;

	while(temp != NULL)
	{
		pp = strchr(point,';');
		if(tok >8)
			break;
		*pp = '\0';
		
		switch(tok)
		{
		case 0:
			gw_schan[pos].name = point;
			break;
		case 1:
			gw_schan[pos].pda = atoi(point);
			break;
		case 2:
			gw_schan[pos].index = atoi(point);
			break;
		case 3:
			gw_schan[pos].table = point;
			break;
		case 4:
			gw_schan[pos].field = point;
			break;
		case 5:
			gw_schan[pos].types = point;
			break;
		case 6:
			gw_schan[pos].qual = point;
			break;
		case 7:
			gw_schan[pos].sql = atoi(point);
			break;
		case 8:
			gw_schan[pos].text = point;
			break;
		default:
			break;
		}


		point = pp+1;
		tok++;


	}
	gw_schan[pos].already = 0;
	return 0;
}

int CDYSet::ReadTo()
{
	char buffer[20];
	for(int i = 0;i<gw_num;i++)
	{
		m_Desc.AddString(itoa(i+1,buffer,10)+gw_schan[i].name);
	}
	m_Desc.SetCurSel(0);
	Load(0);
//	this->OnSelDec();
	
	return 0;
}

int CDYSet::SetDisEnable()
{
	m_Ctablist.EnableWindow(false);
	m_Cfield.EnableWindow(false);
	m_tiaojian.EnableWindow(false);
	m_type.EnableWindow(false);
	m_sqltext.EnableWindow(true);
	return 0;
}


int CDYSet::Load(int value)
{

	CString table;
	CString field;
	int pos;
	CString temp;
	CString left;
	CString text;
	CString tep;

	m_Ctablist.SetCurSel(-1);
	m_Cfield.ResetContent();


	if(gw_schan[value].pda == 1)
		m_pda.SetCheck(1);
	else
		m_pda.SetCheck(0);
	if(gw_schan[value].index == 1)
		m_index.SetCheck(1);
	else
		m_index.SetCheck(0);

	if((gw_schan[value].name.CompareNoCase("车牌号码")==0)  || (gw_schan[value].name.CompareNoCase("车牌颜色") == 0))
	{
		m_sql.SetCheck(0);
		m_sql.EnableWindow(false);
	}
	else
	{
		m_sql.EnableWindow(true);
	}
	if(gw_schan[value].sql == 1)
	{
		m_sql.SetCheck(1);
		SetDlgItemText (IDC_SQL, "");
		SetDisEnable();
		m_sqltext.GetWindowText(text);
		temp = gw_schan[value].text;
		while(!temp.IsEmpty())
		{
			pos = temp.Find(",");
			if(!text.IsEmpty())
				text += "\r\n";
			if(pos != -1)
			{
				left = temp.Left(pos);
				text += left;
				m_sqltext.SetWindowText(text);
				m_sqltext.LineScroll(m_sqltext.GetLineCount(),0);
				temp = temp.Right(temp.GetLength()-(pos+1));
			}
			else
			{
				text += temp;
				m_sqltext.SetWindowText(text);
				m_sqltext.LineScroll(m_sqltext.GetLineCount(),0);
				break;
			}
		}
		return 0;
	}
	else
		SetEnable();
	m_sql.SetCheck(0);
	m_Ctablist.SetCurSel(-1);
	m_Cfield.ResetContent();
	SetDlgItemText (IDC_EDIT, "");
	//将表,字段写入
	table = gw_schan[value].table;
	pos = m_Ctablist.FindStringExact(0,table);
	if(pos>=0)
	{
		m_Ctablist.SetCurSel(pos);
		this->OnSelTablelist();
	}
	
	SetDlgItemText(IDC_TABLEEDIT,table);

	
	field = gw_schan[value].field;
	SetDlgItemText(IDC_FIELDEDIT,field);

	if((pos =field.Find(","))!=-1)
		tep = field.Left(pos);
	else
		tep = field;
	m_Cfield.SelectString(0,tep);
	
		
	m_type.SelectString(0,gw_schan[value].types);


	//m_tiaojian.GetWindowText(text);
	m_tiaojian.SetWindowText(NULL);
	temp = gw_schan[value].qual;
	
	while(!temp.IsEmpty())
	{
		pos = temp.Find(",");
		if(!text.IsEmpty())
			text += "\r\n";
		if(pos != -1)
		{
			left = temp.Left(pos);
			text += left;
			m_tiaojian.SetWindowText(text);
			m_tiaojian.LineScroll(m_tiaojian.GetLineCount(),0);
			temp = temp.Right(temp.GetLength()-(pos+1));
		}
		else
		{
			text += temp;
			m_tiaojian.SetWindowText(text);
			m_tiaojian.LineScroll(m_tiaojian.GetLineCount(),0);
			break;
		}
	}

	return 0;
}

int CDYSet::Save(int value)
{
	CString table;
	CString field;
	CString temp;

	CString bak;
	char ll[100];

	bak.Empty();
	//memset(ll,0,sizeof(ll));
	ll[0] = '\0';
	if(m_pda.GetCheck() == 1)
			gw_schan[value].pda = 1;
	else	
		gw_schan[value].pda = 0;

	if(m_index.GetCheck() == 1)
		gw_schan[value].index = 1;
	else
		gw_schan[value].index = 0;

	//将表,字段写入
	if(m_sql.GetCheck() == 1)
	{
		gw_schan[value].sql = 1;
		for(int i = 0;i < m_sqltext.GetLineCount();i++)
		{
			m_sqltext.GetLine(i,ll,sizeof(ll));
			temp = ll;
			checksql(&temp);
			bak +=temp;
			bak +=",";
		}
		gw_schan[value].text =bak.Left(bak.GetLength()-1);
		m_sqltext.SetWindowText("");
		return 0;
	}
	else
	{
		gw_schan[value].sql = 0;
		GetDlgItemText(IDC_TABLEEDIT,table);
		gw_schan[value].table = table;
	
		GetDlgItemText(IDC_FIELDEDIT,field);
		gw_schan[value].field = field;
	
	
		
	CString type;
	m_type.GetLBText(m_type.GetCurSel(),type);
	gw_schan[value].types = type;
	
	bak.Empty();
	memset(ll,0,sizeof(ll));
	CString jjk;
	m_tiaojian.GetWindowText(bak);
	for(int j= 0;j < m_tiaojian.GetLineCount();j++)
	{
		
		m_tiaojian.GetLine(j,(LPTSTR)(LPCTSTR)jjk,jjk.GetLength());//strlen(ll));
	//	m_tiaojian.GetWindowText(jjk);
		//MessageBox(jjk);
		bak +=ll;
		bak +=",";
		
	}
	
	gw_schan[value].qual =bak.Left(bak.GetLength()-1);
	}
	return 0;
}

int CDYSet::SetEnable()
{
	m_Ctablist.EnableWindow(true);
	m_Cfield.EnableWindow(true);
	m_tiaojian.EnableWindow(true);
	m_type.EnableWindow(true);
	m_sqltext.EnableWindow(false);
	
	return 0;

}

void CDYSet::OnCheck1() 
{
	// TODO: Add your control notification handler code here
	if(m_sql.GetCheck() == 1)
		SetDisEnable();
	else
		SetEnable();
}

⌨️ 快捷键说明

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