delphi 如何释放res资源文件?

prabbit 2008-09-19 07:53:56
在程序中,为了防止mdb数据库被误删,我将数据库编译到res资源文件中去了,作成了mymdb.res,并添加到单元,但不知如何调用?
...全文
415 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
mks3246875 2011-07-07
  • 打赏
  • 举报
回复
字还打错,TResourceStream.Create第2个参数是标题符,第3个是类型,不用加指针类型,无语
prabbit 2008-09-20
  • 打赏
  • 举报
回复
问题解决了,谢谢各位
prabbit 2008-09-20
  • 打赏
  • 举报
回复
哥哥们今天都休息了?
gwhdaxia 2008-09-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 JeffChung 的回复:]
引用 3 楼 YFLK 的回复:
把数据库编译到res资源文件中,这样的库在运行过程中可以修改,但下次启动时还是原始数据。


资源编译好之后是只读的。

你的程序也不能做到使用的时候释放出来,使用完又编译回去

所以为了防止mdb数据库被误删,把mdb编译到资源中我个人觉得是没有意义的。为了部署方便还可以说得过去。
[/Quote]

同意2位说的,发现MDB被删除后,就从资源里拷一个出来,
但是这样被删除的数据库以前的纪录也都没了
JeffChung 2008-09-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 YFLK 的回复:]
把数据库编译到res资源文件中,这样的库在运行过程中可以修改,但下次启动时还是原始数据。
[/Quote]

资源编译好之后是只读的。

你的程序也不能做到使用的时候释放出来,使用完又编译回去

所以为了防止mdb数据库被误删,把mdb编译到资源中我个人觉得是没有意义的。为了部署方便还可以说得过去。
prabbit 2008-09-19
  • 打赏
  • 举报
回复
谢谢各位的指点,因我的数据库主要是作查询用,故将数据库文件加入到资源文件中。用上述的方法出现错误,请问错在哪里?

implementation
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。
zhuchengchuan 2008-09-19
  • 打赏
  • 举报
回复
//释放数据库
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;
石头--- 2008-09-19
  • 打赏
  • 举报
回复
来晚了。。

if FileExists(Filename) then exit;
try
Res := TResourceStream.Create(Hinstance,PChar(ResType), PChar(ResName));
try
Res.SavetoFile(Filename);
Result := True;
finally
Res.Free;
end;
YFLK 2008-09-19
  • 打赏
  • 举报
回复
把数据库编译到res资源文件中,这样的库在运行过程中可以修改,但下次启动时还是原始数据。
喝口水 2008-09-19
  • 打赏
  • 举报
回复
同意楼上的,另外给楼主提个建议,可以采取动态创建数据库的方法,程序启动的时候检查数据库文件是否存在,如果不存在,就自动创建
yuqianyi1974 2008-09-19
  • 打赏
  • 举报
回复
1.比如你的res文件内容如下:
mydb dbfile 'my.mdb'

2.读取
var
 Res: TResourceStream;
begin
 Res := TResourceStream.Create(Hinstance,'mydb', Pchar('dbfile'));
 Res.SavetoFile('c:\tmp.mdb');//释放到新的空间
end;
无条件为你 2008-09-19
  • 打赏
  • 举报
回复
var
 Res: TResourceStream;
begin
if FileExists('c:\tmp.mdb') then exit;
 Res := TResourceStream.Create(Hinstance,'mydb', Pchar('dbfile'));
 Res.SavetoFile('c:\tmp.mdb');//释放到新的空间
end;

这样写,防止覆盖掉已经更新的记录。

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧