在程序中,为了防止mdb数据库被误删,我将数据库编译到res资源文件中去了,作成了mymdb.res,并添加到单元,但不知如何调用?
解决方案 »
- 请教Devexpress VCL中打印预览的问题
- 数据库多表联查返回的数据集删除的问题
- 怎么诸行访问DBGrid
- 没事放水玩
- 初学数据库,请各位前辈推荐一下比较好的关于DELPHI SQL编程的书籍,谢谢!
- delphi6.0c/s例子 100分
- 100分求救,各位快来救救我吧,客户都有些不高兴了!!!!!!!!!!!!!!!!!!!
- OnFieldChangeComplete事件中的参数怎么使用?
- 如何用delph监测系统有其他进程启动了,就关机?
- 如何取得一个要下载文件的长度?
- delphi7游戏呼出外挂窗口
- Delphi的treeview应用中出错,单击子节点打开另一个窗口 ,怎么让子节点失去焦点
mydb dbfile 'my.mdb'2.读取
var
Res: TResourceStream;
begin
Res := TResourceStream.Create(Hinstance,'mydb', Pchar('dbfile'));
Res.SavetoFile('c:\tmp.mdb');//释放到新的空间
end;
function ExtractRes(pFilePath,pFileName,pFileExteName: string): Boolean;
var
vFileName: string;
Res: TResourceStream;
begin
vFileName := pFilePath + pFileName + '.' + pFileExteName;
if FileExists(vFileName) then
begin
Result := True;
Exit;
end;
ForceDirectories(pFilePath);
try
Res := TResourceStream.Create(Hinstance, pFileName+'DB', PChar(pFileExteName));
try
Res.SavetoFile(vFileName);
Result := True;
finally
Res.Free;
end;
except
Result := False;
end;
end;//在数据单元创建时调用
procedure TDM.DataModuleCreate(Sender: TObject);
var
AppPath,CPass,CName,Conn1:string;
ConfigStr,SystemDataBaseName:string;
ini: TIniFile;
m:Integer;
vDBName: string;
begin
gApplTerm := False;
GetDir(0,AppPath);
vDBName := AppPath + '\DataBase\Language.mdb';
if not ExtractRes(AppPath + '\DataBase\','Language','mdb') then//释放数据库
begin
Application.MessageBox('数据库丢失,系统无法运行!','系统提示',MB_ok);
gApplTerm := True;
Exit;
end;end;
资源编译好之后是只读的。你的程序也不能做到使用的时候释放出来,使用完又编译回去所以为了防止mdb数据库被误删,把mdb编译到资源中我个人觉得是没有意义的。为了部署方便还可以说得过去。
同意2位说的,发现MDB被删除后,就从资源里拷一个出来,
但是这样被删除的数据库以前的纪录也都没了
Res: TResourceStream;
begin
if FileExists('c:\tmp.mdb') then exit;
Res := TResourceStream.Create(Hinstance,'mydb', Pchar('dbfile'));
Res.SavetoFile('c:\tmp.mdb');//释放到新的空间
end;这样写,防止覆盖掉已经更新的记录。
try
Res := TResourceStream.Create(Hinstance,PChar(ResType), PChar(ResName));
try
Res.SavetoFile(Filename);
Result := True;
finally
Res.Free;
end;
uses resutils;
{$R *.dfm}
{$R mymdb.RES}procedure TForm1.Button1Click(Sender: TObject);
var Res: TResourceStream;
begin
Res := TResourceStream.Create(Hinstance,pchar('RCDATA'), Pchar('mymdb.res'));
Res.SavetoFile('c:\new.mdb');
end;错误信息
message"Resource RCDATA not found"说明:
附资源文件mymdb.rc:
mymdb RCDATA dqb.mdb编译的资源文件为mymdb.res。