function GetTaskTmpList(out pmsg, pResultFileName: string; pOption: integer; pTmpVersion: string):
boolean;
var
vResult, vFind: boolean;
vXMLFile: TXMLDocument;
vRoot, vChild: IXMLNode;
i, j: integer;
mTmpVersionList: TStringList;
function GetTmpVersionList(out pMsg: string; out pList: TStringList; pTmpVersionFile: string):
boolean;
var
vXMLTmpVersionFile: TXMLDocument;
vRoot, vChild: IXMLNode;
vRecord: TTmpVersion;
i: integer;
vResult: boolean;
begin
vResult := false;
if not assigned(pList) then pList := TStringList.Create;
pList.Clear;
if FileExists(pTmpVersionFile) then
begin
vXMLTmpVersionFile := TXMLDocument.Create('');
try
vXMLTmpVersionFile.LoadFromFile(pTmpVersionFile);
vXMLTmpVersionFile.Active := false;
vXMLTmpVersionFile.Active := true;
vRoot := vXMLTmpVersionFile.Node.ChildNodes.FindNode(XML_ROOT); //这里出错误!
for I := 0 to vRoot.ChildNodes.Count - 1 do
begin
vChild := vRoot.ChildNodes.Nodes[i];
vRecord := TTmpVersion.Create;
vRecord.TmpId := vChild.Attributes[XML_ROW_ID];
vRecord.TmpVersion := vChild.Attributes[XML_ROW_VERSION];
pList.AddObject(vRecord.TmpId, vRecord);
end;
vResult := true;
finally
vXMLTmpVersionFile.free;
end;
end;
Result := vResult;
end;
begin
vResult := false;
with Dm.tbTmpList do
begin
try
active := true;
First;
vXMLFile := TXMLDocument.Create('');
vXMLFile.Active := true;
vXMLFile.Encoding := 'UTF-8';
vRoot := vXMLFile.Node.AddChild(XML_ROOT, -1);
if pOption = 1 then
begin
mTmpVersionList := TStringList.Create;
if not GetTmpVersionList(pMsg, mTmpVersionList, pTmpVersion) then vResult := false;
end;
i := 0;
while not Eof do
begin
if pOption = 0 then
begin
//下载所有的最新的
inc(i);
vChild := vRoot.AddChild('Row' + inttostr(i), 0);
vChild.Attributes[XML_ROW_ID] := FieldByName('TmpId').AsString;
vChild.Attributes[XML_ROW_NAME] := FieldByName('TmpName').AsString;
vChild.Attributes[XML_ROW_SIZE] := FieldByName('TmpSize').AsString;
vChild.Attributes[XML_ROW_VERSION] := FieldByName('TmpVersion').AsString;
vChild.Attributes[XML_ROW_DESP] := FieldByName('TmpDesp').AsString;
vChild.Attributes[XML_ROW_UPDATETIME] := FieldByName('CrtrDate').AsString;
end;
if pOption = 1 then
begin
vFind := false;
for j := 0 to mTmpVersionList.Count - 1 do
begin
if (trim((mTmpVersionList.Objects[j] as TTmpVersion).TmpId) =
trim(FieldByName('TmpId').AsString)) then
begin
if strtoint(trim(FieldByName('TmpVersion').AsString)) <=
strtoint(trim((mTmpVersionList.Objects[j] as TTmpVersion).TmpId)) then
begin
vFind := true;
break;
end;
end;
end;
if not vFind then
begin
inc(i);
vChild := vRoot.AddChild('Row' + inttostr(i), 0);
vChild.Attributes[XML_ROW_ID] := FieldByName('TmpId').AsString;
vChild.Attributes[XML_ROW_NAME] := FieldByName('TmpName').AsString;
vChild.Attributes[XML_ROW_SIZE] := FieldByName('TmpSize').AsString;
vChild.Attributes[XML_ROW_VERSION] := FieldByName('TmpVersion').AsString;
vChild.Attributes[XML_ROW_DESP] := FieldByName('TmpDesp').AsString;
vChild.Attributes[XML_ROW_UPDATETIME] := FieldByName('CrtrDate').AsString;
end;
end;
next;
end;
if FileExists(mSystemConfig.DocDir + '\' + FILE_TEMPLIST) then
DeleteFile(mSystemConfig.DocDir + '\' + FILE_TEMPLIST);
vXMLFile.SaveToFile(mSystemConfig.DocDir + '\' + FILE_TEMPLIST);
pResultFileName := mSystemConfig.DocDir + '\' + FILE_TEMPLIST;
vResult := true;
except
on E: Exception do
pmsg := E.Message;
end;
end;
Result := vResult;
end;
boolean;
var
vResult, vFind: boolean;
vXMLFile: TXMLDocument;
vRoot, vChild: IXMLNode;
i, j: integer;
mTmpVersionList: TStringList;
function GetTmpVersionList(out pMsg: string; out pList: TStringList; pTmpVersionFile: string):
boolean;
var
vXMLTmpVersionFile: TXMLDocument;
vRoot, vChild: IXMLNode;
vRecord: TTmpVersion;
i: integer;
vResult: boolean;
begin
vResult := false;
if not assigned(pList) then pList := TStringList.Create;
pList.Clear;
if FileExists(pTmpVersionFile) then
begin
vXMLTmpVersionFile := TXMLDocument.Create('');
try
vXMLTmpVersionFile.LoadFromFile(pTmpVersionFile);
vXMLTmpVersionFile.Active := false;
vXMLTmpVersionFile.Active := true;
vRoot := vXMLTmpVersionFile.Node.ChildNodes.FindNode(XML_ROOT); //这里出错误!
for I := 0 to vRoot.ChildNodes.Count - 1 do
begin
vChild := vRoot.ChildNodes.Nodes[i];
vRecord := TTmpVersion.Create;
vRecord.TmpId := vChild.Attributes[XML_ROW_ID];
vRecord.TmpVersion := vChild.Attributes[XML_ROW_VERSION];
pList.AddObject(vRecord.TmpId, vRecord);
end;
vResult := true;
finally
vXMLTmpVersionFile.free;
end;
end;
Result := vResult;
end;
begin
vResult := false;
with Dm.tbTmpList do
begin
try
active := true;
First;
vXMLFile := TXMLDocument.Create('');
vXMLFile.Active := true;
vXMLFile.Encoding := 'UTF-8';
vRoot := vXMLFile.Node.AddChild(XML_ROOT, -1);
if pOption = 1 then
begin
mTmpVersionList := TStringList.Create;
if not GetTmpVersionList(pMsg, mTmpVersionList, pTmpVersion) then vResult := false;
end;
i := 0;
while not Eof do
begin
if pOption = 0 then
begin
//下载所有的最新的
inc(i);
vChild := vRoot.AddChild('Row' + inttostr(i), 0);
vChild.Attributes[XML_ROW_ID] := FieldByName('TmpId').AsString;
vChild.Attributes[XML_ROW_NAME] := FieldByName('TmpName').AsString;
vChild.Attributes[XML_ROW_SIZE] := FieldByName('TmpSize').AsString;
vChild.Attributes[XML_ROW_VERSION] := FieldByName('TmpVersion').AsString;
vChild.Attributes[XML_ROW_DESP] := FieldByName('TmpDesp').AsString;
vChild.Attributes[XML_ROW_UPDATETIME] := FieldByName('CrtrDate').AsString;
end;
if pOption = 1 then
begin
vFind := false;
for j := 0 to mTmpVersionList.Count - 1 do
begin
if (trim((mTmpVersionList.Objects[j] as TTmpVersion).TmpId) =
trim(FieldByName('TmpId').AsString)) then
begin
if strtoint(trim(FieldByName('TmpVersion').AsString)) <=
strtoint(trim((mTmpVersionList.Objects[j] as TTmpVersion).TmpId)) then
begin
vFind := true;
break;
end;
end;
end;
if not vFind then
begin
inc(i);
vChild := vRoot.AddChild('Row' + inttostr(i), 0);
vChild.Attributes[XML_ROW_ID] := FieldByName('TmpId').AsString;
vChild.Attributes[XML_ROW_NAME] := FieldByName('TmpName').AsString;
vChild.Attributes[XML_ROW_SIZE] := FieldByName('TmpSize').AsString;
vChild.Attributes[XML_ROW_VERSION] := FieldByName('TmpVersion').AsString;
vChild.Attributes[XML_ROW_DESP] := FieldByName('TmpDesp').AsString;
vChild.Attributes[XML_ROW_UPDATETIME] := FieldByName('CrtrDate').AsString;
end;
end;
next;
end;
if FileExists(mSystemConfig.DocDir + '\' + FILE_TEMPLIST) then
DeleteFile(mSystemConfig.DocDir + '\' + FILE_TEMPLIST);
vXMLFile.SaveToFile(mSystemConfig.DocDir + '\' + FILE_TEMPLIST);
pResultFileName := mSystemConfig.DocDir + '\' + FILE_TEMPLIST;
vResult := true;
except
on E: Exception do
pmsg := E.Message;
end;
end;
Result := vResult;
end;
解决方案 »
- 关于用DBEXPRESS 组件开发一对多(主/从)关系头疼的问题
- 如何更换treeview中的图标呀?
- Delphi 8.0中出现的新问题??菜鸟提问!高手请回答!!
- ADODATASET查询结果返回值不相同的问题?
- ★★★★ 请问怎么解读eml格式 ★★★★
- tiff格式文件2bmp文件
- 用ADO连接数据库,如何在一个form里实现两个表的关联?
- 为什么我用的clientdataset1过滤技术无法过滤中文字,而数字或英文却可以,我该如何过滤中文字,我一定要使用clientdataset的过滤技术
- 大家帮宝宝取名,姓左,不知道男孩女孩.
- 瞧一瞧,看一看刚出锅的问题
- 集团资金管理系统.
- 很久没来了,不过遇到问题还是想到来这里,请高手们帮帮忙啊!
我已经设了断点:里面标识://这里出错误!
那句,主要原因我分析是内存里同时存在两个TXMLDocument实例,虽然名字不同,但是还是有问题,搞不明白