循环执行SQL语句,居然不是很稳定,好烦啊,弄了两天了

wenyongjie 2013-07-06 11:27:01
先声明 ,以下SQL语句 完全正确,并且没有和任何全局控件进行关联,而且在单步调试执行状态时是正常的
而且ADOQuery连接数据库是正常的,给我的感觉 是太快了,就不正常,我Sleep(1000)正确率就大大提高 ,但这不合常理啊
是不是ADOQuery还有什么属性要设置呢?有哪个知道啊
//以下用到的变量都是局部定义 的,没有任何问题
for ( i = 0; i < sListBh->Count; i++)
{
bz = sListBh->Names[i];
nZBH = atoi(sListBh->Values[bz].c_str());
zbh = ListZBBH->Values[bz];
sql = "Insert into [工程取费] (原编号,上级编号,排序,主表,顺号,输出,项目,公式,基础,标志,专业取费) select 编号,上级编号,排序," + zbh +
",顺号,输出,项目,公式,基础,标志,'" + sTypeName + "' from [;DATABASE="+DePath+"].[工程取费] where 表项=" + IntToStr(nZBH);
aQ->ExecSQL();
}
...全文
235 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenyongjie 2013-07-06
  • 打赏
  • 举报
回复
终于搞定了,只是不知是什么原因,在循环前我先删除原表记录,现在我改为先把原表的唯一条件值保存到变量里,然后直接执行循环增加,增加完记录后,再根据先前保存的唯一记录执行删除操作,测试了10几次都正常,不知什么原因了 虽然不是用ccrun哥的方法,但还是谢谢
ccrun.com 2013-07-06
  • 打赏
  • 举报
回复
自定义一个休眠函数:
void __fastcall CrnSleep(UINT nDelay)
{
    DWORD dw = ::GetTickCount();

    while (::GetTickCount() - dw < nDelay)
        Application->ProcessMessages();
}
然后加到循环中:
for ( i = 0; i < sListBh->Count; i++)
{
    ...
    aQ->ExecSQL();
    CrnSleep(10);
}
看看效果。
wenyongjie 2013-07-06
  • 打赏
  • 举报
回复
本地的数据库,Sleep 非常的夸张
cankoo 2013-07-06
  • 打赏
  • 举报
回复
Sleep(1000)也太夸张了吧。本地数据库吗?access 2010的数据库引擎会好一些吧。
wenyongjie 2013-07-06
  • 打赏
  • 举报
回复
插入时,数据不完整,前面总是少得几条语句 我现在的操作时,插入前先删除表记录, 删除语句 delete from 表名 然后执行循环插入操作, 单步调试执行状态时是正常的 ,或ShowMessage(1);这样都正常 sleep出错率低
ccrun.com 2013-07-06
  • 打赏
  • 举报
回复
如果不加延时,你说的运行不稳定是个什么状况?
wenyongjie 2013-07-06
  • 打赏
  • 举报
回复
ACCESS,表的数据绝对少,100多条左右
ccrun.com 2013-07-06
  • 打赏
  • 举报
回复
你这是什么数据库?也要考虑数据库的承受能力。

13,825

社区成员

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

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