ADODataset + XML 如何将XML中数据保存如本地数据库 ( 积分: 100 )

  • 主题发起人 主题发起人 天堂鸟6420
  • 开始时间 开始时间

天堂鸟6420

Unregistered / Unconfirmed
GUEST, unregistred user!
服务器将要更新的数据从数据库(a1)中查询出来并通过ADODataset.saveToFile('文件名',pfXML)保存,客户端下载此XML文件并通过ADODataset.loadformfile('文件名')打开并提交到本地数据库(a2),数据库a1,a2完全结构完全相同,没有自增列
我在同一个数据库中提交(a1-a1)成功,但是在不同数据库(a1-a2)中提交无任何错误提示,也没有保存到数据库中去
 
服务器将要更新的数据从数据库(a1)中查询出来并通过ADODataset.saveToFile('文件名',pfXML)保存,客户端下载此XML文件并通过ADODataset.loadformfile('文件名')打开并提交到本地数据库(a2),数据库a1,a2完全结构完全相同,没有自增列
我在同一个数据库中提交(a1-a1)成功,但是在不同数据库(a1-a2)中提交无任何错误提示,也没有保存到数据库中去
 
还有我是用ADODataset.updatebach(arAll)做保存的
请高手赐教!!!!
是不是还有什么东西没有做?
 
是不行,因为在LoadFromFile的时候原有连接已经关闭了,你做的update应该是处理到了内存中,所以还是sql循环添加吧
 
贴一段自己写的代码,注意数据库的关键字冲突
procedure DisposeData(_ADOTem, _ADOdata: TADOQuery;
FileName: string);
var i, j, StartCol: integer;
begin
if _ADOTem.RecordCount < 1 then
Exit;
_ADOdata.Close;
//TMP11 为事先写好的SQL select 唯一标识 AS fNo, * from table
if Pos('TMP11', FileName) <> 0 then
_ADOData.SQL.Text := TMP11;
_ADOdata.Open;
_ADOTem.First;
if pos('AS', _ADOData.SQL.Text) <> 0 then
StartCol := 1
else
StartCol := 0;
while not _ADOTem.Eofdo
begin
if _ADOdata.Locate('fNo', _ADOTem.FieldByName('fNo').AsString, [])
then
_ADOdata.Edit
else
_ADOdata.Append;
try
for i := StartCol to _ADOTem.FieldCount - 1do
for J := StartCol to _ADOTem.FieldCount - 1do
if _ADOdata.Fields.FieldName = _ADOTem.Fields[j].FieldName then
if _ADOdata.Fields.Value = _ADOTem.Fields[j].Value then
break
else
begin
_ADOdata.Fields.Value := _ADOTem.Fields[j].Value;
break;
end;
_ADOdata.Post;
except
if debughook <> 0 then
application.MessageBox(pchar(_ADOData.SQL.Text), '错误提示', MB_OK);
//application.MessageBox(pchar(_ADOData.Fields.FieldName + '////' + _ADOTem.Fields[j].FieldName), '', MB_OK);
end;
_ADOTem.Next;
end;
_ADOData.Close;
_ADOTem.Close;
//删除成功后的XML
deletefile(ExtractFilePath(Application.ExeName) + 'data/' + FileName);
end;
 
接受答案了.
 
后退
顶部