D6+Access2000 关于清空数据表时 重新设置 自动编号 的问题
我在清空数据库时为了使 自动编号 的字段也清空,重新设置了字段
但是
adoconnection1.Open;
adoquery1.Close ;
adoquery1.SQL.Clear ;
adoquery1.SQL.Add( 'alter table [OLCheck_Image] alter COLUMN[Image_ID] COUNTER(1,1) ');
adoquery1.ExecSQL;
会出现 "无效的字段数据类型"的提示,经过网上查找,发现之前必须要收缩数据库才可以,请问这是什么原因??
另外,我在access中收缩数据库后,上面代码没有问题,但是我用程序进行收缩以后,还会出现以上的问题,不知道这是怎么回事,请大家帮忙看看
这是收缩数据库的代码
g_DBFilePath := ExtractFilePath(ParamStr(0)); //得到可执行程序的路径
try
DeleteFile(g_DBFilePath+ 'OLCheck.ldb ');
except
end;
CompactAccess:=CreateOleObject( 'JRO.JetEngine ');
try
ComPactAccess.CompactDatabase( 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=OLCheck.mdb ', 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=OLCheckTemp.mdb;JetOLEDB:EncryptDatabase=True ');
DeleteFile(g_DBFilePath+ 'OLCheck.mdb ');
RenameFile(g_DBFilePath+ 'OLCheckTemp.mdb ',g_DBFilePath+ 'OLCheck.mdb ');
showmessage( '维护数据库完毕! ');
except
showmessage( '请重新启动计算机后再次运行维护程序 ');
end;
[解决办法]
Procedure Compact_Repair_ADODatabase(DbName,MDB_PSWD: string);
var
DAO: OLEVariant;
ConnectStr:Ansistring;
begin
DeleteFile(DBName+ '.bk ');
DAO:=CreateOleObject( 'JRO.JetEngine ');
ConnectStr := 'Provider=Microsoft.Jet.OLEDB.4.0; ';
if MDB_PSWD <> ' ' then ConnectStr := ConnectStr + 'Jet OLEDB:Database Password= '+MDB_PSWD+ '; ';
ConnectStr := ConnectStr + 'Data Source= '+DbName;
DAO.CompactDatabase (ConnectStr,ConnectStr+ '.bk ');
DeleteFile(DBName);
RenameFile(DbName+ '.bk ',DbName);
end;
///必须先清空表记录