在delphi中如何往数据库中插入多条记录

我想从一个表中select出符合条件的记录,想将这些记录插入到另外一张数据表中,希望高手指点啊... 我想从一个表中select 出符合条件的记录,想将这些记录插入到另外一张数据表中,希望高手指点啊 展开
 我来答
大一统时代
2010-05-18
知道答主
回答量:2
采纳率:0%
帮助的人:0
展开全部
是同一个数据库的话建议 写后台存储过程 delphi前台调用 可以用adoquery
或者adostoreproc ;如果是不同数据库需要用到两个adoquery,一个select通过调用open方法,一个insert 调用execsql方法,看例子从dbf文件到oracle数据库:function DbfToOracle(filename:string;orasid:string;uid:string;pass:string):Boolean;stdcall;
var
i:Integer;
tablename:string;
conora:TADOConnection;
aquerydbf:Tadoquery;
aqueryora:TADOQuery;
begin
if not FileExists(filename) then
begin
MessageBox(0,'Dbf File Not Found!','Error',MB_OK);
Result := False;
exit;
end
else
tablename := ExtractFileName(ChangeFileExt(filename,''));
conora := TADOConnection.Create(nil);
aquerydbf := Tadoquery.create(nil);
aqueryora := Tadoquery.create(nil);
try
aquerydbf.ConnectionString := 'Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="sourcetype=dbf;driver='
+'{Microsoft Visual Foxpro Driver};sourcedb='+extractfilepath(filename)+';"';
aquerydbf.SQL.Clear;
aquerydbf.SQL.Add('select * from '+tablename);
aquerydbf.Open;
aquerydbf.First; tablename := 'T'+tablename; //表名加了个T字符,重新起得名 conora.ConnectionString := 'Provider=OraOLEDB.Oracle.1;Password='+pass+';Persist Security Info=True;User ID='
+uid+';Data Source='+orasid+';Extended Properties=''PLSQLRSet=1''';
conora.LoginPrompt := False;
conora.Open;
aqueryora.Connection := conora;
aqueryora.SQL.Clear;
aqueryora.SQL.Add('select * from all_tables where owner=upper('''+uid+''') and table_name=upper('''+tablename+''')');
aqueryora.Open;
if aqueryora.RecordCount=0 then
begin
aqueryora.SQL.Clear;
aqueryora.SQL.Add('call sp_init_enviroment('''+uid+''')');
aqueryora.ExecSQL;
end;
aqueryora.SQL.Clear;
aqueryora.SQL.Add('select * from '+tablename);
aqueryora.Open;
conora.BeginTrans; while not aquerydbf.Eof do
begin
aqueryora.Insert;
for i := 0 to aquerydbf.FieldCount-1 do
begin
aqueryora.Fields[i].Value := aquerydbf.Fields[i].Value;
end;
aqueryora.Post;
aquerydbf.Next;
end;
try
conora.CommitTrans; except on e:Exception do
conora.RollbackTrans; end;
except on e:Exception do
begin
MessageBox(0,PAnsiChar(e.Message),'Open Database Error!',MB_OK);
aquerydbf.Free;
aqueryora.Free;
conora.Free;
Result:=False;
Exit;
end;
end; aquerydbf.Free;
aqueryora.Free;
conora.Free;
Result:=True;
end;

这是原来写过的一个,不明白可以再问
shiwangxu
2010-05-21 · 超过25用户采纳过TA的回答
知道答主
回答量:196
采纳率:0%
帮助的人:68.7万
展开全部
ADOQ_save.Connection.BeginTrans;//开始事务
try
ADOQ_save.Close;
ADOQ_save.SQL.Clear;
for i := 1 to ADOQ_cx.DateSource.DataSet.RecordCount do
begin
strSql := 'insert into TABLE_NAME(字段名 '+
) values ( '#39 +
ADOQ_cx.DateSource.DataSet.FieldByName('字段名').value
+ #39' ) ';
ADOQ_save.SQL.Add(strSql);
end;
end;
ADOQ_save.ExecSQL;
ADOQ_save.Connection.CommitTrans;//提交事务
except
begin
ADOQ_save.Connection.RollbackTrans;//回滚事务
exit;
end;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bbc032
2010-05-18 · TA获得超过112个赞
知道小有建树答主
回答量:166
采纳率:0%
帮助的人:160万
展开全部
1)用SELECT * INTO Table_name [IN externaldatabase] FROM A语句。可以在delphi中执行。
2)在delphi中,循环运行 insert into ...语句。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wsqrock
2010-05-18 · 超过73用户采纳过TA的回答
知道小有建树答主
回答量:229
采纳率:0%
帮助的人:191万
展开全部
insert into 表1(字段1,字段2...) select 匹配字段1,匹配字段2... where 查询字段=查询条件
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gladiolus521
2010-05-20 · 超过35用户采纳过TA的回答
知道答主
回答量:205
采纳率:0%
帮助的人:83.1万
展开全部
Select * into 表B(字段1,字段2...) from 表A where 查询字段=查询条件
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式