MFC利用ADO建立access数据源 ---包括访问带access密码与不带access密码两种方式)
void CDlg_login::OnButton1()
{
CString c_user,c_password;
m_user1.GetWindowText(c_user);
m_password1.GetWindowText(c_password);
if (c_user.IsEmpty()||c_user.IsEmpty())
{
MessageBox("用户名密码不能为空!","提示",64);
}
m_pConnection.CreateInstance(__uuidof(Connection));
m_pRecordset.CreateInstance(__uuidof(Recordset));
CString strJet ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\\DataBase.mdb";
m_pConnection->Open(strJet.AllocSysString(),"","",adModeUnknown);
CString sql;
sql.Format("select *from employees where name='%s' and password='%s'",c_user,c_password);
m_pRecordset->Open(sql.AllocSysString(), m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,-1);
if (c_user==(user = m_pRecordset->GetCollect("name").bstrVal) &&c_password== (password = m_pRecordset->GetCollect("password").bstrVal))
{
CDialog::OnOK();
CLOGINDlg dlg;
dlg.DoModal();
}
实例二,连接数据据至登录对话框(其中部分代码注释加//,仅用来调试期间用,可供参考),代码实现如下:
try
{
this->UpdateData(true);
// if (this->m_username.IsEmpty()||this->m_password.IsEmpty())
// {
// MessageBox("用户名,密码不能为空!","登录提示",MB_ICONQUESTION);
// }
::CoInitialize(NULL);
this->m_pConnection.CreateInstance(__uuidof(Connection));
this->m_pRecordset.CreateInstance(__uuidof(Recordset));
// this->m_pConnection->Open("DSN=staff_dns","","",0);//上面四行为打开数据源连接,此方法使用本地DSN数据源
// CString strJet ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=staff.mdb"; //访问不带密码的access数据库
CString strJet ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=staff.mdb;Jet OLEDB:Database Password=sdoa0806"; //访问带密码的access数据库方法
this->m_pConnection->Open(strJet.AllocSysString(),"","",adModeUnknown);
CString str;
str.Format("select * from tb_staff where username='%s' and password='%s'",this->m_username,this->m_password);
BSTR bstrSQL=str.AllocSysString();
this->m_pRecordset->Open(bstrSQL,(IDispatch*)this->m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
if(!this->m_pRecordset->adoEOF)
{
// CDebugDlg dlg1;
// UpdateData(false);
// GetDlgItemText(IDC_EDIT1,dlg1.m_user);
// MessageBox(dlg1.m_user);
// dlg1.m_StatusBar.SetPaneText(3,m_username);
CDialog::OnOK();
//MessageBox("调用成功!");
OutputDebugString("登录成功!");
UpdateData(TRUE);
GetDlgItemText(IDC_EDIT_USERNAME,m_username);
//MessageBox(m_username,"1");
dlg_confirm.m_user=m_username;
// MessageBox(dlg_confirm.m_user,"2");
UpdateData(FALSE);
dlg_confirm.DoModal();
}
else
MessageBox("用户名,密码输入错误,登录失败!","登录提示",MB_ICONQUESTION);
}
catch (...) //增加try...catch异常抛出
{
AfxMessageBox("数据库连接失败,确认数据库名称与路径是否正确!");
return ;
}
this->m_pRecordset->Close();
this->m_pConnection->Close();
::CoUninitialize();
}
MFC利用ADO建立access数据源 ---包括访问带access密码与不带access密码两种方式)的更多相关文章
- 解决 SharePoint 2010 拒绝访问爬网内容源错误的小技巧(禁用环回请求的两种方式)
这里有一条解决在SharePoint 2010搜索爬网时遇到的“拒绝访问错误”的小技巧. 首先要检查默认内容访问帐户是否具有相应的访问权限,或者添加一条相应的爬网规则.如果目标资源库是一个ShareP ...
- 网络协议 finally{ return问题 注入问题 jdbc注册驱动问题 PreparedStatement 连接池目的 1.2.1DBCP连接池 C3P0连接池 MYSQL两种方式进行实物管理 JDBC事务 DBUtils事务 ThreadLocal 事务特性 并发访问 隔离级别
1.1.1 API详解:注册驱动 DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用 原因有2个: >导致驱动被注册2 ...
- System.Web.Http.Cors配置跨域访问的两种方式
System.Web.Http.Cors配置跨域访问的两种方式 使用System.Web.Http.Cors配置跨域访问,众多大神已经发布了很多文章,我就不在详细描述了,作为小白我只说一下自己的使用心 ...
- JS中访问对象的两种方式区别
可以使用下面两种方式访问对象的属性和方法 1.对象名.属性名 对象名.方法名() 2.对象名["属性名"] 对象名["方法名"]() var obj = { n ...
- MyBatis配置数据源的两种方式
---------------------siwuxie095 MyBatis 配置数据源的两种方式 1.配置方 ...
- Python与数据库[2] -> 关系对象映射/ORM[2] -> 建立声明层表对象的两种方式
建立声明层表对象的两种方式 在对表对象进行建立的时候,通常有两种方式可以完成,以下是两种方式的建立过程对比 首先导入需要的模块,获取一个声明层 from sqlalchemy.sql.schema i ...
- Python与数据库 sqlalchemy 建立声明层表对象的两种方式
在对表对象进行建立的时候,通常有两种方式可以完成,以下是两种方式的建立过程对比 首先导入需要的模块,获取一个声明层 1 from sqlalchemy.sql.schema import Table, ...
- 大数据学习day33----spark13-----1.两种方式管理偏移量并将偏移量写入redis 2. MySQL事务的测试 3.利用MySQL事务实现数据统计的ExactlyOnce(sql语句中出现相同key时如何进行累加(此处时出现相同的单词))4 将数据写入kafka
1.两种方式管理偏移量并将偏移量写入redis (1)第一种:rdd的形式 一般是使用这种直连的方式,但其缺点是没法调用一些更加高级的api,如窗口操作.如果想更加精确的控制偏移量,就使用这种方式 代 ...
- Android跟蓝牙耳机建立连接有两种方式
Android 跟蓝牙耳机建立连接有两种方式. 1. Android 主动跟蓝牙耳机连BluetoothSettings 中和蓝牙耳机配对上之后, BluetoothHeadsetService 会收 ...
随机推荐
- selenium1,selenium2,watir的比较
接触web方面的自动化测试,会接触几个常用的工具,selenium1,selenium2,watir 有的时候总是混淆,那么他们的优缺点啥的呢,在让你给项目选自动化框架,会选择哪个??? 1,语言的支 ...
- redhat nginx 启动脚本
#!/bin/sh # # nginx - this script starts and stops the nginx daemin # # chkconfig: - 85 15 # descrip ...
- 小白学C++的小问题
昨天开始学习C++,使用的visual studio 2012. 1命名要有意义,避免用a,b,c,尽量使用num,result等让人看见就能明白相关含义的名字 2要有一定的注释,注释和有意义的命名可 ...
- @NotNull和@NotEmpty和@NotBlank区别
1.@NotNull:不能为null,但可以为empty (""," "," ") 2.@NotEmpty:不能为null,而且长度必须大于 ...
- Struct和Class的区别(转载)
转载来源:http://blog.sina.com.cn/s/blog_48f587a80100k630.html C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据 ...
- HDU2571 命运 动态规划
好久没更新博客了. 校内练习的一道水题 HDU2571 命运. 简单DP. 穿过幽谷意味着离大魔王lemon已经无限接近了! 可谁能想到,yifenfei在斩杀了一些虾兵蟹将后,却再次面临命运大迷宫 ...
- python之~ 序列化与反序列化
sy1.proto文件 syntax = "proto2"; message stuff { required int32 stuff_ID = ; required ; opti ...
- IIS7或IIS7.5 ISAPI和CGI限制找不到的问题记录
弄了一下午,才找到,选择最上面的节点,如下图,记录备用
- 注册表中LEGACY残留项的清理技巧
http://bbs.kafan.cn/thread-889517-1-1.html 注册表中LEGACY残留项的清理技巧 2.Windows Vista系统 Windows XP系统下的修改权限的方 ...
- Chapter 2 Open Book——31
"It's too bad about the snow, isn't it?" Edward asked. I had the feeling that he was forci ...