用ODBC源,access2000数据库,vs2005开发环境。rs是CRecordset的派生类,使用正常。
//把数据添加到数据库中.
while(!rs.IsEOF())
{
rs.MoveNext();
} rs.AddNew();
rs.m_ID = str_index;
rs.m_Time = m_ctlListData.GetItemText(0,0);
rs.m_Channel1 = m_ctlListData.GetItemText(0,1);
rs.m_Channel2 = m_ctlListData.GetItemText(0,2);
rs.m_Channel3 = m_ctlListData.GetItemText(0,3);
//省略若干
rs.m_Channel24 = m_ctlListData.GetItemText(0,24);
rs.Update();已经用while语句把游标指向到了记录最后一条了,可是,添加的时候,始终只能添加到记录中间,何解?
//把数据添加到数据库中.
while(!rs.IsEOF())
{
rs.MoveNext();
} rs.AddNew();
rs.m_ID = str_index;
rs.m_Time = m_ctlListData.GetItemText(0,0);
rs.m_Channel1 = m_ctlListData.GetItemText(0,1);
rs.m_Channel2 = m_ctlListData.GetItemText(0,2);
rs.m_Channel3 = m_ctlListData.GetItemText(0,3);
//省略若干
rs.m_Channel24 = m_ctlListData.GetItemText(0,24);
rs.Update();已经用while语句把游标指向到了记录最后一条了,可是,添加的时候,始终只能添加到记录中间,何解?
rs.Open(CRecordset::dynaset,_T("Select * from tb_1"));
select into 新表 order by
删除旧表
重命名新表
为了实现给应用程序添加这一功能,首先为记录集类CSet添加一个计算下
一个ID号的成员函数GetMaxID,函数类型为长整型,访问权限为公共。编辑该函数,并
加入如下的代码。
long C……Set::GetMaxID()
{
//move to the last record
MoveLast();
//return the ID of this record
return m_ID;
}
使用Class Wizard,为视图类C……View添加一个关于新增菜单的COMMAND事
件消息的事件处理函数。编辑该函数,并加入如下的代码。
void CEx_ODBCView::OnRecordNew()
{
// TODO: Add your command handler code here
//Get a pointer to the record set
CRecordset* pSet=OnGetRecordset();
//确保对当前记录的修改保存
if(pSet->CanUpdate()&&!pSet->IsDeleted())
{
pSet->Edit();
if(!UpdateData())
return;
pSet->Update();
}
//为新记录得到ID号
long m_lNewID=m_pSet->GetMaxID()+1;
//Add the new record
m_pSet->AddNew();
//设置新记录的ID号
m_pSet->m_ID =m_lNewID;
//保存新记录
……………………//其他字段值的保存
m_pSet->Update();
//刷新记录集
m_pSet->Requery();
//移动到新记录上
m_pSet->MoveLast();
//刷新窗体
UpdateData(FALSE);
}
你试试看
关系数据库中的记录不分前后,一个 ORDER BY 子句就解决问题了。
特殊情况:考虑到存取速度,大型数据库中都有聚簇索引;但是像 ACCESS JET 小型数据库可以不考虑这个。看下边的例子:学生表,有3个字段,分别为
===============================
“学号”,数值型“姓名”,字符型“出生日期”,日期类型
===============================有下边几条数据:
===============================
10 张三 1982.3.3
5 李四 1983.5.4
20 王五 1983.6.2
===============================虽然数据存储在数据库中是没有按学号顺序排放的,但是读取时,可以使用 ORDER BY 子句,如下:SELECT * FROM student ORDER BY strnum
且不需要:
while(!rs.IsEOF())
{
rs.MoveNext();
}
这样移动。
m_Recordset->MoveLast();
m_Recordset->AddNew();3. 如果数据库是空的,这样会出错,所以先判断一下是否为空,处理一下4. 我觉得order by在读取数据时很必要