如果你只是要保存一个备份,其实还是下一个VCLZIP的控件,把数据库压缩成ZIP格式备份的好,块头小许多,能达10%。 如果真的要写到另一个ACCESS中,则涉及到异库存取的问题,对于ACCESS而言,可以用链接表的方式来实现:把目标ACCESS库中的作为链接表链入源库中,那样就可以把目标表当成源库中的表来操作。只要写一个insert into 备份表 select 源表 的SQL就可以了。备份完成后可以删除链接表,也可以就放着下一次备份用。下一次备份可以先删除原备份表的中的记录再insert to 新数据可以了。建链接表需要adox的支持,最好是要在运行的机器上装mdac2.6。 需要源码可跟贴要,只是我现在不大来了。要么发个短消息给我留个信箱我找到源码后发你。
又来迟了,除了上面的方法,还可以预先对MDB文件压缩,再ZIP unit AccessTools;interfaceuses Sysutils, ComObj, Dialogs, Variants;function DaoActive(var DaoObject:OleVariant):Boolean; function CompactMDB(const FileName:string):Boolean; function RepairMDB(const FileName:string):Boolean;implementationfunction DaoActive(var DaoObject:OleVariant):Boolean; begin Result:=False; try DaoObject:=GetActiveOleObject('DAO.DBEngine.36'); Result:=True; except try DaoObject:=CreateOleObject('DAO.DBEngine.36'); Result:=True; except DaoObject:=Null; end; end; end;//Compact Access MDB file function CompactMDB(const FileName:string):Boolean; var db:OleVariant; TempFile:string; begin Result:=False; try if not DaoActive(db) then Exit; try TempFile:=ExtractFilePath(FileName)+'~msaTemp.mdb'; db.CompactDatabase(FileName,TempFile); DeleteFile(FileName); RenameFile(TempFile,FileName); Result:=True; except on E:EOleException do ShowMessage(E.Message); end finally db:=Unassigned; end; end;// Repaie Access MDB file function RepairMDB(const FileName:string):Boolean; var db:OleVariant; begin Result:=False; try if not DaoActive(db) then Exit; try db.RepairDatabase(FileName); Result:=True; except on E:EOleException do ShowMessage(E.Message); end finally db:=Unassigned; end; end;end.
如果真的要写到另一个ACCESS中,则涉及到异库存取的问题,对于ACCESS而言,可以用链接表的方式来实现:把目标ACCESS库中的作为链接表链入源库中,那样就可以把目标表当成源库中的表来操作。只要写一个insert into 备份表 select 源表 的SQL就可以了。备份完成后可以删除链接表,也可以就放着下一次备份用。下一次备份可以先删除原备份表的中的记录再insert to 新数据可以了。建链接表需要adox的支持,最好是要在运行的机器上装mdac2.6。
需要源码可跟贴要,只是我现在不大来了。要么发个短消息给我留个信箱我找到源码后发你。
unit AccessTools;interfaceuses Sysutils, ComObj, Dialogs, Variants;function DaoActive(var DaoObject:OleVariant):Boolean;
function CompactMDB(const FileName:string):Boolean;
function RepairMDB(const FileName:string):Boolean;implementationfunction DaoActive(var DaoObject:OleVariant):Boolean;
begin
Result:=False;
try
DaoObject:=GetActiveOleObject('DAO.DBEngine.36');
Result:=True;
except
try
DaoObject:=CreateOleObject('DAO.DBEngine.36');
Result:=True;
except
DaoObject:=Null;
end;
end;
end;//Compact Access MDB file
function CompactMDB(const FileName:string):Boolean;
var
db:OleVariant;
TempFile:string;
begin
Result:=False;
try
if not DaoActive(db) then
Exit;
try
TempFile:=ExtractFilePath(FileName)+'~msaTemp.mdb';
db.CompactDatabase(FileName,TempFile);
DeleteFile(FileName);
RenameFile(TempFile,FileName);
Result:=True;
except
on E:EOleException do
ShowMessage(E.Message);
end
finally
db:=Unassigned;
end;
end;// Repaie Access MDB file
function RepairMDB(const FileName:string):Boolean;
var
db:OleVariant;
begin
Result:=False;
try
if not DaoActive(db) then
Exit;
try
db.RepairDatabase(FileName);
Result:=True;
except
on E:EOleException do
ShowMessage(E.Message);
end
finally
db:=Unassigned;
end;
end;end.
占用你的时间,真是……太感谢了。
[email protected]另:: ly_liuyang(Liu Yang) 您也没来晚。表示感谢。
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('insert into 连接表 select 源表');
adoquery1.Open;才出现了“没有默认值”的问题。不好意思,我想问一下,我的这段代码是不是有很大的问题。
然后对保存后的文件你在用compactdatabase整理或ziplib来压缩成winzip都可以;
还原copy回来覆盖就可以了;
没有默认值是因为你要保存数据的数据表中的字段不能为空,而你又没给具体的值;
不能为空的字段需要默认值的,字符穿类型的为NULL,数字类型为0
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('insert into 2000table select * from table1');
adoquery1.ExecSQL;搞定了。散分!