var tmpquery2:tadoquery;
tmpfile:string;
tmptable:tadotable;
begin
if applicationMessageBox( '导入答案将会清空以前的考生答案,确定是否继续? ', '提醒 ',MB_OKCANCEL or MB_ICONWARNING)=mrok then
begin
IF BSopenExecute then
try
try
begin
tmpfile:=bsopenFileName;
tmptable:=tadotableCreate(self);
tmpquery2:=tadoqueryCreate (self);
tmpquery2Connection :=dmconnect ;
tmptableConnection :=dmconnect ;
tmptableTableName:= 'exam_answer ';
with tmpquery2 do
begin
close;
sqlClear;
sqlAdd( 'delete from exam_answer ');
execsql;
end;
tmptableLoadFromFile(tmpfile);
tmptableFirst;
while not tmptableEof do
begin
with tmpquery2 do
begin
close;
sqlClear;
sqlAdd( '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) ');
parametersParamByName( 'kh ')Value :=tmptablefieldbyname( 'kh ')AsString;
parametersParamByName( 'xm ')Value :=tmptablefieldbyname( 'xm ')AsString;
parametersParamByName( 'sj_id ')Value :=tmptablefieldbyname( 'sj_id ')AsString;
parametersParamByName( 'tx ')Value :=tmptablefieldbyname( 'tx ')AsString;
parametersParamByName( 'sjts ')Value :=tmptablefieldbyname( 'sjts ')AsString;
parametersParamByName( 'tk_id ')Value :=tmptablefieldbyname( 'tk_id ')AsString;
parametersParamByName( 'stbh ')Value :=tmptablefieldbyname( 'stbh ')AsString;
parametersParamByName( 'daa ')Value :=tmptablefieldbyname( 'daa ')AsBoolean;
parametersParamByName( 'dab ')Value :=tmptablefieldbyname( 'dab ')asboolean;
parametersParamByName( 'dac ')Value :=tmptablefieldbyname( 'dac ')AsBoolean ;
parametersParamByName( 'dad ')Value :=tmptablefieldbyname( 'dad ')AsBoolean ;
parametersParamByName( 'dae ')Value :=tmptablefieldbyname( 'dae ')AsBoolean ;
parametersParamByName( 'daf ')Value :=tmptablefieldbyname( 'daf ')AsBoolean ;
parametersParamByName( 'tkda ')Value :=tmptablefieldbyname( 'tkda ')AsString;
parametersParamByName( 'df ')Value :=tmptablefieldbyname( 'df ')AsString;
execsql;
end;
tmptablenext;
end;
showmessage( '导入完成,累死了 ')
end;
finally
tmptableFree;
tmpquery2Free;
end;
except
showmessage( '导入未完成。:( ')
end;
end;
end;
如果单纯的LOAD出来,它是不直接写到后台数据表的。分析下源码就知道它LOAD之前先CLOSE了数据表。只有一条一条增加到后台数据表了。
XML文档的一个普通存在的问题是如何持久保存(Persist) XML文档。在一个关系数据库中存储XML文档是一个非常常用的方法,因为当前关系数据库的使用非常广泛。
将XML文档插入到数据库中不是简单的方法,这其中需要很多其它额外的考虑。现在我提供了一些技巧,你可以使用这些技巧在关系数据库中存储XML文档。
1、文档表:
一个最简单和容易的方法是,在一个具有单一文本域的数据库中建立一个表,由此你可以在表中存储XML数据。由于这些特定数据库和特定XML文档,这一文本域可以是一个二进制大型对象(BLOB,binary large object)。有些数据库需要存储的是大量的BLOB数据而不是文本。
这一方法的优点是,将数据存入表中变得相当简单,而且重新获得也同样很容易。这种文档表的管理也很方便。
这种方法的缺点在于你将可能无法进行一些有用的文本搜索,并且在放置特定文档时也会碰到困难,因为没有任何方法来识别表中的文档;
2、主键表:
下一个比较复杂的方法是使用一个主键表(keyed table)。这种方法与文档表非常相似,但此时你的表中包含两个域:一个唯一的主键和XML文档。使用这种方法,你既可以具有存储和获得整个XML文档的简洁性,也可以使用一些管理这些唯一主键的复杂 *** 作;
建立主键的一种通用方法是使用XML文档中的MD5求和检验。请记住如果你想在表中包括多份XML文档,这一方法远不足够。在这种情况下,你可以添加额外的key fields标识键列。
与文档表一样,主键表很容易执行,它可以在表中查找特定的文档。然而,与文档表一样,你仍然不能执行任何文本查询;
3、有限离散表:
这一方法更加复杂,但它给你带来更多的灵活性。使用有限离散表,你可以建立用于存储有限分散的XML信息的表,这是什么意思?请看以下的例子:
假设你具有一个顺序文档。在文档的根部(Root)有一个Order元素,这一元素包括CustomerInfo, ItemInfo, 以及hippingInfo元素。在数据库中,你可以建立一个OrderDoc表,表中包含一个ID域,一个CustomerInfoId域,一个ItemInfoId域,一个ShippingInfoId域。然而,你还可以建立一个CustomerInfoId表,一个ItemInfoId表,一个ShippingInfoId表。这些表都包含很多信息相关的各自的ID域,这些信息包括用户,选项,邮寄信息。在这一表中,还包含着其它额外的等级。比如,CustomerInfo表包含AddressInfo域,即从AddressInfo表中引用的入口。
这种方法的优点是,允许你更紧密地建立XML数据的模型。这种方法使得你进行数据的一些成熟的查询。它也使得数据的使用性更强,因为你不再需要XML分析器来读取数据。
不足之处是这种方法需要更多的精力来开发和维护。这意味着每一文档都需要解析成分离的部分,然后存储在数据库中。如果这一过程没有得以很好管理,有可能会丢失一些数据。而且,这也意味着,当从一个数据库中获得一个XML文档时,你不得不连接这些分散的部分。
以上就是关于如何将XML文件导入到数据库中去全部的内容,包括:如何将XML文件导入到数据库中去、关系数据库中如何存储xml数据、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)