mysql运用_RecordsetPtr时新增数据报错

dukong123 2011-01-11 03:53:21
合并两个数据库a,b, 从a得item表取出数据,做少量修改,然后插入b得item表,
a得item有200万条数据,b得item有300万条数据,在插入第二条数据时update处报错。代码如下


BOOL CHFLogical::Process_Item(long nStartRecord,long nEndRecord, _RecordsetPtr destrs)
{
long nMaxItemID=GetTableMaxID("sk_item","id",m_DestGameConn);
CString sqlselect;
sqlselect.Format("select * from sk_item limit %d,%d",nStartRecord,nStartRecord+nEndRecord);
_RecordsetPtr rs;
rs.CreateInstance(__uuidof(Recordset));

_variant_t varval;

static long nRecordNum=0;

long oldid=0,newid=0,newplayerid=0;

long PlayerID=0;

long OwnerID=0;

long wps1=0,wps2=0,wps3=0,wps4=0;

long nTotalCount= GetTableCount("sk_item","id",m_SrcGameConn);


try
{
rs->Open(_bstr_t(sqlselect),m_SrcGameConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);

while (!rs->adoEOF) {

m_pUI->SetProgressText("sk_item",++nRecordNum,nTotalCount);

PlayerID = rs->Fields->GetItem("player_id")->Value;

newplayerid = m_MapUserID[PlayerID];
varval = rs->Fields->GetItem("id")->Value;
oldid = (long)varval;
newid = ++nMaxItemID;
//添加新的记录到目标表中
destrs->AddNew();
Sleep(100);
long colcnt = destrs->Fields->Count;
for(long i=0;i<colcnt;i++)
{
destrs->PutCollect(i,rs->Fields->GetItem(i)->Value);
}

//设置ID,MasterName
destrs->PutCollect("id",_variant_t(newid));

OwnerID = rs->Fields->GetItem("owner_id")->Value;


if(OwnerID==PlayerID)
destrs->PutCollect("owner_id",_variant_t(newplayerid));

destrs->PutCollect("player_id",_variant_t(newplayerid));


destrs->Update();
//把新旧id插入到容器中
m_MapItemID[oldid]=newid;

//移动到下一条记录
rs->MoveNext();
}
rs->Close();
}
catch (_com_error e) {
AfxMessageBox("Process_Item 出错");
AfxMessageBox(e.Description());
if(rs->GetState()&adStateOpen)
rs->Close();
return FALSE;
}

return true;
}
...全文
180 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2011-01-11
  • 打赏
  • 举报
回复
MYSQL错误日志中检查一下,看有些什么信息以供分析

毕竟可以导致MYISAM索引文件损坏的原因会有很多。
WWWWA 2011-01-11
  • 打赏
  • 举报
回复
已经提示,要修复sk_item.MY文件
dukong123 2011-01-11
  • 打赏
  • 举报
回复
错误信息 16:07:00 [ERROR] D:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld: Incorrect key file for table '.\supermandb_d\sk_item.MYI'; try to repair it
ACMAIN_CHM 2011-01-11
  • 打赏
  • 举报
回复
程序的错误信息是什么?
另外你的MYSQL的错误日志中有什么信息?


一种可能就是你的并发操作过多。
WWWWA 2011-01-11
  • 打赏
  • 举报
回复
修改引擎为INNODB,打开事务更新试试
小小小小周 2011-01-11
  • 打赏
  • 举报
回复
我只能解释 myisam 表容易损坏;其他的楼下的解释
WWWWA 2011-01-11
  • 打赏
  • 举报
回复
那就修复试试,再运行你的程序,看看结果如何
dukong123 2011-01-11
  • 打赏
  • 举报
回复
这个表开始是好的,由于运行以上操作而导致的损坏,在b数据库的iten表数据少时改程序运行时正确的
小小小小周 2011-01-11
  • 打赏
  • 举报
回复
修复下该文件.
myisamchk sk_item.MYI

WWWWA 2011-01-11
  • 打赏
  • 举报
回复
表引擎是MYISAM的,损坏?
myisamchk检查一下
用repair table xxx修复试试
dukong123 2011-01-11
  • 打赏
  • 举报
回复
报错。。。Incorrect key file for table sk_item.MYI.
WWWWA 2011-01-11
  • 打赏
  • 举报
回复
报什么错 ,提示什么

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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