Delphi 中 Ado 的“败笔”!求教!(200分)

  • 主题发起人 主题发起人 随风飘马
  • 开始时间 开始时间

随风飘马

Unregistered / Unconfirmed
GUEST, unregistred user!
各位:
大家好,
我在 Delphi 中使用ADO 控件 ,但我要绕过本身的Recordset 直接调用 Com 口的
Recordset ,我在增加一条记录时出现问题:
Adodataset1.Recordset.addNew(Fieldlist:OleVariant,Value :OleVariant)
我的想法是
ads.Recordset.addNew;
(这里行不通!)!! (但VB 却简单的多)
ads.Recordset.Fields[0].Value:='01';
ads.Recordset.Fields[1].Value:='2000';
ads.Recordset.Fields[2].Value:='2001' ;
ads.Recordset.Fields[3].Value:='p' ;
ads.Recordset.UpdateBatch(adAffectAll) ;
这个 OleVariant 到底怎么来用?
这中的Delete ,edit, 都好用 这个 addNew 怎就这么麻烦?
这样能加快数据的传输(确实!)
还有什么方法来加快速度吗???
我现在的程序要跑 6 个小时!!(做文件到数据库的传输)
相反方向的 却只要20 分钟!
 
Adodataset1.insert;
Adodataset1.fields[0].asstring := '1';
Adodataset1.Post;
不行吗?
 
确实是可以的!
但是这样的话 速度就慢了很多,因为我有 几十万条记录要传的。
我这样就不用到“缓存”中去更新了。
 
可以考虑用SQL 把数据作为参数,会块很多
什么意思:
我这样就不用到“缓存”中去更新了
 
Ado 取的数据放在 缓存中的,有它的属性:Cachesize 的, 从adodataset.Recordset.
之类的去就绕过了这里,你看看 ADOInt.pas 中的recordset15 的方法和属性就明白了。

我就要在ado 的上面一层去进行数据的传输的。
sql 要用参数传递快一点的,不过还是有限。
要用这个 ado.recordset.addnew () 就能快很多的。
可我不知道这个 OLeVariant 怎么用的
 
ADO好像是慢了点,有两个办法可以解决:
1:把table或query的cursortype设为server.
2:在插入记录前begin
trans
插入后committrans
对付几千条还OK,不过几十万条记录恐怕就.....
 
Recordset.AddNew(EmptyParam, EmptyParam);
 
var
a,b: variant;
begin
var
A: Variant;
begin
A := VarArrayCreate([1, 3], varVariant);
A[1] := 'firstfieldname';
A[2] := 'secondfieldname';
A[3] := 'thirdfieldname';
b := VarArrayCreate([1, 3], varVariant);
b[1] := 1;
b[2] := 'secondfieldname';
b[3] := 4;
Adodataset1.Recordset.addNew(a,b)
Adodataset1.Recordset.updatebatch(adAffectAll);
end;
 
接受答案了.
 
后退
顶部