用table控件写数据到数据库中,对大于1万、小于10万行的数据如何规划,对C/S服务器性能最好?请高手指点 ( 积分: 50 )

  • 主题发起人 主题发起人 仙乡醉客
  • 开始时间 开始时间

仙乡醉客

Unregistered / Unconfirmed
GUEST, unregistred user!
iNo:=1;
j:=1;
iAllCount:=500000;
try
database1.StartTransaction ;
table1.DatabaseName:=database1.DatabaseName ;
table1.CachedUpdates:=True;
table1.Active :=true;
while (j<=iAllCount) do
begin
iNo:=iNo+1;
table1.Append;
table1.FieldByName('N_NO').asinteger:=iNO;
.......
j:=j+1;
end;
//table1.Post;
table1.ApplyUpdates; //写入数据库
database1.Commit ;
except
on e:Exception do
begin
database1.Rollback ;
exit;
end;
end;
table1.CommitUpdates; //写入成功后,清除数据库缓存

问:1、设置了CachedUpdates:=True;对post来说失效了吗?必须用Commit提交?
2、对于50000数据,能不能每1000条写数据库一次,只要在50次中有一次失败,数据库回滚。用事务如何实现?
3、不用table控件还有其他更好的方法?
敬请高手指点。分不够可再加。
 
iNo:=1;
j:=1;
iAllCount:=500000;
try
database1.StartTransaction ;
table1.DatabaseName:=database1.DatabaseName ;
table1.CachedUpdates:=True;
table1.Active :=true;
while (j<=iAllCount) do
begin
iNo:=iNo+1;
table1.Append;
table1.FieldByName('N_NO').asinteger:=iNO;
.......
j:=j+1;
end;
//table1.Post;
table1.ApplyUpdates; //写入数据库
database1.Commit ;
except
on e:Exception do
begin
database1.Rollback ;
exit;
end;
end;
table1.CommitUpdates; //写入成功后,清除数据库缓存

问:1、设置了CachedUpdates:=True;对post来说失效了吗?必须用Commit提交?
2、对于50000数据,能不能每1000条写数据库一次,只要在50次中有一次失败,数据库回滚。用事务如何实现?
3、不用table控件还有其他更好的方法?
敬请高手指点。分不够可再加。
 
用 QUERY
iNo:=1;
j:=1;
iAllCount:=10000;
QUERY1.DatabaseName:=database1.DatabaseName ;
database1.StartTransaction ;
try
while (j<=iAllCount) do
begin
QUERY1.CLOSE;
QUERY1.SQL.CLEAR;
QUERY1.SQL.ADD('INSERT INTO TABLE(N_no,....) values('''+ino+''', ...');
query1.exec;
end;
database1.Commit ;
except
on e:Exception do
begin
database1.Rollback ;
exit;
end;
end;
大概就这样
 
对于50000数据,能不能每1000条写数据库一次,只要在50次中有一次失败,数据库回滚。用事务如何实现?------我需要这种实现!!!
 
iNo:=1;
j:=1;
iAllCount:=500000;
intflag := 1; //修改这里

try
database1.StartTransaction ;
table1.DatabaseName:=database1.DatabaseName ;
table1.CachedUpdates:=True;
table1.Active :=true;
while (j<=iAllCount and intflag <= 1000) do //修改这里
begin
intflag :=intflag + 1; //修改这里
iNo:=iNo+1;
table1.Append;
table1.FieldByName('N_NO').asinteger:=iNO;
.......
j:=j+1;

if (intflag > 1000) then //修改这里
intflag := 1; //修改这里
end;
//table1.Post;
table1.ApplyUpdates; //写入数据库
database1.Commit ;
except
on e:Exception do
begin
database1.Rollback ;
exit;
end;
end;
table1.CommitUpdates; //写入成功后,清除数据库缓存
 
天,数据这么多还用Table
DBExpress/Query
 
后退
顶部