而且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();
}
8 个解决方案
#1
你这是什么数据库?也要考虑数据库的承受能力。
#2
ACCESS,表的数据绝对少,100多条左右
#3
如果不加延时,你说的运行不稳定是个什么状况?
#4
插入时,数据不完整,前面总是少得几条语句
我现在的操作时,插入前先删除表记录,
删除语句 delete from 表名
然后执行循环插入操作,
单步调试执行状态时是正常的 ,或ShowMessage(1);这样都正常 sleep出错率低
我现在的操作时,插入前先删除表记录,
删除语句 delete from 表名
然后执行循环插入操作,
单步调试执行状态时是正常的 ,或ShowMessage(1);这样都正常 sleep出错率低
#5
Sleep(1000)也太夸张了吧。本地数据库吗?access 2010的数据库引擎会好一些吧。
#6
本地的数据库,Sleep 非常的夸张
#7
自定义一个休眠函数:
然后加到循环中:
看看效果。
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);
}
看看效果。
#8
终于搞定了,只是不知是什么原因,在循环前我先删除原表记录,现在我改为先把原表的唯一条件值保存到变量里,然后直接执行循环增加,增加完记录后,再根据先前保存的唯一记录执行删除操作,测试了10几次都正常,不知什么原因了
虽然不是用ccrun哥的方法,但还是谢谢
虽然不是用ccrun哥的方法,但还是谢谢
#1
你这是什么数据库?也要考虑数据库的承受能力。
#2
ACCESS,表的数据绝对少,100多条左右
#3
如果不加延时,你说的运行不稳定是个什么状况?
#4
插入时,数据不完整,前面总是少得几条语句
我现在的操作时,插入前先删除表记录,
删除语句 delete from 表名
然后执行循环插入操作,
单步调试执行状态时是正常的 ,或ShowMessage(1);这样都正常 sleep出错率低
我现在的操作时,插入前先删除表记录,
删除语句 delete from 表名
然后执行循环插入操作,
单步调试执行状态时是正常的 ,或ShowMessage(1);这样都正常 sleep出错率低
#5
Sleep(1000)也太夸张了吧。本地数据库吗?access 2010的数据库引擎会好一些吧。
#6
本地的数据库,Sleep 非常的夸张
#7
自定义一个休眠函数:
然后加到循环中:
看看效果。
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);
}
看看效果。
#8
终于搞定了,只是不知是什么原因,在循环前我先删除原表记录,现在我改为先把原表的唯一条件值保存到变量里,然后直接执行循环增加,增加完记录后,再根据先前保存的唯一记录执行删除操作,测试了10几次都正常,不知什么原因了
虽然不是用ccrun哥的方法,但还是谢谢
虽然不是用ccrun哥的方法,但还是谢谢