谢谢:)
解决方案 »
- delphi odac oracle11g问题
- 为什么不会排序呢?我在form加载时用
- 找人帮忙写一个架设socks代理服务器的模块,支付宝
- 主从表问题
- 请问:我想让我的程序加个功能
- 请问一个有关窗体的问题???
- 跪地求助
- 关于用TQuery控件调用存储过程遇到的问题,请高手指教,谢谢!!(本人在线等待)
- TabControlChanging有什么办法知道将要改变到哪个tab ?
- 如何在DELPHI中用代码打开一个DOS命令,如DIR C:\等,然后取得返回的结果!!!!!!!!!!!!!!!!!!!!!!
- 现有一个dll在程序根目录\mydll\in目录下,请问如何静态调用?
- cxgrid问题,请指教!
uses
classes, ComObj, DB, dxmdaset, SysUtils, ComCtrls;
type
TXMLAnalyse = class
private
oDoc: OleVariant;
FBillNo: string;
public
constructor create(xml: widestring);
destructor Destroy; override;
function Execute: TStringList;
property BillNo: string read FBillNo;
end;
implementation{ TAnalyse }constructor TXMLAnalyse.create(xml: widestring);
begin
oDoc := CreateOleObject(MSXMLDOC);
oDoc.LoadXML(xml);
end;destructor TXMLAnalyse.Destroy;
begin inherited;
end;function TXMLAnalyse.Execute: TStringList;
var
oNode: OleVariant;
oFieldsNode, oRowsNode: OleVariant;
oFieldItem, oRowItem: OleVariant;
strTableName: string;
strFieldName: string;
strValue: string;
strTmp: string;
strDel: string;
strBillNo: string;
strInsertSQL: string;
strList: TStringList;
strAccount: string;
j, i: integer;
begin strList := TStringList.create; oNode := oDoc.documentElement;
//得到表名
strTableName := oNode.getAttribute('Name');
//得到字段名
i := pos(':', strTableName);
if i > 1 then
begin
strAccount := copy(strTableName, i + 1, length(strTableName) - i);
strTableName := copy(strTableName, 0, i - 1);
end;
if oNode.childNodes(0).nodeName <> 'Fields' then exit;
if oNode.childNodes(1).nodeName <> 'Rows' then exit; oFieldsNode := oNode.childNodes(0);
oRowsNode := oNode.childNodes(1); for j := 0 to oFieldsNode.childNodes.length - 1 do
begin
oFieldItem := oFieldsNode.childNodes(j);
strTmp := oFieldItem.getAttribute('fName');
strFieldName := strFieldName + strTmp + ',';
end;
strFieldName := copy(strFieldName, 1, length(strFieldName) - 1); for j := 0 to oRowsNode.childNodes.length - 1 do
begin
oRowItem := oRowsNode.childNodes(j);
strValue := ''; for i := 0 to oRowItem.Attributes.length - 1 do
begin
strValue := strValue + '''' + oRowItem.Attributes(i).text + '''' + ','; if UpperCase(oRowItem.Attributes(i).name) = 'BILLNO' then
strBillNo := oRowItem.Attributes(i).text;
end;
strValue := copy(strValue, 1, length(strValue) - 1);
strInsertSQL := 'INSERT INTO ' + strTableName + '(' + strFieldName + ')';
strInsertSQL := strInsertSQL + ' VALUES(' + strValue + ')'; strList.Add(strInsertSQL); end;
if trim(strBillNo) <> '' then
begin
strDel := 'DELETE ' + strTableName + ' WHERE BillNo=''' + strBillNo + '''';
if UpperCase(trim(strTableName)) = 'BILLMARK_TAB' then
begin strDel := strDel + ' and Account=' + '''' + strAccount + '''';
end;
strList.Insert(0, strDel);
end;
Result := strList;
FBillNo := strBillNo;end;end.