ADOQuery批量添加数据问题,在线急等!!!!

五维思考 2005-01-05 08:30:13
ADOQuery从数据库中查询的结果,使用ADOQuery1.SaveToFile('C:\ClubID.lm')保存成一个文件,然后准备把ClubID.lm导入到另一个相同结构的数据库中,程序写到ADOQuery1.LoadFromFile('C:\ClubID.lm');就不会再往下写了,如何把这些记录批量添加到数据库中呢?
...全文
471 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
海天候 2005-01-07
  • 打赏
  • 举报
回复
楼上对.
lyguo 2005-01-07
  • 打赏
  • 举报
回复
学习
dzt1 2005-01-07
  • 打赏
  • 举报
回复
if not ADOConnection1.InTransaction then
ADOConnection.BeginTrans;//打开事务
adoquery.insert;//这里可以反反复复的增加数据
adoquery.filedbyname().as**:=**;
adoquery.post;//此时的数据只是被提交到了数据集

ADOConnection.CommitTrans;//事务提交 //数据真正的提交到数据库//数据的批量提交

ADOConnection.RollbackTrans;//事务回滚//取消后不让数据集的数据存入数据库
Changefish 2005-01-07
  • 打赏
  • 举报
回复
我知道的方法是 用一个adoquery 一条条记录插进去
llllay 2005-01-07
  • 打赏
  • 举报
回复
关注ing
chenchangfu 2005-01-07
  • 打赏
  • 举报
回复
关注
hsmserver 2005-01-07
  • 打赏
  • 举报
回复
ADOQuery1.LoadFromFile('C:\ClubID.lm');只将数据保存到结果集
将结果集的数据保存到数据库,你可以再建一个TABLE之类的
然后循环插入就行了
以前好象是这么写的,没试过什么特别好的方法,但可以实现
var
i:integer;
adoquery.first;
while adoquery.eof do begin
with adotable do
begin
Append;
for i:=0 to adoquery.FieldCount-1 do
fields[i].value:=adoquery.fields[i].value;
post;
end;
next;
end;
ququd 2005-01-07
  • 打赏
  • 举报
回复
{ 说明:
建一个测试表Test1,
字段 类型 主键
id int PK
name char(20)

建立一个TADOConnection对象名为ADOCnn;
属性设置如下
ADOCnn.Mode := cmWrite; //只写
ADOCnn.ADOCnn.CursorLocation := clUseClient; //客户端游标
}
procedure TForm1.BatchTest;
var
intId, I: integer;
begin
with TADOQuery.Create(nil) do
try
Connection := ADOCnn;
LockType := ltBatchOptimistic; //批量更新
CursorType := ctOpenForwardOnly; //前向游标
SQL.Text := 'select id,name from test1';
Open;
intId := GetNextId; //取得下一个编号
if not ADOCnn.InTransaction then
ADOCnn.BeginTrans;
try
//测试插入数据
for I := intId to intId + 10000 do
AppendRecord([I,'ququ']);
//批量更新,有几个参数,查查帮助
UpdateBatch();
ADOCnn.CommitTrans;
except
on E: Exception do
begin
CancelBatch(); //取消更新
ADOCnn.RollbackTrans;
if Application.MessageBox('批量导入失败,是否查看详细信息?',
'失败', MB_YESNO + MB_ICONERROR) = IDYES then
Application.MessageBox(PChar(E.Message), '详细错误信息', MB_OK + MB_ICONERROR);
exit;
end;
end;
finally
Free;
end;
end;

//
function TForm1.GetNextId: integer;
begin
with TADOQuery.Create(nil) do
try
Connection := ADOCnn;
SQL.Text := 'select max(id) maxid from test1';
Open;
if IsEmpty then
Result := 0
else
Result := FieldByName('maxid').AsInteger;
Inc(Result);
finally
Free;
end;
end;


wyf99 2005-01-06
  • 打赏
  • 举报
回复
好东西,学习
何鲁青 2005-01-06
  • 打赏
  • 举报
回复
这个问题,值得关注,顶
zglwxb 2005-01-06
  • 打赏
  • 举报
回复
关注
五维思考 2005-01-06
  • 打赏
  • 举报
回复
Gabriel827(航程) ,你说的没错,确实不是一个数据库,但结构相同,是同一个软件在好多机器上运行,这些机器还不在一个网上,我的机器需要把别人的数据库中一部分数据导到我的机器里进行汇总(当然,不是简单的汇总),如果把数据库传过来又太大,所以才用TADOQuery查询出必要的数据保存为一个文件。
zsp0010 2005-01-06
  • 打赏
  • 举报
回复
来学习的!!
liangkove 2005-01-05
  • 打赏
  • 举报
回复
学习一下
Gabriel827 2005-01-05
  • 打赏
  • 举报
回复
呵呵,说说你为什么要倒入到文件中,是不同的数据库吗?如果是同一个数据库为什么不用insert into .....Select.....或者用Select ...into语句都可以实现成批量添加,这个在access也支持
dongfanghui 2005-01-05
  • 打赏
  • 举报
回复
关注中,帮你顶一下.我见过的都是一条一条加的.
ACCESS好象也支持的.
五维思考 2005-01-05
  • 打赏
  • 举报
回复
Gabriel827(航程) ,你的办法我想过,行是行,但不是好办法,我想要一个批量添加的,这样既快又减轻了数据库的压力,最好在发生问题的时候还能回滚,不知道ACCESS支不支持?
Gabriel827 2005-01-05
  • 打赏
  • 举报
回复
是否可以在利用一个ADOQuery来与表连接,然后在逐条记录赋值.方法虽然拙了一点.但也可以勉强对付!
angle097113 2005-01-05
  • 打赏
  • 举报
回复
关注...
学习...
postren 2005-01-05
  • 打赏
  • 举报
回复
关注中...

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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