用ado组件tadodateset的方法savetofile、loadfromfile在本地备份?(50分)

  • 主题发起人 主题发起人 dana
  • 开始时间 开始时间
D

dana

Unregistered / Unconfirmed
GUEST, unregistred user!
具体如何写?为何这样会提示基adodatasetq不在编辑或者插入模式?
with data.ADODataSet1 do
begin
Active:=true;
open;
edit;
LoadFromFile('c:/SaveFile');
Post;
UpdateBatch;
end;
 
Post;和 UpdateBatch 同时用的问题,只能用一个吧
 
不是只用一个也一样。
 
打开ADODB.pas,找到TADOCUSTOMDATASET,看看它的LOADFROMFILE定义就明白了,它在
从文件中读取数据前,已经CLOSE过了,当然在POST的时候,不处在EDIT和INSERT状态了。
 
那我如何才能存入数据库,
只用这一句 LoadFromFile('c:/SaveFile');并没有存入数据库,
我这样写有错吗?ADODataSet1 还有其它特殊的属性吗?
保存到文件:
with data.ADODataSet1 do
begin
Active:=true;
open;
SaveToFile('c:/SaveFile', pfADTG);
UpdateBatch;
end;
从文件中读出:
with data.ADODataSet1 do
begin
Active:=true;
open;
edit;
LoadFromFile('c:/SaveFile');
Post;
UpdateBatch;
end;

end;
 
你的想法是好的,用一个临时文件做中介,来完成ADO的BATCHMOVE的功能。但是你忽略了
一个问题,LOADFORMFILE其实并不是在原来打开的数据集上进行操作,它其实应该等同于
你CLOSE了原有数据集,同时打开了另外一个数据集,这样当然无法POST进原有的数据集。
这相当于:
open;
edit;
close;
....读入XML文件的数据。
open;
post;
这样的过程应该很明白了吧。因此,用DELPHI自带的ADO控件恐怕无法单独实现你的要求。
现在确实可行的方法还是两个ADO控件对导来完成这项工作。
 
两个ADO控件对导是什么意思,能举个例子吗?谢谢!
 
你真舍得分,开了好几个问题。
比如一个ADO控件.loadfromfile('1.xml');
然后用另外一个ADOQUERY,
WHILE NOT ADOQUERY1.EOF DO
BEGIN
ADOQUERY2.CLOSE;ADOQUERY2.SQL.CLEAR;
ADOQUERY2.SQL.ADD('INSERT INTO TABLENAME1 VALUES('+ADOQUERY1.FIELDBYNAME('...').ASSTRING+...);
ADOQUERY2.EXESQL;
ADOQUERY1.NEXT;
END;
 
没办法,太急了。
能解释一下这句吗?
ADOQUERY2.SQL.ADD('INSERT INTO TABLENAME1 VALUES('+ADOQUERY1.FIELDBYNAME('...').ASSTRING+...);
 
我已知道insert的用法,可有何方法可全部增加过来,
因我有30多个字段,总不能一个个这样写吧。
 
如果你的两个表结构完全一样,可以这样写:
var sql:string;i:integer;
begin
sql:='insert into tablename1 values(';
for i:=0 to adoquery1.fieldcount-1 do begin
case adoquery1.fields.datatype of
ftstring,ftwidestring:sql:=sql+''''+adoquery1.fields.asstring+'''';
ftinteger,ftword:sql:=sql+adoquery1.fields.asinteger;
....
end;
end;
end;
另外,你用的是什么数据库啊,据说SQL2000全面支持XML,不过我只用过在URL中直接输入
SQL命令输出和读入XML报文,在程序里没有试过,你可以试一试。实在着急,你还是先用
两个ADO来处理吧。
 
多人接受答案了。
 
后退
顶部