!!!发布BDE数据库程序请教&压缩和修复Access2000数据库编程实现请教(200分)

  • 主题发起人 主题发起人 xmusyh
  • 开始时间 开始时间
X

xmusyh

Unregistered / Unconfirmed
GUEST, unregistred user!
我用dlephi6+Access2000设计了一个数据库程序:test.exe和test.mdb
现在我遇到了一些问题:
1。怎么编程实现压缩和修复test.mdb
2。我需要把2个*.db(paradox文件)编程导入到test.mdb中,为此我设计了另一个导入程序
import.exe,可是我只有一张delphi6光盘且光盘上面没有install shield express 之类的软件
,所以import.exe这个程序怎么发布就成了很大的问题,毕竟我不能在每台机器上面安装delphi6
,请大家告诉我有没有什么简单的变通的方法?
这些方法应该有下面两种可能:
<1>无需BDE就可以直接读取*.db文件然后将其导入*.mdb文件
<2>需要BDE但是发布BDE很简单
请大家帮帮忙,如果答案令我满意,我一定再加上几百分。谢谢!
我的电子邮件:xmusyh@263.net
 
我想知道
 
D6?
如果你用的是DBExpress或ADO的控件的话,不用发布什么BDE的,
它都是直接连接程序中不用单独装BDE的.

如果不用BDE的话什么安装工具都可以用啊!
如:InstallShield for D5(D5的光盘上有) , Wise 等
推荐SetupBuilder 1.50sc

只有D6的光盘?
你能上网,不会去下一个?
 
?怎么编程实现压缩和修复test.mdb

拜托你查查已答问题问过n次了!
 
1 查阅以下OFFICE VBA 关于压缩数据库的函数,在ACCESS帮助文件里有
2 使用Delphi关于office的调用函数
 
我来拿分:
1、操作Access用DiamondAccess,不需要驱动
压缩test.mdb使用
__DBEngine36.CompactDatabase ('test.mdb','temp.tmp', '', 0, '');//将test.mdb压缩为test.tmp
DeleteFile('test.mdb');//删除原文件
RenameFile('test.tmp','test.mdb');//将压缩好的test.tmp改名为test.mdb

2、操作*.db做个最简化BDE(没找到脱离BDE操作*.db的控件)
需要的BDE文件:Idapi32.dll,Blw32.dll,Idr20009.dll,Fareast.bll,Usa.bll,Idpdx32.dll,
,bantam.dll,fareast.btl,charset.cvb共9个文件,一个不能缺。
将这些文件注册并将BDE的一些注册信息写入注册表。

下面是本人做的BDE安装程序(程序用D5做好,用ASPACK压缩后大小为711K,D6做文件要大一些):
将这9个文件做成资源文件DBDRV1.RES。
源代码为:
program DBDrv;

uses
Forms,Windows,Classes,
Registry,
FileCtrl;

{$R *.RES}
{$R DBDRV1.RES}

var
MyReg:TRegistry;
DBDrvRes:Tresourcestream;
begin
Application.Initialize;
MyReg:=TRegistry.Create;
MyReg.RootKey:=HKEY_LOCAL_MACHINE;
if MyReg.OpenKey('/SOFTWARE/Borland/Database Engine/', False) then
begin
MyReg.CloseKey;
MyReg.Free;
application.MessageBox('驱动已安装过!','系统信息',MB_Ok+MB_ICONWARNING);
Application.Terminate;
end
else
begin
MyReg.CloseKey;
MyReg.Free;
MyReg:=TRegistry.Create;
MyReg.RootKey:=HKEY_LOCAL_MACHINE;
if MyReg.OpenKey('/SOFTWARE/Borland/Database Engine/', True) then
begin
MyReg.WriteString('DLLPATH','C:/Program Files/Common Files/Borland Shared/BDE');
end;
MyReg.CloseKey;
MyReg.Free;
MyReg:=TRegistry.Create;
MyReg.RootKey:=HKEY_LOCAL_MACHINE;
if MyReg.OpenKey('/SOFTWARE/Borland/BLW32', True) then
begin
MyReg.WriteString('BLAPIPATH','C:/Program Files/Common Files/Borland Shared/BDE');
MyReg.WriteString('LOCALE_LIB1','C:/Program Files/Common Files/Borland Shared/BDE/USA.BLL');
MyReg.WriteString('LOCALE_LIB2','C:/Program Files/Common Files/Borland Shared/BDE/FAREAST.BLL');
end;
MyReg.CloseKey;
MyReg.Free;
MyReg:=TRegistry.Create;
MyReg.RootKey:=HKEY_LOCAL_MACHINE;
if MyReg.OpenKey('/SOFTWARE/Borland/BLW32', True) then
begin
MyReg.WriteString('BLAPIPATH','C:/Program Files/Common Files/Borland Shared/BDE');
MyReg.WriteString('LOCALE_LIB1','C:/Program Files/Common Files/Borland Shared/BDE/USA.BLL');
MyReg.WriteString('LOCALE_LIB2','C:/Program Files/Common Files/Borland Shared/BDE/FAREAST.BLL');
end;
MyReg.CloseKey;
MyReg.Free;
MyReg:=TRegistry.Create;
MyReg.RootKey:=HKEY_LOCAL_MACHINE;
if MyReg.OpenKey('/SOFTWARE/Borland/Database Engine/Settings/DRIVERS/PARADOX/INIT', True) then
begin
MyReg.WriteString('VERSION','4.0');
MyReg.WriteString('TYPE','FILE');
MyReg.WriteString('LANGDRIVER','china');
end;
MyReg.CloseKey;
MyReg.Free;

MyReg:=TRegistry.Create;
MyReg.RootKey:=HKEY_LOCAL_MACHINE;
if MyReg.OpenKey('/SOFTWARE/Borland/Database Engine/Settings/DRIVERS/PARADOX/TABLE CREATE', True) then
begin
MyReg.WriteString('LEVEL','7');
MyReg.WriteString('BLOCK SIZE','2048');
MyReg.WriteString('FILL FACTOR','95');
MyReg.WriteString('STRICTINTEGRTY','TRUE');
end;
MyReg.CloseKey;
MyReg.Free;
ForceDirectories('C:/Program Files/Common Files/Borland Shared/BDE');
DBDrvRes:=Tresourcestream.Create(HInstance,'DBDRV','D1');
DBDrvRes.SaveToFile('C:/Program Files/Common Files/Borland Shared/BDE/Idapi32.dll');
DBDrvRes.Free;
DBDrvRes:=Tresourcestream.Create(HInstance,'DBDRV','D2');
DBDrvRes.SaveToFile('C:/Program Files/Common Files/Borland Shared/BDE/Blw32.dll');
DBDrvRes.Free;
DBDrvRes:=Tresourcestream.Create(HInstance,'DBDRV','D3');
DBDrvRes.SaveToFile('C:/Program Files/Common Files/Borland Shared/BDE/Idr20009.dll');
DBDrvRes.Free;
DBDrvRes:=Tresourcestream.Create(HInstance,'DBDRV','D4');
DBDrvRes.SaveToFile('C:/Program Files/Common Files/Borland Shared/BDE/Fareast.bll');
DBDrvRes.Free;
DBDrvRes:=Tresourcestream.Create(HInstance,'DBDRV','D5');
DBDrvRes.SaveToFile('C:/Program Files/Common Files/Borland Shared/BDE/Usa.bll');
DBDrvRes.Free;
DBDrvRes:=Tresourcestream.Create(HInstance,'DBDRV','D6');
DBDrvRes.SaveToFile('C:/Program Files/Common Files/Borland Shared/BDE/Idpdx32.dll');
DBDrvRes.Free;
DBDrvRes:=Tresourcestream.Create(HInstance,'DBDRV','D7');
DBDrvRes.SaveToFile('C:/Program Files/Common Files/Borland Shared/BDE/bantam.dll');
DBDrvRes.Free;
DBDrvRes:=Tresourcestream.Create(HInstance,'DBDRV','D8');
DBDrvRes.SaveToFile('C:/Program Files/Common Files/Borland Shared/BDE/fareast.btl');
DBDrvRes.Free;
DBDrvRes:=Tresourcestream.Create(HInstance,'DBDRV','D9');
DBDrvRes.SaveToFile('C:/Program Files/Common Files/Borland Shared/BDE/charset.cvb');
DBDrvRes.Free;
application.MessageBox('驱动安装完成!','系统信息',MB_Ok+MB_ICONWARNING);
Application.Terminate;
end;
end.

 
我有压缩Access97的代码
 
uses
SysUtils,
ActiveX,
JRO_TLB; // 'Microsoft Jet and Replication Objects 2.5 Library' or later
// C:/Program Files/Common Files/System/ADO/msjro.dll


procedure CompactDB(const DBname, DBtype: string);
var
MyJetEngine: JetEngine;
strDataSource,
strDataDest,
strDataDestName: string;

begin
if not FileExists(DBname) then
begin
writeln('Error: ''', DBName, ''' not found.');
exit;
end;

// delete any previous temporary mdb file
strDataDestName := ExtractFilePath(DBname) + 'temp.mdb';
if FileExists(StrDataDestName) then
begin
DeleteFile(strDataDestName);
writeln('Previous temporary file ', strDataDestName, ' deleted.');
end;

strDataSource := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + DBname + ';';
strDataDest := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + strDataDestName + ';';

// default to Access 2000 format unless 97 format is specified
{ default changed 30 Sep 2000 DRS }
if DBtype = '97' then
// Use Engine Type 4 for Access 97 db
strDataDest := strDataDest + 'Jet OLEDB:Engine Type=4'
else
// Use Engine Type 5 for Access 2000 db
strDataDest := strDataDest + 'Jet OLEDB:Engine Type=5';

MyJetEngine := CoJetEngine.Create();
try
MyJetEngine.CompactDatabase(strDataSource, strDataDest);
writeln(DBname, ' compacted into ', strDataDestName + '.');
MyJetEngine := nil;
if DeleteFile(DBname) then
begin
writeln(DBname, ' deleted.');
if RenameFile(strDataDestName, DBName) then
writeln(strDataDestName, ' renamed ', DBname + '.')
else
writeln('Error: ', strDataDestName, ' could not be renamed ', DBname, '.');
end
else
writeln('Error: ', DBname, ' could not be deleted.');
except
on E: Exception do writeln('Error: ', E.Message);
end
end;


调用:
97 :CompactDB('test.mdb', '97');
2000:CompactDB('test.mdb', '2000');
 
不要分了,只是来看看。
 
你用 ACCESS 2000 想来,你的 程序 不会太大到什么 地.

所以. 你可以用 DiamondAccess . 或 KAO

我才写了一个程序.用 的 DiamondAccess , 速度快. 发布方便,

我都 懒得做什么 发 布. 给他 们 Copy 就可以用了.

(我的 另一个 朋友 为了 唬人,还做了一个 安装 程序.....)

我用的 压缩,恢复 等 ,也是 用的 DiamondAccess 的, 如上边

>>1、操作Access用DiamondAccess,不需要驱动
>> 压缩test.mdb使用
>> __DBEngine36.CompactDatabase ('test.mdb','temp.tmp', '', 0, '');//将test.mdb压缩为test.tmp
>> DeleteFile('test.mdb');//删除原文件
>> RenameFile('test.tmp','test.mdb');//将压缩好的test.tmp改名为test.mdb

请注意 这是没有密码的, 有 密码的 还要 加一些 改动.

不用 BDE ,不用 ODBC ,多省心.

 
多人接受答案了。
 
后退
顶部