点击树字节点后进行查询记录并将其插入另一个对话框列表出错!
我是在一个树形控件中做,点击其子节点来获得它的父节点的值,从而做为SQL查询条件来搜索,并在列表对话框类中定义了一个_RecordsetPtrcpRst变量,之后定义一个...
我是在一个树形控件中做,点击其子节点来获得它的父节点的值,从而做为SQL查询条件来搜索,并在列表对话框类中定义了一个_RecordsetPtr cpRst变量,之后定义一个列表对话框的对象:Cdialog2 cd2,通过cd2调用列表关联变量m_list进行插入操作,代码是这样的
void CMyTBDlg::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
UpdateData(true);
node_name=m_mytree.GetItemText(pNMTreeView->itemNew.hItem);
//在标题栏显示节点信息
SetWindowText(node_name);
HTREEITEM hItem=m_mytree.GetSelectedItem();
HTREEITEM hParent=m_mytree.GetParentItem(hItem);
//得到父节点的值
parent_name=m_mytree.GetItemText(hParent);
//切换面板
if(node_name=="Dialog 1-1"){
m_treePages[0]->ShowWindow(SW_SHOW);
m_treePages[1]->ShowWindow(SW_HIDE);
}
//当点击下面节点时,进行查询并把结果插入另一个对话框的列表
else if(node_name=="Dialog 2-1-1"){
m_treePages[0]->ShowWindow(SW_HIDE);
m_treePages[1]->ShowWindow(SW_SHOW);
_ConnectionPtr pConn;
_CommandPtr pCmd;
_RecordsetPtr pRst;
CoInitialize(NULL);
pConn.CreateInstance(__uuidof(Connection));//
pCmd.CreateInstance((__uuidof(Command)));
pRst.CreateInstance((__uuidof(Recordset)));
//connection string
pConn->ConnectionString="Provider=SQLOLEDB.1;Password=123456;Persist Security Info=TRUE;User ID=sa;Initial Catalog=超市管理系统";
//open connection
try
{
pConn->Open("","","",adConnectUnspecified);
}
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
}
UpdateData(true);
CString str;
UpdateData(true);
str.Format("select * from goods_table where goods_name='%s'",parent_name);
_variant_t RecordsAffected;
try
{
pRst->Open((_variant_t)str,pConn.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
// AfxMessageBox(e.ErrorMessage());
CString strComError;
strComError.Format("错误编号: %08lx\n错误信息: %s\n错误源: %s\n错误描述: %s",
e.Error(), // 错误编号
e.ErrorMessage(), // 错误信息
(LPCSTR) e.Source(), // 错误源
(LPCSTR) e.Description()); // 错误描述
MessageBox(strComError,"错误");
}
int row=0;
//定义列表对话框对象
Cdialog2 cd2;
cd2.cpRst=pRst; //将查询结果记录赋值给列表对话框的变量cpRst
while(!cd2.cpRst->adoEOF) //进行向列表插入记录
{
CString temp;
cd2.m_list.InsertItem(1000,"");
for(int i=0;i<cd2.cpRst->Fields->Count;i++)
{
temp=(TCHAR*)(_bstr_t)cd2.cpRst->GetFields()->GetItem((long)i)->Value;
cd2.m_list.SetItemText(row,i,temp);
}
row+=1;
cd2.cpRst->MoveNext();
}
}
UpdateData(false);
*pResult = 0;
}
//程序能正常运行,但点击那子节点的时候出错,为什么不能执行插入操作?
请教各位大哥们,来帮忙解答下吧
无法往列表中插入查询值,我是在列表所在的Dialog2中定义变量_RecordsetPtr cpRst; 再定义Dialog2对象cd2;通过cd2.m_list.SetItemText(row,i,temp)向列表插入记录,为什么都记录无法插入列表,其中m_list是Dialog2的列表的关联变量. 我试验了一下,在和按钮同一个Dialog中下列表就能插入查询记录值,是不是声明类对象后引用出现关联变量m_list有误?还是不能那么用?!大哥们帮帮忙呐! 展开
void CMyTBDlg::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
UpdateData(true);
node_name=m_mytree.GetItemText(pNMTreeView->itemNew.hItem);
//在标题栏显示节点信息
SetWindowText(node_name);
HTREEITEM hItem=m_mytree.GetSelectedItem();
HTREEITEM hParent=m_mytree.GetParentItem(hItem);
//得到父节点的值
parent_name=m_mytree.GetItemText(hParent);
//切换面板
if(node_name=="Dialog 1-1"){
m_treePages[0]->ShowWindow(SW_SHOW);
m_treePages[1]->ShowWindow(SW_HIDE);
}
//当点击下面节点时,进行查询并把结果插入另一个对话框的列表
else if(node_name=="Dialog 2-1-1"){
m_treePages[0]->ShowWindow(SW_HIDE);
m_treePages[1]->ShowWindow(SW_SHOW);
_ConnectionPtr pConn;
_CommandPtr pCmd;
_RecordsetPtr pRst;
CoInitialize(NULL);
pConn.CreateInstance(__uuidof(Connection));//
pCmd.CreateInstance((__uuidof(Command)));
pRst.CreateInstance((__uuidof(Recordset)));
//connection string
pConn->ConnectionString="Provider=SQLOLEDB.1;Password=123456;Persist Security Info=TRUE;User ID=sa;Initial Catalog=超市管理系统";
//open connection
try
{
pConn->Open("","","",adConnectUnspecified);
}
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
}
UpdateData(true);
CString str;
UpdateData(true);
str.Format("select * from goods_table where goods_name='%s'",parent_name);
_variant_t RecordsAffected;
try
{
pRst->Open((_variant_t)str,pConn.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
// AfxMessageBox(e.ErrorMessage());
CString strComError;
strComError.Format("错误编号: %08lx\n错误信息: %s\n错误源: %s\n错误描述: %s",
e.Error(), // 错误编号
e.ErrorMessage(), // 错误信息
(LPCSTR) e.Source(), // 错误源
(LPCSTR) e.Description()); // 错误描述
MessageBox(strComError,"错误");
}
int row=0;
//定义列表对话框对象
Cdialog2 cd2;
cd2.cpRst=pRst; //将查询结果记录赋值给列表对话框的变量cpRst
while(!cd2.cpRst->adoEOF) //进行向列表插入记录
{
CString temp;
cd2.m_list.InsertItem(1000,"");
for(int i=0;i<cd2.cpRst->Fields->Count;i++)
{
temp=(TCHAR*)(_bstr_t)cd2.cpRst->GetFields()->GetItem((long)i)->Value;
cd2.m_list.SetItemText(row,i,temp);
}
row+=1;
cd2.cpRst->MoveNext();
}
}
UpdateData(false);
*pResult = 0;
}
//程序能正常运行,但点击那子节点的时候出错,为什么不能执行插入操作?
请教各位大哥们,来帮忙解答下吧
无法往列表中插入查询值,我是在列表所在的Dialog2中定义变量_RecordsetPtr cpRst; 再定义Dialog2对象cd2;通过cd2.m_list.SetItemText(row,i,temp)向列表插入记录,为什么都记录无法插入列表,其中m_list是Dialog2的列表的关联变量. 我试验了一下,在和按钮同一个Dialog中下列表就能插入查询记录值,是不是声明类对象后引用出现关联变量m_list有误?还是不能那么用?!大哥们帮帮忙呐! 展开
3个回答
展开全部
首先在一个过程里只需要一个on error 语句。
你是用datagrid绑定的吗?
如果是绑定的,只要你输入数据,就会保存记录的,不管有没有重复,也容易出错。
不要在datagrid里添加记录,在里面修改记录还马马虎虎,最好也不要,很容易误操作的。
应该用 res.addnew 命令添加记录,要添加的数据输入在textbox控件里,用赋值语句赋值到每一个字段里,用res.update保存记录。
If MsgBox("确实要增加吗?", vbYesNo) = vbYes Then '确认是否增加记录
If Text1 = "" Then '判断序号不能为空
MsgBox "序号不能为空!请重新输入." '显示对话框
Text1.SetFocus '使text1获得焦点
Exit Sub '退出,重新输入数据
Else
'判断序号是否已经存在
res.Open "select * from animal where animal=' " & text1 & "'", cnn, 1, 3
If Not res.EOF Then
MsgBox "此单词已有,请录入其他单词.", 48, "提示"
exit sub
End If
'增加记录
res.AddNew '在数据库里插入一条空记录
res.Fields("序号") = Text1 '赋值
res.Fields("姓名") = Text2
...........
res.Update '保存记录
End If
你是用datagrid绑定的吗?
如果是绑定的,只要你输入数据,就会保存记录的,不管有没有重复,也容易出错。
不要在datagrid里添加记录,在里面修改记录还马马虎虎,最好也不要,很容易误操作的。
应该用 res.addnew 命令添加记录,要添加的数据输入在textbox控件里,用赋值语句赋值到每一个字段里,用res.update保存记录。
If MsgBox("确实要增加吗?", vbYesNo) = vbYes Then '确认是否增加记录
If Text1 = "" Then '判断序号不能为空
MsgBox "序号不能为空!请重新输入." '显示对话框
Text1.SetFocus '使text1获得焦点
Exit Sub '退出,重新输入数据
Else
'判断序号是否已经存在
res.Open "select * from animal where animal=' " & text1 & "'", cnn, 1, 3
If Not res.EOF Then
MsgBox "此单词已有,请录入其他单词.", 48, "提示"
exit sub
End If
'增加记录
res.AddNew '在数据库里插入一条空记录
res.Fields("序号") = Text1 '赋值
res.Fields("姓名") = Text2
...........
res.Update '保存记录
End If
展开全部
Cdialog2 cd2;
while(!pRst->adoEOF) //进行向列表插入记录
{
CString temp;
cd2.m_list.InsertItem(1000,"");
for(int i=0;i<pRst->Fields->Count;i++)
{
temp=(TCHAR*)(_bstr_t)pRst->GetFields()->GetItem((long)i)->Value;
cd2.m_list.SetItemText(row,i,temp);
}
row+=1;
pRst->MoveNext();
}
}
UpdateData(false);
*pResult = 0;
}
while(!pRst->adoEOF) //进行向列表插入记录
{
CString temp;
cd2.m_list.InsertItem(1000,"");
for(int i=0;i<pRst->Fields->Count;i++)
{
temp=(TCHAR*)(_bstr_t)pRst->GetFields()->GetItem((long)i)->Value;
cd2.m_list.SetItemText(row,i,temp);
}
row+=1;
pRst->MoveNext();
}
}
UpdateData(false);
*pResult = 0;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
很可能是硬件问题哦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询