use XMLDoc, XMLIntf; var XDoc:TXMLDocument;RootNode,NodeF,NodeC:IXMLNode;pb:TProgressBar; begin XDoc:=TXMLDocument.Create(Application); XDoc.LoadFromFile(Edit2.Text); XDoc.Active:=True; RootNode:=XDoc.DocumentElement; NodeF:=RootNode.ChildNodes.First; Get_Data('SELECT TOP 1 * FROM '+ComboBox1.Text); pb:=TProgressBar.Create(Self); pb.Parent:=GroupBox1; pb.Align:=alBottom; pb.Max:=RootNode.ChildNodes.Count; while NodeF<>nil do begin DM.Qry.Append; NodeC:=NodeF.ChildNodes.First; for i:=0 to DM.Qry.Fields.Count-1 do begin DM.Qry.Fields[i].AsString:=NodeC.Text; NodeC:=NodeC.NextSibling; end; DM.Qry.Post; pb.Position:=pb.Position+1; NodeF:=NodeF.NextSibling; end; FreeAndNil(pb); my_msg(m_success,'导入数据成功,记录数:'+IntToStr(RootNode.ChildNodes.Count)); FreeAndNil(XDoc); end;呵呵,以前写的,希望有所帮助
procedure TFGJ.bsSkinSpeedButton3Click(Sender: TObject); var tmpquery2:tadoquery; tmpfile:string; tmptable:tadotable; begin if application.MessageBox('导入答案将会清空以前的考生答案,确定是否继续?','提醒',MB_OKCANCEL or MB_ICONWARNING)=mrok then begin IF BSopen.Execute then try try begin tmpfile:=bsopen.FileName; tmptable:=tadotable.Create(self); tmpquery2:=tadoquery.Create (self); tmpquery2.Connection :=dm.connect ; tmptable.Connection :=dm.connect ; tmptable.TableName:='exam_answer'; with tmpquery2 do begin close; sql.Clear; sql.Add('delete * from exam_answer'); execsql; end; tmptable.LoadFromFile(tmpfile); tmptable.First; while not tmptable.Eof do begin with tmpquery2 do begin close; sql.Clear; sql.Add('insert into exam_answer(kh,xm,sj_id,sjts,tk_id,stbh,tx,daa,dab,dac,dad,dae,daf,tkda,df) values(:kh,:xm,:sj_id,:sjts,:tk_id,:stbh,:tx,:daa,:dab,:dac,:dad,:dae,:daf,:tkda,:df)'); parameters.ParamByName('kh').Value :=tmptable.fieldbyname('kh').AsString; parameters.ParamByName('xm').Value :=tmptable.fieldbyname('xm').AsString; parameters.ParamByName('sj_id').Value :=tmptable.fieldbyname('sj_id').AsString; parameters.ParamByName('tx').Value :=tmptable.fieldbyname('tx').AsString; parameters.ParamByName('sjts').Value :=tmptable.fieldbyname('sjts').AsString; parameters.ParamByName('tk_id').Value :=tmptable.fieldbyname('tk_id').AsString; parameters.ParamByName('stbh').Value :=tmptable.fieldbyname('stbh').AsString; parameters.ParamByName('daa').Value :=tmptable.fieldbyname('daa').AsBoolean; parameters.ParamByName('dab').Value :=tmptable.fieldbyname('dab').asboolean; parameters.ParamByName('dac').Value :=tmptable.fieldbyname('dac').AsBoolean ; parameters.ParamByName('dad').Value :=tmptable.fieldbyname('dad').AsBoolean ; parameters.ParamByName('dae').Value :=tmptable.fieldbyname('dae').AsBoolean ; parameters.ParamByName('daf').Value :=tmptable.fieldbyname('daf').AsBoolean ; parameters.ParamByName('tkda').Value :=tmptable.fieldbyname('tkda').AsString; parameters.ParamByName('df').Value :=tmptable.fieldbyname('df').AsString; execsql; end; tmptable.next; end; showmessage('导入完成,累死了...') end; finally tmptable.Free; tmpquery2.Free; end; except showmessage('导入未完成。:(') end; end; end;如果单纯的LOAD出来,它是不直接写到后台数据表的。分析下源码就知道它LOAD之前先CLOSE了数据表。只有一条一条增加到后台数据表了。
var XDoc:TXMLDocument;RootNode,NodeF,NodeC:IXMLNode;pb:TProgressBar;
begin
XDoc:=TXMLDocument.Create(Application);
XDoc.LoadFromFile(Edit2.Text);
XDoc.Active:=True;
RootNode:=XDoc.DocumentElement;
NodeF:=RootNode.ChildNodes.First;
Get_Data('SELECT TOP 1 * FROM '+ComboBox1.Text);
pb:=TProgressBar.Create(Self);
pb.Parent:=GroupBox1;
pb.Align:=alBottom;
pb.Max:=RootNode.ChildNodes.Count;
while NodeF<>nil do begin
DM.Qry.Append;
NodeC:=NodeF.ChildNodes.First;
for i:=0 to DM.Qry.Fields.Count-1 do begin
DM.Qry.Fields[i].AsString:=NodeC.Text;
NodeC:=NodeC.NextSibling;
end;
DM.Qry.Post;
pb.Position:=pb.Position+1;
NodeF:=NodeF.NextSibling;
end;
FreeAndNil(pb);
my_msg(m_success,'导入数据成功,记录数:'+IntToStr(RootNode.ChildNodes.Count));
FreeAndNil(XDoc);
end;呵呵,以前写的,希望有所帮助
var tmpquery2:tadoquery;
tmpfile:string;
tmptable:tadotable;
begin
if application.MessageBox('导入答案将会清空以前的考生答案,确定是否继续?','提醒',MB_OKCANCEL or MB_ICONWARNING)=mrok then begin
IF BSopen.Execute then
try
try
begin
tmpfile:=bsopen.FileName;
tmptable:=tadotable.Create(self);
tmpquery2:=tadoquery.Create (self);
tmpquery2.Connection :=dm.connect ;
tmptable.Connection :=dm.connect ;
tmptable.TableName:='exam_answer'; with tmpquery2 do
begin
close;
sql.Clear;
sql.Add('delete * from exam_answer');
execsql;
end;
tmptable.LoadFromFile(tmpfile); tmptable.First; while not tmptable.Eof do
begin
with tmpquery2 do
begin
close;
sql.Clear;
sql.Add('insert into exam_answer(kh,xm,sj_id,sjts,tk_id,stbh,tx,daa,dab,dac,dad,dae,daf,tkda,df) values(:kh,:xm,:sj_id,:sjts,:tk_id,:stbh,:tx,:daa,:dab,:dac,:dad,:dae,:daf,:tkda,:df)');
parameters.ParamByName('kh').Value :=tmptable.fieldbyname('kh').AsString;
parameters.ParamByName('xm').Value :=tmptable.fieldbyname('xm').AsString;
parameters.ParamByName('sj_id').Value :=tmptable.fieldbyname('sj_id').AsString;
parameters.ParamByName('tx').Value :=tmptable.fieldbyname('tx').AsString;
parameters.ParamByName('sjts').Value :=tmptable.fieldbyname('sjts').AsString;
parameters.ParamByName('tk_id').Value :=tmptable.fieldbyname('tk_id').AsString;
parameters.ParamByName('stbh').Value :=tmptable.fieldbyname('stbh').AsString;
parameters.ParamByName('daa').Value :=tmptable.fieldbyname('daa').AsBoolean;
parameters.ParamByName('dab').Value :=tmptable.fieldbyname('dab').asboolean;
parameters.ParamByName('dac').Value :=tmptable.fieldbyname('dac').AsBoolean ;
parameters.ParamByName('dad').Value :=tmptable.fieldbyname('dad').AsBoolean ;
parameters.ParamByName('dae').Value :=tmptable.fieldbyname('dae').AsBoolean ;
parameters.ParamByName('daf').Value :=tmptable.fieldbyname('daf').AsBoolean ;
parameters.ParamByName('tkda').Value :=tmptable.fieldbyname('tkda').AsString;
parameters.ParamByName('df').Value :=tmptable.fieldbyname('df').AsString;
execsql;
end;
tmptable.next;
end;
showmessage('导入完成,累死了...')
end;
finally
tmptable.Free;
tmpquery2.Free;
end;
except
showmessage('导入未完成。:(')
end;
end;
end;如果单纯的LOAD出来,它是不直接写到后台数据表的。分析下源码就知道它LOAD之前先CLOSE了数据表。只有一条一条增加到后台数据表了。