MFC连接数据库问题,急!!!!!

ybjiajia 2008-05-14 01:45:54
我在工程定义了一个CDataBase类
把连接等函数都放在类里面;
然后在工程的对话框中对数据库进行插入,并不能插入,高手帮我看下。
BOOL CDataBase::ExecSQL(CString strSQL)
{
_variant_t var;
try
{
_RecordsetPtr pRs = m_spAdoCon->Execute(_bstr_t(strSQL), &var, adCmdText | adExecuteNoRecords);
}
catch(...)
{
var.Clear();
return FALSE;
}
return TRUE;
}


void CPhonebookDlg::OnButtonTianjia()
{

CPhonebookDlg1 dlg;
dlg.DoModal();
CDataBase DataBase;
bool tt=DataBase.ConnectDatabase(DataBase.GetDataBasePath());
CString strSQL;
strSQL.Format(_T("SELECT FROM phonebook WHERE name=dlg.m_edit1_name"));
if(DataBase.ExecSQL(strSQL))
MessageBox("这个用户在电话薄上已经存在!","Phone",MB_OK);
else{
strSQL.Format(_T("INSERT INTO phonebook (name,sex,age,relationship,phone,mobile,mail,youzheng,address,company)values(dlg.m_edit1_name,dlg.m_edit1_sex,dlg.m_edit1_nianling,dlg.m_edit1_guanxi,dlg.m_edit1_dianhua,dlg.m_edit1_phone,dlg.m_edit1_mail,dlg.m_edit1_youzheng,dlg.m_edit1_dizhi,dlg.m_edit1_gongsi)"));
DataBase.ExecSQL(strSQL);
DataBase.DisConnect();
m_listctrl.DeleteAllItems();
GetAllInformation();
}


// dlg.EndDialog();
// TODO: Add your control notification handler code here

}

我能看到,连接数据库是成功了的!
而且在INSERT 语句中的插入值也是对的
数据库的字段也是对的
但是在执行ExecSQL函数的时候
都是return false
并不能判断如果输入的用户相同的时候的情况!
并且输入新用户也并不能对数据库进行插入

m_listctrl这个是listctrl控件的对象
...全文
289 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
刚刚凉 2008-05-17
  • 打赏
  • 举报
回复
你把字段名加上[] 试试!!!!!!!!!!!!!!!!!!!!!!!!!!!
strSQL.Format(_T("INSERT INTO phonebook ([name],[sex],[age],[relationship],[phone],[mobile],[mail],[youzheng],[address],[company])values......

我以前遇到过这个问题 怎么弄都不行 ,查 错误也查不出来,后来加上中括号解决了 因为有些字段名跟系统的重复,加上中括号就可以了
ybjiajia 2008-05-14
  • 打赏
  • 举报
回复
我按找上面的做了修改
但是还是没有效果
还是不能插入数据到数据库
而且输入存在的用户也是一样不执行MessageBox("这个用户在电话薄上已经存在!","Phone",MB_OK);
vocanicy 2008-05-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lizhigang34 的回复:]
好像是你的SQL语句写错了,dlg.m_edit1_name 是CString 类型的吗??

C/C++ code
strSQL.Format(_T("SELECT FROM phonebook WHERE name=dlg.m_edit1_name")); //改成strSQL.Format("SELECT FROM phonebook WHERE name='" + dlg.m_edit1_name + "'");
[/Quote]


你设个断点在ExecSQL处,看看strSQL的内容,就知道自己为什么错了。

你的程序:
SELECT FROM phonebook WHERE name=dlg.m_edit1_name

正确的应该是这样的形式:
SELECT FROM phonebook WHERE name='张三'
ybjiajia 2008-05-14
  • 打赏
  • 举报
回复
我加了之后还是一个样子!
我都不知道到底是这么会事
只能访问不能插入,删除
lizhigang34 2008-05-14
  • 打赏
  • 举报
回复
那就不知道了,楼下的来帮忙..
lizhigang34 2008-05-14
  • 打赏
  • 举报
回复
你试试,可以了吗??
如果不加 + dlg.m_eidt1_name ,strSQL 的值就是SELECT FROM phonebook WHERE name=dlg.m_edit1_name
ybjiajia 2008-05-14
  • 打赏
  • 举报
回复
而且我这样加了之后也没有成功
跟上面的一样也是没有反映
555555555555555555555555555
ybjiajia 2008-05-14
  • 打赏
  • 举报
回复
我的dlg.m_edit1_name 是CString类型的啊
为什么要加那些东西呢?
lizhigang34 2008-05-14
  • 打赏
  • 举报
回复
好像是你的SQL语句写错了,dlg.m_edit1_name 是CString 类型的吗??

strSQL.Format(_T("SELECT FROM phonebook WHERE name=dlg.m_edit1_name")); //改成strSQL.Format("SELECT FROM phonebook WHERE name='" + dlg.m_edit1_name + "'");

4,017

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧