int pos = m_Grid.GetSelectionMark();
ADO m_Ado;
m_Ado.OnInitADOConn();
CString sql = "select * from jobs";
m_Ado.m_pRecordset = m_Ado.OpenRecordset(sql);
try
{
m_Ado.m_pRecordset->Move(pos,vtMissing);
m_Ado.m_pRecordset->Delete(adAffectCurrent);
m_Ado.m_pRecordset->Update();
m_Ado.CloseRecordset();
m_Ado.CloseConn();
}
catch(...)
{
MessageBox("操作失败");
return;
}
这段是删除的,每次执行都是跳出失败提示。
下一段修改数据的,也是失败,仅仅是添加数据 能成功。
UpdateData(TRUE);
if(m_id.IsEmpty() || m_desc.IsEmpty() || m_slvl.IsEmpty())
{
MessageBox("基础信息不能为空!");
return;
}
int pos = m_Grid.GetSelectionMark();
ADO m_Ado;
m_Ado.OnInitADOConn();
CString sql = "select * from jobs";
m_Ado.m_pRecordset = m_Ado.OpenRecordset(sql);
try
{
m_Ado.m_pRecordset->Move((long)pos,vtMissing);
m_Ado.m_pRecordset->PutCollect("job_id",(_bstr_t)m_id);
m_Ado.m_pRecordset->PutCollect("job_desc",(_bstr_t)m_desc);
m_Ado.m_pRecordset->PutCollect("min_lvl",(_bstr_t)m_slvl);
m_Ado.m_pRecordset->PutCollect("max_lvl",(_bstr_t)m_llvl);
m_Ado.m_pRecordset->Update();
m_Ado.CloseRecordset();
m_Ado.CloseConn();
}
catch(...)
{
MessageBox("操作失败");
return;
}
5 个解决方案
#1
异常捕获改成这样试试看什么错误。
try
{
//你的ADO代码
}
catch (_com_error& e)
{
CString strMsg;
strMsg.Format(_T("错误描述:%s\n错误消息%s"),
(LPCTSTR)e.Description(),
(LPCTSTR)e.ErrorMessage());
AfxMessageBox(strMsg);
}
#2
1、确认连接建立正常。
2、确认SQL执行正确,并且记录集中有相应的记录。
3、确认操作的字段名称正确无误。
4、如果上述3处都没有问题的话,有可能跟你创建的记录集的类型有关,记录集有多种类型,每种类型的记录集对增删改等操作的支持是不一样的。
你可以看一个msdn中关于记录集类型的描述中对几种类型的秒,以便创建正确类型的记录集。
2、确认SQL执行正确,并且记录集中有相应的记录。
3、确认操作的字段名称正确无误。
4、如果上述3处都没有问题的话,有可能跟你创建的记录集的类型有关,记录集有多种类型,每种类型的记录集对增删改等操作的支持是不一样的。
你可以看一个msdn中关于记录集类型的描述中对几种类型的秒,以便创建正确类型的记录集。
#3
1、 AdOpenForwardOnly (默认值)一次只能向前移动一行。
2、 AdOpenKeyset 打开键集类型游标。
3、 AdOpenDynamic 打开动态类型游标
4、 AdOpenStatic 打开静态类型游标。
AdOpenForwardOnly和AdOpenStatic这两种游标使得记录集只读,它表示创建数据的一个快照。后者比前者灵活,因为它可以允许任意方向移动。
AdOpenKeyset允许任意移动,并且允许更改记录集。其他用户对记录集的添加和删除,这个游标反映不出来。但它能反映出其他用户对记录集的更改。
AdOpenDynamic允许所有操作,其他用户对记录集的添加、删除、更改在此记录集中
都是可见的。
AdLockReadOnly (默认值)只读 --- 不能改变数据。
AdLockPessimistic 悲观锁(逐个)--- 为确保成功完成编辑记录所需的工作,
在编辑时立即锁定数据源的记录。
AdLockOptimistic 乐观锁(逐个)--- 只在调用Update 方法时才锁定记录。
AdLockBatchOptimistic 乐观批更新---用于批更新模式(与立即更新模式相对)。
在网上搜了些关于记录集类型的介绍,看看是否对你有用!
2、 AdOpenKeyset 打开键集类型游标。
3、 AdOpenDynamic 打开动态类型游标
4、 AdOpenStatic 打开静态类型游标。
AdOpenForwardOnly和AdOpenStatic这两种游标使得记录集只读,它表示创建数据的一个快照。后者比前者灵活,因为它可以允许任意方向移动。
AdOpenKeyset允许任意移动,并且允许更改记录集。其他用户对记录集的添加和删除,这个游标反映不出来。但它能反映出其他用户对记录集的更改。
AdOpenDynamic允许所有操作,其他用户对记录集的添加、删除、更改在此记录集中
都是可见的。
AdLockReadOnly (默认值)只读 --- 不能改变数据。
AdLockPessimistic 悲观锁(逐个)--- 为确保成功完成编辑记录所需的工作,
在编辑时立即锁定数据源的记录。
AdLockOptimistic 乐观锁(逐个)--- 只在调用Update 方法时才锁定记录。
AdLockBatchOptimistic 乐观批更新---用于批更新模式(与立即更新模式相对)。
在网上搜了些关于记录集类型的介绍,看看是否对你有用!
#4
感觉不是类型错误就是下标越界,类型错误可能多些
你跟跟看,到哪出的错,也有个别字段根据不同的数据库可能会有冲突
你跟跟看,到哪出的错,也有个别字段根据不同的数据库可能会有冲突
#5
mark
#1
异常捕获改成这样试试看什么错误。
try
{
//你的ADO代码
}
catch (_com_error& e)
{
CString strMsg;
strMsg.Format(_T("错误描述:%s\n错误消息%s"),
(LPCTSTR)e.Description(),
(LPCTSTR)e.ErrorMessage());
AfxMessageBox(strMsg);
}
#2
1、确认连接建立正常。
2、确认SQL执行正确,并且记录集中有相应的记录。
3、确认操作的字段名称正确无误。
4、如果上述3处都没有问题的话,有可能跟你创建的记录集的类型有关,记录集有多种类型,每种类型的记录集对增删改等操作的支持是不一样的。
你可以看一个msdn中关于记录集类型的描述中对几种类型的秒,以便创建正确类型的记录集。
2、确认SQL执行正确,并且记录集中有相应的记录。
3、确认操作的字段名称正确无误。
4、如果上述3处都没有问题的话,有可能跟你创建的记录集的类型有关,记录集有多种类型,每种类型的记录集对增删改等操作的支持是不一样的。
你可以看一个msdn中关于记录集类型的描述中对几种类型的秒,以便创建正确类型的记录集。
#3
1、 AdOpenForwardOnly (默认值)一次只能向前移动一行。
2、 AdOpenKeyset 打开键集类型游标。
3、 AdOpenDynamic 打开动态类型游标
4、 AdOpenStatic 打开静态类型游标。
AdOpenForwardOnly和AdOpenStatic这两种游标使得记录集只读,它表示创建数据的一个快照。后者比前者灵活,因为它可以允许任意方向移动。
AdOpenKeyset允许任意移动,并且允许更改记录集。其他用户对记录集的添加和删除,这个游标反映不出来。但它能反映出其他用户对记录集的更改。
AdOpenDynamic允许所有操作,其他用户对记录集的添加、删除、更改在此记录集中
都是可见的。
AdLockReadOnly (默认值)只读 --- 不能改变数据。
AdLockPessimistic 悲观锁(逐个)--- 为确保成功完成编辑记录所需的工作,
在编辑时立即锁定数据源的记录。
AdLockOptimistic 乐观锁(逐个)--- 只在调用Update 方法时才锁定记录。
AdLockBatchOptimistic 乐观批更新---用于批更新模式(与立即更新模式相对)。
在网上搜了些关于记录集类型的介绍,看看是否对你有用!
2、 AdOpenKeyset 打开键集类型游标。
3、 AdOpenDynamic 打开动态类型游标
4、 AdOpenStatic 打开静态类型游标。
AdOpenForwardOnly和AdOpenStatic这两种游标使得记录集只读,它表示创建数据的一个快照。后者比前者灵活,因为它可以允许任意方向移动。
AdOpenKeyset允许任意移动,并且允许更改记录集。其他用户对记录集的添加和删除,这个游标反映不出来。但它能反映出其他用户对记录集的更改。
AdOpenDynamic允许所有操作,其他用户对记录集的添加、删除、更改在此记录集中
都是可见的。
AdLockReadOnly (默认值)只读 --- 不能改变数据。
AdLockPessimistic 悲观锁(逐个)--- 为确保成功完成编辑记录所需的工作,
在编辑时立即锁定数据源的记录。
AdLockOptimistic 乐观锁(逐个)--- 只在调用Update 方法时才锁定记录。
AdLockBatchOptimistic 乐观批更新---用于批更新模式(与立即更新模式相对)。
在网上搜了些关于记录集类型的介绍,看看是否对你有用!
#4
感觉不是类型错误就是下标越界,类型错误可能多些
你跟跟看,到哪出的错,也有个别字段根据不同的数据库可能会有冲突
你跟跟看,到哪出的错,也有个别字段根据不同的数据库可能会有冲突
#5
mark