快 快乐男生 Unregistered / Unconfirmed GUEST, unregistred user! 2008-08-08 #1 我用BatchMove,但是它要一个BDEDataSet,我用的TQuery1,我用select * from table,因为数据太大了,还没有打开,程序就死了...我用TAdoquery,当然也是一样的,急死我了,这类问题怎么处理呀!
我用BatchMove,但是它要一个BDEDataSet,我用的TQuery1,我用select * from table,因为数据太大了,还没有打开,程序就死了...我用TAdoquery,当然也是一样的,急死我了,这类问题怎么处理呀!
X xue5521 Unregistered / Unconfirmed GUEST, unregistred user! 2008-08-08 #3 一条一条复杂。不会的化去请教一下 asp 人员对数据库操作
L lngdtommy Unregistered / Unconfirmed GUEST, unregistred user! 2008-08-09 #4 可以这样,不一起复制。 将其分成N段来复制。 select top 10 from table 第二次复制20条,第三次复制30条。 这样你还可以加个进度条,来看复制了多少条记录了。
娃 娃娃 Unregistered / Unconfirmed GUEST, unregistred user! 2008-08-09 #7 不知道你的具体情况,不过通用的方法其实就是分段取,分段拷贝。 你这么大的表,肯定有一个唯一索引的吧,不管是流水号之类的字段,还是日期字段。你完全可以用个循环来分段取数据,再拷贝过去吧。 select * from XXX where 序列号 >= 0 and 序列号 <= 10000 select * from XXX where 序列号 >= 10001 and 序列号 <= 20000 ……
不知道你的具体情况,不过通用的方法其实就是分段取,分段拷贝。 你这么大的表,肯定有一个唯一索引的吧,不管是流水号之类的字段,还是日期字段。你完全可以用个循环来分段取数据,再拷贝过去吧。 select * from XXX where 序列号 >= 0 and 序列号 <= 10000 select * from XXX where 序列号 >= 10001 and 序列号 <= 20000 ……
E easykoala Unregistered / Unconfirmed GUEST, unregistred user! 2008-08-11 #11 不会用TBatchMove??看好了: 首先TQuery不用事先打开! 其次,可以采用BatchMove.CommitCount来控制多少个记录提交一次!!
C cking331 Unregistered / Unconfirmed GUEST, unregistred user! 2008-08-11 #12 分段取,分段拷贝, 最后用_ReocordSet来做,有效率点。
快 快乐男生 Unregistered / Unconfirmed GUEST, unregistred user! 2008-08-13 #13 try Database2 := TDatabase.create(nil); with Database2 do begin Params.Clear; Database2.AliasName := 'mytest'; Database2.DatabaseName := 'Database2'; Database2.Params.Add('USER NAME=system'); Database2.Params.Add('Password=system'); Database2.LoginPrompt := false; Database2.Connected := true; end; Form1.Query1.DatabaseName := 'Database2'; Form1.Table1.DatabaseName := 'Database2'; Form1.Query1.Active:= false; Form1.Query1.SQL.Clear; if i <= j then str :='select failure_id,srvtrace_id from t_cc_failure_claim where (failure_id >=' + inttostr(i) + ') and (failure_id < ' + inttostr(i+100) + ')' else str := 'select failure_id,srvtrace_id from t_cc_failure_claim where (failure_id >=' + inttostr(i) + ') and (failure_id <= ' + inttostr(j) + ')'; Form1.Query1.SQL.Add(str); Form1.Query1.Active := true; //Table1.Active := true; Form1.Table1.Open; BatchMove1 := TBatchMove.Create(nil); BatchMove1.Source := Form1.Query1; try BatchMove1.Source := form1.Query1; BatchMove1.Destination := Form1.Table1; BatchMove1.Mappings.Clear; BatchMove1.Mappings.Add('failure_id=failure_id') ; BatchMove1.Mappings.Add('srvtrace_id=srvtrace_id'); BatchMove1.Execute; //form1.Database2.CloseDataSets; finally BatchMove1.Free; end; l:= l+ Form1.Query1.recordcount; Form1.label2.Caption := inttostr(l) ; Form1.Query1.Close; Form1.Table1.Close; finally Database2.CloseDataSets; Database2.Close; Database2.Free; end; BatchMove有内存泄露问题,我数据多了就报内存不足,就是 Database2.Connected := true; 调出来的
try Database2 := TDatabase.create(nil); with Database2 do begin Params.Clear; Database2.AliasName := 'mytest'; Database2.DatabaseName := 'Database2'; Database2.Params.Add('USER NAME=system'); Database2.Params.Add('Password=system'); Database2.LoginPrompt := false; Database2.Connected := true; end; Form1.Query1.DatabaseName := 'Database2'; Form1.Table1.DatabaseName := 'Database2'; Form1.Query1.Active:= false; Form1.Query1.SQL.Clear; if i <= j then str :='select failure_id,srvtrace_id from t_cc_failure_claim where (failure_id >=' + inttostr(i) + ') and (failure_id < ' + inttostr(i+100) + ')' else str := 'select failure_id,srvtrace_id from t_cc_failure_claim where (failure_id >=' + inttostr(i) + ') and (failure_id <= ' + inttostr(j) + ')'; Form1.Query1.SQL.Add(str); Form1.Query1.Active := true; //Table1.Active := true; Form1.Table1.Open; BatchMove1 := TBatchMove.Create(nil); BatchMove1.Source := Form1.Query1; try BatchMove1.Source := form1.Query1; BatchMove1.Destination := Form1.Table1; BatchMove1.Mappings.Clear; BatchMove1.Mappings.Add('failure_id=failure_id') ; BatchMove1.Mappings.Add('srvtrace_id=srvtrace_id'); BatchMove1.Execute; //form1.Database2.CloseDataSets; finally BatchMove1.Free; end; l:= l+ Form1.Query1.recordcount; Form1.label2.Caption := inttostr(l) ; Form1.Query1.Close; Form1.Table1.Close; finally Database2.CloseDataSets; Database2.Close; Database2.Free; end; BatchMove有内存泄露问题,我数据多了就报内存不足,就是 Database2.Connected := true; 调出来的
B ball_cao Unregistered / Unconfirmed GUEST, unregistred user! 2008-08-14 #14 用ado连数据库 使用opendatasource语句解决 ps:bde不支持opendatasource语句