防止 重复重建相同的表

向指定的www.xls文件中插入表,禁止插入相同的表的控制

CString CExcle2Dlg::GetSpecialPath()
{
	int nPos;
	CString strTempPath;
	
	GetModuleFileName(NULL,strTempPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
	strTempPath.ReleaseBuffer ();
    
	nPos=strTempPath.ReverseFind ('\\');
	strTempPath=strTempPath.Left (nPos);
	
	return (strTempPath + "\\DemoExcle.xls");
}

//使用CDatabase、CRecordset时,需要使用的头文件  
#include <odbcinst.h>  
#include <afxdb.h>  

// 递进初始化 CDatabase、CRecordset对象 以及初始化之后的相关操作  
// num 控制Table的名字
// 函数功能仅仅是创建新表 并向 新表中插入几条数据
void CExcle2Dlg::AddTableS(CString num)
{
	m_Driver  ="Microsoft Excel Driver (*.xls)";
	m_ExcelFile = GetSpecialPath();
	
	//1.通过连接数据源间接连接到驱动上
	//m_DSN.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s",m_Driver,m_ExcelFile);

	//2.直接连接到驱动上
	m_DSN.Format("DRIVER={%s};DNS='';FIRSTROWHASNAME=1;READONLY=FALSE;CREATE_DB\"%s\";DBQ=%s",
		m_Driver,m_ExcelFile,m_ExcelFile);
	
	m_Database = new CDatabase;
	BOOL bRetDatabase=m_Database->OpenEx(m_DSN, CDatabase::noOdbcDialog);
	
	if(!bRetDatabase)
		return;

	CString str;

	

	CStringArray arrSQL;
	str.Format("CREATE TABLE [GGGG%s] ([姓名] char(255), [年龄] char(255))",num);
	arrSQL.Add(str);str.Empty();
	str.Format("INSERT INTO [GGGG%s$A1:IV1] ([姓名], [年龄]) VALUES ('谢志敏', '26岁')",num);
	arrSQL.Add(str);str.Empty();
	str.Format("INSERT INTO [GGGG%s$A1:IV2] ([姓名], [年龄]) VALUES ('张海平', '24岁')",num);
	arrSQL.Add(str);str.Empty();
	str.Format("INSERT INTO [GGGG%s$A1:IV3] ([姓名], [年龄]) VALUES ('李志超', '26岁')",num);
	arrSQL.Add(str);str.Empty();
	str.Format("INSERT INTO [GGGG%s$A1:IV4] ([姓名], [年龄]) VALUES ('刘永健', '25岁')",num);
	arrSQL.Add(str);str.Empty();
	str.Format("INSERT INTO [GGGG%s$A1:IV5] ([姓名], [年龄]) VALUES ('等异形', '26岁')",num);
	arrSQL.Add(str);str.Empty();

	m_Recordset = new CRecordset(m_Database);
	BOOL bRetRecordset=FALSE;
	
	try 
	{
		str.Format("SELECT * FROM [GGGG%s$A1:IV65536]",num);
		bRetRecordset=m_Recordset->Open(CRecordset::forwardOnly,str, CRecordset::readOnly);
		delete m_Recordset;
		str.Empty();
		str.Format("Excle中已经有表%s",num);
		::MessageBox(0,str,"提示",0);
		str.Empty();

		delete m_Recordset;
		m_Recordset=NULL;
		return;
	}
	catch (...)
	{
		// m_Recordset->Open打不开此表,就会抛异常到这边,就可以安心的创建新表了
		for (int i=0;i<6;i++)
		{
			m_Database->ExecuteSQL(arrSQL.GetAt(i));
		}
		str.Empty();
		delete m_Recordset;
		m_Recordset=NULL;
	}

	// 这个是对表的访问 ,因为上面一定会创建表成功
	m_Recordset = new CRecordset(m_Database);
	try 
	{
		str.Format("SELECT * FROM [GGGG%s$A1:IV65536]",num);
		bRetRecordset=m_Recordset->Open(CRecordset::forwardOnly,str, CRecordset::readOnly);
		str.Empty();
	}
	catch (...)
	{
		str.Empty();
		::MessageBox(0,0,0,0);
		delete m_Recordset;
		m_Recordset=NULL;
	}
	
	m_Recordset->Close();
	m_Database->Close();
}

测试

void CExcle2Dlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
	Invalidate(FALSE);
	CString str;
	str.Empty();
	m_CtrlEdit.GetWindowText(str);
	AddTableS(str);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 若要使 dept_name 列为非空且唯一,可以使用以下 SQL 语句进行修改: ``` ALTER TABLE department ADD CONSTRAINT dept_name_unique UNIQUE (dept_name) NOT NULL; ``` 或者也可以使用以下语句进行重建: ``` CREATE TABLE department ( dept_name VARCHAR(255) NOT NULL UNIQUE, -- 其他列定义 ); ``` 希望这能帮到你。 ### 回答2: 要修改或重建department,以使dept_name为非空且唯一,可以使用属性约束条件来实现。 首先,修改department结构,将dept_name列的约束条件设置为非空(NOT NULL)。这样,插入或更新数据时,将无法将空值插入dept_name列中,确保该列非空。 接下来,为dept_name列添加唯一约束。唯一约束将确保dept_name列中的值不重复。如果尝试插入或修改值导致出现重复的dept_name值,系统将抛出错误并禁止操作。 以下是对department的修改示例SQL语句: ALTER TABLE department MODIFY dept_name VARCHAR(255) NOT NULL, -- 设置dept_name列为非空 ADD CONSTRAINT unique_dept_name UNIQUE (dept_name); -- 添加唯一约束 上述示例语句将修改department,使得dept_name列的值非空且唯一。通过这些属性约束条件,保证了dept_name列不会包含空值,并且每个dept_name值都是唯一的。 这样的修改或重建将确保department中的dept_name列满足非空和唯一的约束条件,以提高数据的一致性和完整性。 ### 回答3: 要修改(或者重建)department,使得dept_name为非空且唯一,可以采取以下步骤: 1. 添加非空约束条件:使用ALTER TABLE语句修改department,将dept_name字段设置为非空。例如:`ALTER TABLE department MODIFY COLUMN dept_name VARCHAR(100) NOT NULL;` 这样就确保了dept_name字段的值不能为空。 2. 添加唯一约束条件:使用ALTER TABLE语句向department添加唯一约束条件,确保dept_name字段的值在整个中是唯一的。例如:`ALTER TABLE department ADD CONSTRAINT UNIQUE (dept_name);` 这样就可以防止重复的dept_name值的插入。 如果需要重建department,可以先备份数据,然后删除原有的department,在创建新的department时,添加非空和唯一约束条件。 在新建的情况下,可以使用CREATE TABLE语句创建一个结构与原department相同的新,并在创建的同时添加非空和唯一约束条件。例如: ``` CREATE TABLE department_new ( dept_id INT PRIMARY KEY, dept_name VARCHAR(100) NOT NULL UNIQUE, ... ); ``` 以上是修改(或重建)department使得dept_name为非空且唯一的方法。这样可以确保每个部门的名称有且只有一个,且不能为空。这样的约束条件有助于保证数据的完整性和一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值