请教如何改成带事务处理的存储过程

qiuafa 2005-06-06 12:14:06
请教如何改成带事务处理的存储过程


表一
user_table (user_id_id, user_id, user_name, sex, birthdate)
user_id_id 自动增长

表二
data_table (data_id, user_id_id, instance)
data_id 自动增长


已知变量
char UserId[17];
char UserName[17];
char BirthDate[17];
char Instance[17];

TQuery *Query;
TDatabase *Database;

用法:
Database->StartTransaction();
try
{
if (InsertRecord(UserId, UserName, Birthdate, Instance))
Database->Commit();
else
Database->Rollback();
}
catch(Exception&e)
{
Database->Rollback();
}

bool InsertRecord(char* UserId, char* UserName, char* Birthdate, char* Instance)
{
AnsiString sql;
char buf[512];
int UserIdId;

// insert user
sql = AnsiString("SELECT user_id_id FROM "
"user_table WHERE user_id=\'") + UserId + '\'';
if(Query->Active) Query->Close();
Query->SQL->Text=sql;
if(!Query->Prepared) Query->Prepare();
Query->Open();
if (Query->RecordCount == 0)
{
if (Query->Active) Query->Close();
sprintf(buf, "INSERT INTO user_table (user_id,"
"user_name,sex,birth_date) VALUES ('%s',"
"'%s','%s',%s)", UserId, UserName,
Sex,BirthDate[0]?BirthDate:"NULL");
Query->SQL->Text=buf;
Query->ExecSQL();
if (Query->Active) Query->Close();
Query->SQL->Clear();
Query->SQL->Text=sql;
Query->Open();
}
if(Query->Active && Query->RecordCount==1){
Query->First();
UserIdId=Query->Fields->Fields[0]->AsInteger;
}
else
return false;
if (Query->Active) Query->Close();

//insert user data
sql = "SELECT data_id, deleted FROM data_table"
" WHERE instance=\'";
sql += Instance; sql += "\' AND user_id_id=";
sql += UserIdId;
Query->SQL->Text=sql;
Query->Open();
if (Query->RecordCount == 0) {
if (Query->Active) Query->Close();
sprintf(buf,"INSERT INTO data_table (instance, deleted, user_id_id)"
"VALUES ('%s','F',%lu)" ,Instance, UserIdId);
Query->SQL->Text=buf;
Query->ExecSQL();
}
else if(Query->RecordCount == 1) {
if (Query->Active) Query->Close();
sprintf(buf,"UPDATE data_table set deleted='F',"
"user_id_id=%lu Where instance='%s'",
UserIdId, Instance);
Query->SQL->Text=buf;
Query->ExecSQL();
}
else{
if(Query->Active) Query->Close();
return false;
}
if (Query->Active) Query->Close();
return true;
}
...全文
101 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
gxd305 2005-06-06
  • 打赏
  • 举报
回复
建议你用存储过程
载存储过程中用事务处理
happyct 2005-06-06
  • 打赏
  • 举报
回复
看到代码就头痛,来UP一下
qiuafa 2005-06-06
  • 打赏
  • 举报
回复
up
lurel 2005-06-06
  • 打赏
  • 举报
回复
BDE支持缓存更新,可以试试!

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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