在delphi中如何往数据库中插入多条记录
我想从一个表中select出符合条件的记录,想将这些记录插入到另外一张数据表中,希望高手指点啊...
我想从一个表中select 出符合条件的记录,想将这些记录插入到另外一张数据表中,希望高手指点啊
展开
6个回答
展开全部
是同一个数据库的话建议 写后台存储过程 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;
这是原来写过的一个,不明白可以再问
或者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;
这是原来写过的一个,不明白可以再问
展开全部
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;
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;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1)用SELECT * INTO Table_name [IN externaldatabase] FROM A语句。可以在delphi中执行。
2)在delphi中,循环运行 insert into ...语句。
2)在delphi中,循环运行 insert into ...语句。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
insert into 表1(字段1,字段2...) select 匹配字段1,匹配字段2... where 查询字段=查询条件
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Select * into 表B(字段1,字段2...) from 表A where 查询字段=查询条件
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询