如何实现对数据集m_pSet增加一个记录呢?

时间:2022-08-17 17:56:59
我看一本书上关于增加记录的代码为:
m_pSet->AddNew();
UpdateData(false);
我想问的是m_pSet->AddNew();具体功能是什么啊?我在运行程序时发现,它好象就是
要清空当前对话框中各个编辑框的数据,并不能实现增加一个记录啊.(我已经将各个编辑框映射到数据表中相应的字段了).请问,到底如何实现增加一个记录啊?

12 个解决方案

#1


拜托了,各位大虾!

#2


我狂晕.这样一个简单问题,怎么就没人来帮帮解答了.难道是我分数给少了还是对这个问题不屑讲啊?小弟很急啊.

#3


我算是服了,这样一个问题都没人来答复我.遗憾啊!

#4


m_pSet->AddNew();
在输入框中输入添加的内容
m_pSet->Update();

#5


还要看你有没有把输入框中的东西与数据库中的绑定
所以正确的应该是这样.
m_pSet->AddNew();
然后给m_pSet->column1什么的数据付名,看你那个派生类里是怎么给数据库字段命名的
改好后就m_pSet->Update();
然后最好m_pSet->requery();重新取得数据

如果你将m_pSet->column1什么的帮定到对话框中的编辑控件的话
那么就是
m_pSet->AddNew();
在输入框中输入添加的内容
UpdateData(false);将对话框中的数据传给m_pSet->column1什么的(因为你帮定了)
然后
m_pSet->Update();
m_pSet->requary


#6


我已经将m_pSet->column1什么的帮定到对话框中的编辑控件.照楼上的所说,仅靠一个按钮,
并不能实现添加一个记录.而应该使用两个:一个按钮执行代码m_pSet->AddNew();然后手工
输入数据记录,再使用另一个按钮执行代码:
UpdateData(false);
m_pSet->Update();
m_pSet->Requary();
不知道我说的是不是对的.如果是对的,我就可以结贴了.

#7


照我上面说的去做,发现还是不行啊.就是打开数据库时,里面根本就没有我添加的那条记录,
是不是一定要用SQL语句才能实现向数据表添加记录呢?

#8


快来人啊!

#9


我用的方法比较复杂,照书做的,帮不上你了。
用的是
Fields * fields = NULL;
Field*   field  = NULL;
感觉用起来很不好用。不知道又没有简单好用的方法。

#10


那我再问一下:m_pSet->方式能否通过SQL语句对数据表进行操作呢?

#11


不明白为什么我行你不行?这是以前我写的个程序,你自己分析一下吧。
void COicqView::OnDel() 
{
// TODO: Add your control notification handler code here
if(AfxMessageBox("真的要删除"+m_pSet->m_column1+"吗?",MB_OKCANCEL)==IDCANCEL)return;
if(m_pSet->IsEOF())
{
AfxMessageBox("没有号码可删除?");
return;
}
m_pSet->Delete();
if(m_pSet->IsEOF())
   m_pSet->MoveLast();
else m_pSet->MoveNext();
m_pSet->Requery();
UpdateData(false);
AfxMessageBox("已经删除了该号码");

OnShowall();
}

void COicqView::OnAlldel() 
{
// TODO: Add your control notification handler code here
if(AfxMessageBox("真的要删除全部号码吗?",MB_OKCANCEL)==IDCANCEL)return;
    int i=0;
    CString str;
if(m_pSet->IsEOF())
{
AfxMessageBox("没有号码可删除?");
return;
}
    m_pSet->MoveFirst();
    while(!m_pSet->IsEOF())
{
          m_pSet->Delete();
  m_pSet->MoveNext();
  m_pSet->Requery();
  UpdateData(false);
  i++;
}
   str.Format("已经删除了%d条号码",i);
   AfxMessageBox(str);
    OnShowall();


}

void COicqView::OnAdd() 
{
// TODO: Add your control notification handler code here
CAddDialog dlg;
if(dlg.DoModal()==IDOK)
{
if(dlg.m_addnum.IsEmpty()||dlg.m_addpsw.IsEmpty())
{
AfxMessageBox("号码或密码为空,不能添加!");
return;
}
m_pSet->AddNew();
m_pSet->m_column1 = dlg.m_addnum;
m_pSet->m_column2 = dlg.m_addpsw;
m_pSet->Update();
m_pSet->Requery();
AfxMessageBox("已经添加"+dlg.m_addnum+"密码为"+dlg.m_addpsw);
UpdateData(false);



}

OnShowall();
}

void COicqView::OnShowall() 
{
// TODO: Add your control notification handler code here
m_list.DeleteAllItems();
while(m_list.DeleteColumn(0));
m_pSet->Requery();
if(m_pSet->IsEOF())
{
AfxMessageBox("由于在数据库底或者数据库没有数据");
return;
}
m_pSet->MoveFirst();

m_list.InsertColumn(0,"号码",LVCFMT_LEFT,84);
m_list.InsertColumn(1,"密码",LVCFMT_LEFT,84);



int i=0;
while(!m_pSet->IsEOF())
{
int j=0;
j=m_list.InsertItem(i,m_pSet->m_column1);
m_list.SetItemText(j,1,m_pSet->m_column2);
    i++;
m_pSet->MoveNext();
}
m_pSet->MoveFirst();
UpdateData(false);




}

void COicqView::OnXiugai() 
{
// TODO: Add your control notification handler code here

CAddDialog dlg;
if(dlg.DoModal()==IDOK)
{
if(dlg.m_addnum.IsEmpty()||dlg.m_addpsw.IsEmpty())
{
AfxMessageBox("号码或密码为空,不能修改!");
return;
}
m_pSet->Edit();
m_pSet->m_column1 = dlg.m_addnum;
m_pSet->m_column2 = dlg.m_addpsw;
m_pSet->Update();
m_pSet->Requery();
AfxMessageBox("已经修改"+dlg.m_addnum+"密码为"+dlg.m_addpsw);
UpdateData(false);
OnShowall();
}

}

能直接用sql不过是cdatabase::executesql(大概就这个名字吧,还像错了,你查查,自己电脑不在我身边在网吧搞的)

#12


是这样的,我要做一个消息处理函数,比如点击"增加记录",就清空当前编辑框的信息,
然后手动对每个编辑框输入数据,再点击另一个按钮"确定",就将相应的数据添加到数据库
中的数据表中.请问:"增加记录"和"确定"这两个按钮的消息处理函数怎么写?
我是这样写的:
增加记录代码:m_name=_T("");
             
             //先清空,有多少条都要写
             UpdateData(FALSE);
"确定"的代码为:
           UpdateData(TRUE);
           m_pSet->AddNew();
           m_pSet->Update();
现在又出现的新问题是按照m_name=_T("")这种方式清空没有成功,程序毫无反应.
我给数据库中各个字段定义的成员变量形如:m_name;
我给各个编辑框控件添加的变量为:形如m_pSet->m_name(注意,这样的变量是在下拉列表中
直接找到的,因为在我定义了数据库中各个字段的成员变量后,它就自动产生了),最后显示在列表中,各个编辑框控件对应的成员变量为形如->m_name,我就不明白对编辑框进行清空到底是使用哪个变量.m_name,m_pSet->m_name,->m_name这三种方式似乎都不行啊.
楼上的能不能帮我再解答一下呢?

#1


拜托了,各位大虾!

#2


我狂晕.这样一个简单问题,怎么就没人来帮帮解答了.难道是我分数给少了还是对这个问题不屑讲啊?小弟很急啊.

#3


我算是服了,这样一个问题都没人来答复我.遗憾啊!

#4


m_pSet->AddNew();
在输入框中输入添加的内容
m_pSet->Update();

#5


还要看你有没有把输入框中的东西与数据库中的绑定
所以正确的应该是这样.
m_pSet->AddNew();
然后给m_pSet->column1什么的数据付名,看你那个派生类里是怎么给数据库字段命名的
改好后就m_pSet->Update();
然后最好m_pSet->requery();重新取得数据

如果你将m_pSet->column1什么的帮定到对话框中的编辑控件的话
那么就是
m_pSet->AddNew();
在输入框中输入添加的内容
UpdateData(false);将对话框中的数据传给m_pSet->column1什么的(因为你帮定了)
然后
m_pSet->Update();
m_pSet->requary


#6


我已经将m_pSet->column1什么的帮定到对话框中的编辑控件.照楼上的所说,仅靠一个按钮,
并不能实现添加一个记录.而应该使用两个:一个按钮执行代码m_pSet->AddNew();然后手工
输入数据记录,再使用另一个按钮执行代码:
UpdateData(false);
m_pSet->Update();
m_pSet->Requary();
不知道我说的是不是对的.如果是对的,我就可以结贴了.

#7


照我上面说的去做,发现还是不行啊.就是打开数据库时,里面根本就没有我添加的那条记录,
是不是一定要用SQL语句才能实现向数据表添加记录呢?

#8


快来人啊!

#9


我用的方法比较复杂,照书做的,帮不上你了。
用的是
Fields * fields = NULL;
Field*   field  = NULL;
感觉用起来很不好用。不知道又没有简单好用的方法。

#10


那我再问一下:m_pSet->方式能否通过SQL语句对数据表进行操作呢?

#11


不明白为什么我行你不行?这是以前我写的个程序,你自己分析一下吧。
void COicqView::OnDel() 
{
// TODO: Add your control notification handler code here
if(AfxMessageBox("真的要删除"+m_pSet->m_column1+"吗?",MB_OKCANCEL)==IDCANCEL)return;
if(m_pSet->IsEOF())
{
AfxMessageBox("没有号码可删除?");
return;
}
m_pSet->Delete();
if(m_pSet->IsEOF())
   m_pSet->MoveLast();
else m_pSet->MoveNext();
m_pSet->Requery();
UpdateData(false);
AfxMessageBox("已经删除了该号码");

OnShowall();
}

void COicqView::OnAlldel() 
{
// TODO: Add your control notification handler code here
if(AfxMessageBox("真的要删除全部号码吗?",MB_OKCANCEL)==IDCANCEL)return;
    int i=0;
    CString str;
if(m_pSet->IsEOF())
{
AfxMessageBox("没有号码可删除?");
return;
}
    m_pSet->MoveFirst();
    while(!m_pSet->IsEOF())
{
          m_pSet->Delete();
  m_pSet->MoveNext();
  m_pSet->Requery();
  UpdateData(false);
  i++;
}
   str.Format("已经删除了%d条号码",i);
   AfxMessageBox(str);
    OnShowall();


}

void COicqView::OnAdd() 
{
// TODO: Add your control notification handler code here
CAddDialog dlg;
if(dlg.DoModal()==IDOK)
{
if(dlg.m_addnum.IsEmpty()||dlg.m_addpsw.IsEmpty())
{
AfxMessageBox("号码或密码为空,不能添加!");
return;
}
m_pSet->AddNew();
m_pSet->m_column1 = dlg.m_addnum;
m_pSet->m_column2 = dlg.m_addpsw;
m_pSet->Update();
m_pSet->Requery();
AfxMessageBox("已经添加"+dlg.m_addnum+"密码为"+dlg.m_addpsw);
UpdateData(false);



}

OnShowall();
}

void COicqView::OnShowall() 
{
// TODO: Add your control notification handler code here
m_list.DeleteAllItems();
while(m_list.DeleteColumn(0));
m_pSet->Requery();
if(m_pSet->IsEOF())
{
AfxMessageBox("由于在数据库底或者数据库没有数据");
return;
}
m_pSet->MoveFirst();

m_list.InsertColumn(0,"号码",LVCFMT_LEFT,84);
m_list.InsertColumn(1,"密码",LVCFMT_LEFT,84);



int i=0;
while(!m_pSet->IsEOF())
{
int j=0;
j=m_list.InsertItem(i,m_pSet->m_column1);
m_list.SetItemText(j,1,m_pSet->m_column2);
    i++;
m_pSet->MoveNext();
}
m_pSet->MoveFirst();
UpdateData(false);




}

void COicqView::OnXiugai() 
{
// TODO: Add your control notification handler code here

CAddDialog dlg;
if(dlg.DoModal()==IDOK)
{
if(dlg.m_addnum.IsEmpty()||dlg.m_addpsw.IsEmpty())
{
AfxMessageBox("号码或密码为空,不能修改!");
return;
}
m_pSet->Edit();
m_pSet->m_column1 = dlg.m_addnum;
m_pSet->m_column2 = dlg.m_addpsw;
m_pSet->Update();
m_pSet->Requery();
AfxMessageBox("已经修改"+dlg.m_addnum+"密码为"+dlg.m_addpsw);
UpdateData(false);
OnShowall();
}

}

能直接用sql不过是cdatabase::executesql(大概就这个名字吧,还像错了,你查查,自己电脑不在我身边在网吧搞的)

#12


是这样的,我要做一个消息处理函数,比如点击"增加记录",就清空当前编辑框的信息,
然后手动对每个编辑框输入数据,再点击另一个按钮"确定",就将相应的数据添加到数据库
中的数据表中.请问:"增加记录"和"确定"这两个按钮的消息处理函数怎么写?
我是这样写的:
增加记录代码:m_name=_T("");
             
             //先清空,有多少条都要写
             UpdateData(FALSE);
"确定"的代码为:
           UpdateData(TRUE);
           m_pSet->AddNew();
           m_pSet->Update();
现在又出现的新问题是按照m_name=_T("")这种方式清空没有成功,程序毫无反应.
我给数据库中各个字段定义的成员变量形如:m_name;
我给各个编辑框控件添加的变量为:形如m_pSet->m_name(注意,这样的变量是在下拉列表中
直接找到的,因为在我定义了数据库中各个字段的成员变量后,它就自动产生了),最后显示在列表中,各个编辑框控件对应的成员变量为形如->m_name,我就不明白对编辑框进行清空到底是使用哪个变量.m_name,m_pSet->m_name,->m_name这三种方式似乎都不行啊.
楼上的能不能帮我再解答一下呢?