利用ADO连接SQL Server,传递"delete from table1"给SQL Server会有问题?

caoguangxin 2002-03-29 12:33:11
各位大虾,小弟这厢有礼了,请教一个奇怪的问题:
我用C++ Builder 5.0做了一个程序,利用ADO连接SQL Server 2000,想删除一个表内的所有记录,我这样写:
int ErrorCode = 0;
ADOQuery->SQL->Clear();
ADOQuery->SQL->Add("delete from table1");
try
{  ADOQuery->ExecSQL();
}
catch (EOleException &E)
{  // 出错处理
  ErrorCode = -1;
}
程序在SQL Server 7.0下运行得很好,但在SQL Server 2000下运行时,程序运行正常,但每次却只从Table1中删除了部分记录,没有完全删除所有的记录,这是为什么,是因为SQL Server的版本不同所致吗?
...全文
69 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
caoguangxin 2002-03-29
  • 打赏
  • 举报
回复
在我的程序里已经设了MaxCount=20啊,不行。
而且按照BORLAND的帮助里的说明,MaxCount只是对返回的结果集的记录条数有影响啊,会影响到delete from table1吗?
我再试试。
OldMan0516 2002-03-29
  • 打赏
  • 举报
回复
增加一条:
AdoQuery1->MaxCount=20;
试试看,肯定OK
caoguangxin 2002-03-29
  • 打赏
  • 举报
回复
是和2000有关?不会吧?我试试。
OldMan0516 2002-03-29
  • 打赏
  • 举报
回复
因为在2000下,AdoQuery的默认缓存是20条,对应语句是
Set Rowcount 20
应该删除前设成0
caoguangxin 2002-03-29
  • 打赏
  • 举报
回复
哦,终于弄出来啦!
在SQL Server上用Profile仔细观察才发现倪端,原来是这样子的:
如果在ADOQuery里面设了MaxRecords,那么在执行ADOQuery的Open或是ExecSQL的时候,在SQL 2000里就会先向SQL Server发一个set rowcount xxx,然后再执行delete from table1,而这种情况在SQL 7.0的时候却不会发生,所以程序在SQL 7.0下面运行没事。
先谢谢大家啦,问题弄明白了就好,散分!
N_chow 2002-03-29
  • 打赏
  • 举报
回复
沒錯啊!!
TRUNCATE TABLE table1 是把table1里所有的資料全部都刪掉,速度比用DELETE快。
caoguangxin 2002-03-29
  • 打赏
  • 举报
回复
To N_Chow(一劍飄香++) :我不想把Table1整个干掉啊,结构还得留着,只删除记录。
To mmzxg(超级笨蛋):我设过时间,没有问题的,改时间也是一样的结果,我在SQL 7.0上是没有问题的哦!换了SQL 2000就不行了。
咦,有点苗头,我好象快查到了,再试试!
mmzxg 2002-03-29
  • 打赏
  • 举报
回复
应该是连接时间的问题,把时间设大一点,可能是连接数据库时时间太短了
N_chow 2002-03-29
  • 打赏
  • 举报
回复
我想可能是由於CommandTimeOut的原因。
你把SQL 語句改成
TRUNCATE TABLE table1
試試
OldMan0516 2002-03-29
  • 打赏
  • 举报
回复
写错了!
AdoQuery1->MaxCount=0;
他妈的

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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