ADO 支持 COMMIT 和ROLLBACK 吗?支持的话,应该怎么使用用呀!(最好有源码)请大侠赐教! 58分相送

stilllikeyou 2001-09-19 01:08:58
ADO 支持 COMMIT 和ROLLBACK 吗?支持的话,应该怎么使用用呀!(最好有源码)请大侠赐教! 58分相送
...全文
96 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
stilllikeyou 2001-09-19
  • 打赏
  • 举报
回复
谢谢!这么晚了,不睡呀,我刚才查到了!
karma 2001-09-19
  • 打赏
  • 举报
回复
yes, it does, check this code out, if you are patient, :-):
http://groups.google.com/groups?q=ado+committrans+rollbacktrans+C%2B%2B&hl=en&rnum=10&selm=uqndwBkj%24GA.77%40cppssbbsa02.microsoft.com

int Doit()
{

UpdateData(TRUE);

HRESULT hr;
char ConnStr[1042];
char TmpDateStr[64];
CString DirPath;

// tblCounters
_variant_t varTableId("TableId");
_variant_t varTableName("TableName");
_variant_t varCurrentId("CurrentId");
_variant_t varObjectId("ObjectId");

// tblMDACRelease
_variant_t varName("Name");
_variant_t varDate("Date");
_variant_t varDropLocation("DropLocation");
_variant_t varDescription("Description");
_variant_t varStatus("Status");
_variant_t varBuild("Build");
_variant_t varFixList("FixList");
_variant_t varShippedWith("ShippedWith");
_variant_t varPkID("PkID");

// tblMDACFileVersion
_variant_t varMDACVersion("MDACVersion");
_variant_t varcore("core");
_variant_t varFileName("FileName");
_variant_t varFileDate("FileDate");
_variant_t varFileSize("FileSize");
_variant_t varFileVer("FileVer");
_variant_t varMurphyVersion("MurphyVersion");
_variant_t varMDACRelTeamVer("MDACRelTeamVer");
_variant_t varAdditionalNotes("AdditionalNotes");
_variant_t varMDACReleasePkID("MDACReleasePkID");

_RecordsetPtr rsRelease;
_RecordsetPtr rsVersions;
_RecordsetPtr rsCounters;

_ConnectionPtr spCon;

GetConnStr(ConnStr);
CString x;
try {
hr = spCon.CreateInstance(__uuidof(Connection));
spCon->ConnectionString = ConnStr;
spCon->Open("", "", "", -1);
spCon->BeginTrans();

// tblCounters
rsCounters.CreateInstance(__uuidof(R
ecordset));
rsCounters->PutRefActiveConnection(spCon);
rsCounters->Open("SELECT TableId, TableName, CurrentId, ObjectId
FROM tblCounters where TableName='tblMDACRelease'"
,vtMissing,adOpenKeyset,adLockOptimistic,-1);

RsITEM(rsCounters,varCurrentId) = (long)
((long)(RsITEM(rsCounters,varCurrentId))+ 1L);
rsCounters->Update(vtMissing,vtMissing);

// tblMDACRelease
rsRelease.CreateInstance(__uuidof(Recordset));
rsRelease->PutRefActiveConnection(spCon);
rsRelease->Open("SELECT Name, Date, DropLocation, Description,
Status, Build, FixList, "
" ShippedWith, PkID FROM
tblMDACRelease",vtMissing,adOpenKeyset,adLockOptimistic,-1);

rsRelease->AddNew();
rsRelease->Fields->Item[varName]->Value = _bstr_t((const char
*)MDACVer).copy();
rsRelease->Fields->Item[varPkID]->Value = (long)
((long)(RsITEM(rsCounters,varCurrentId)));
rsRelease->Update();

// tblMDACFileVersion
rsVersions.CreateInstance(__uuidof(Recordset));
rsVersions->PutRefActiveConnection(spCon);
rsVersions->Open("SELECT MDACVersion, core, FileName, FileDate,
FileSize, FileVer, "
"MurphyVersion, MDACRelTeamVer, AdditionalNotes,
MDACReleasePkID FROM tblMDACFileVersion"
,vtMissing,adOpenKeyset,adLockOptimistic,-1);

DirPath = _getcwd(NULL,MAX_PATH);
long ret;
long hFile;
_finddata_t f;
hFile = _findfirst( "*.*" , &f);
ret = 0 ;
while( hFile > 0 && ret == 0 )
{
if( f.name[0] != '.' && !(f.attrib & _A_SUBDIR ) )


CString n;
CFileVersion VerInfo;
CString FileResults;
CString DirStringName(DirPath);
DirStringName += "\\" + CString( f.name ) ;
rsVersions->AddNew();
rsVersions->Fields->Item[varMDACVersion]->Value =
_bstr_t(MDACVer).copy();
rsVersions->Fields->Item[varcore]->Value =
_bstr_t("").copy();
rsVersions->Fields->Item[varFileName]->Value =
_bstr_t(f.name).copy();
strftime( TmpDateStr, sizeof(TmpDateStr),"%m/%d/%y %I:%M:%S
%p" ,localtime(&f.time_create ));

rsVersions->Fields->Item[varFileDate]->Value =
_bstr_t(TmpDateStr).copy();
rsVersions->Fields->Item[varFileSize]->Value =
(long)f.size ;
rsVersions->Fields->Item[varMurphyVersion]->Value =
_bstr_t("").copy();
rsVersions->Fields->Item[varMDACRelTeamVer]->Value =
_bstr_t("").copy();
rsVersions->Fields->Item[varAdditionalNotes]->Value =
_bstr_t("").copy();
rsVersions->Fields->Item[varMDACReleasePkID]->Value =
(long) ((long)(RsITEM(rsCounters,varCurrentId)));

n.Format("%s\\%s",DirPath,f.name);
if( VerInfo.Open(n) )
{
rsVersions->Fields->Item[varFileVer]->Value =
_bstr_t(VerInfo.GetFileVersion()).copy();
}
else
{
RsITEM(rsVersions,varFileVer) = _bstr_t("").copy();
}
rsVersions->Update();

}
ret = _findnext(hFile,&f);
}
rsRelease->Update();

}
catch( _com_error &e)
{
spCon->RollbackTrans();
_bstr_t bstrSource(e.Source());

_bstr_t bstrMess = _bstr_t(" Error: ")
+ _bstr_t(e.Error())
+ _bstr_t(" Msg: ")
+ _bstr_t(e.ErrorMessage())
+ _bstr_t(" Description: ")
+ _bstr_t(e.Description());

::MessageBox(NULL,bstrMess,bstrSource,MB_OK);

}

spCon->CommitTrans();
rsRelease->Close();
rsVersions->Close();
rsCounters->Close();

}

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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