当前位置:主页>仓库管理软件> 列表

MDB数据压缩 找服饰进销存管理软件

仓库管理软件版1楼: 我编写CGI,以下代码编译成功,但是执行出错,请各路高手指点
dbtemp.mdb数据库有生成
function CompactDatabase():boolean;
//压缩与修复数据库,覆盖源文件
const
SConnectionString = ''Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;''
+''Jet OLEDB:Database Password=%s;'';
var
temp:string;
JE:OleVariant;
begin
temp:=LeftStr(WebDirectory,length(WebDirectory)-4)+''db\'' ;
try
try
JE:=CreateOleObject(''JRO.JetEngine'');//建立OLE对象,函数结束OLE对象超过作用域自动释放
OleCheck(JE.CompactDatabase(format(SConnectionString,[temp+''db.mdb'','''']),
format(SConnectionString,[temp+''dbtemp.mdb'',''''])));//压缩数据库
DeleteFile(temp+''db.mdb'');
RenameFile(temp+''dbtemp.mdb'', temp+''db.mdb'');
except
result:=false;//压缩失败
end;
finally
FreeAndNil(JE);
end;

2楼: 去掉FreeAndNil(JE);
因为JE实际上是一个OLE的COM对象,而不是TObject对象,所以不应该通过FreeAndNil释放。实际上,离开作用域之后,这个对象会自动释放的。你可以可以通过JE := nil这样来强制释放。 如服饰进销存管理软件

3楼: 楼上说的是


因为Ole对象实际上对接口的后期绑定。所以只需要JE := nil;即可降低饮用计数,以达到释放对象的目的。

4楼: 我单步调试了出错在这句
JE:=CreateOleObject(''JRO.JetEngine'');

5楼: const


DB_AccessDBConnStr = ''Data Source="%S";'' +
''Jet OLEDB:Database Password="%S"'';


function MCompactAccessDb(SourceFileName,SourcePassword,TargetFileName,TargetPassword:String):Boolean;
var
DbConn:OleVariant;
SourceCompactStr:String;
TargetCompactStr:String;
begin
Result:=False;
DbConn:=CreateOleObject(''JRO.JetEngine'');
If FileExists(SourceFileName) then
begin
If FileExists(TargetFileName) then
begin
if Not DeleteFile(TargetFileName) then
begin
exit;
end;
end;
SourceCompactStr:=Format(DB_AccessDBConnStr,[SourceFileName,SourcePassword]);
TargetCompactStr:=Format(DB_AccessDBConnStr,[TargetFileName,TargetPassword]);
Try
DbConn.CompactDatabase(SourceCompactStr,TargetCompactStr);


Result:=True;
except
end;
end;
end;

6楼: to yaya8163:
我单步调试了出错在这句
JE:=CreateOleObject(''JRO.JetEngine'');
--------------------------------------------
这里出错是因为ado的驱动问题。你可以试试在干净的系统下能否成功。
解决办法是在你出问题的系统下用regsvr32注册一下“系统盘:\Program Files\Common Files\System\ado”目录下的msadox.dll和msjro.dll

仓库管理软件版7楼: 我写的其他页面可以正常打开修改数据库,驱动不存在问题

8楼: 要不你把源码发来看看
cgcpj@tom.com

9楼: 我将代码放在ASP中可以正确执行

10楼: 我贴出来的就是源码

11楼: 这段代码居然只能压缩没有损坏的数据库,如果数据库已经损坏就执行出错。只能用ACCESS打开。不是说Compact已经带有修复功能?
sub CompactData()
Dim fso, Engine, strDBPath
strDBPath = left(dbPath,instrrev(DBPath,"\"))
Set fso = Server.CreateObject("Scripting.FileSystemObject")
If fso.FileExists(dbPath) Then
Set Engine = CreateObject("JRO.JetEngine")
Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbpath," Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBPath & "temp.mdb"
fso.CopyFile strDBPath & "temp.mdb",dbpath
fso.DeleteFile(strDBPath & "temp.mdb")
Set fso = nothing
Set Engine = nothing
response.write "数据库压缩成功!"
Else
response.write "数据库没有找到!"
End If
end sub