有点难,如何调用资源文件的数据库(100分)

  • 主题发起人 主题发起人 胡鸣
  • 开始时间 开始时间

胡鸣

Unregistered / Unconfirmed
GUEST, unregistred user!
各位好,为减少程序文件,我将mdb数据库加入到res资源文件中,但不如何调用?
 
1. 除非你能做到驱动一级, 否则没有办法的;

2. 可以变通解决: 程序运行的时候你可以临时将资源中的MDB数据块写到硬盘上, 再访问;
 
如何释放到硬盘上?能不能说具体点?
 
我觉得这种思路本身就有问题,姑且不说它的可行性,首先是有必要这么做吗?这样做有什么意义吗?
 
这个很简单, 定位到资源中的数据块, 有名称ID, 有大小, 写到一个*.MDB文件中就可以了,
再具体你就要听我的课了:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3919828
 
也就是发布程序的时候简单一点, 稍微有点数据保密的感觉...
 
主要的好处是防止误删了数据库文件,能不能提供一下代码?
 
参考我以前的帖子吧, 帮我顶, 你能找到类似应用例子(执行程序)

要代码必须先发邮件给我
 
找不到相应的贴子。
 
是不是真的要等到天上掉下个苹果砸在你脑袋上, 你才能找到答案啊
 
unit ResUtils;

interface
uses
Windows;

function ReadPEResource(hMod:THandle;ResType:PChar;ResName:string;out Data:Pointer;out Len:Integer):Boolean;overload;
function ReadPEResource(szFileName:string;ResType:PChar;ResName:string;out Data:Pointer;out Len:Integer):Boolean;overload;
function WritePEResource(szFileName:string;ResType:PChar;ResName:string;Data:Pointer;Len:Integer):Boolean;

implementation

function MAKELANGID(PrimaryLang,SubLang:WORD): WORD;
begin
Result:=(SubLang shl 10) or PrimaryLang;
end;

function ReadPEResource(hMod:THandle;ResType:PChar;ResName:string;out Data:Pointer;out Len:Integer):Boolean;
var
hResInfo,hGlobal:THandle;
pResData:Pointer;
begin
Result:=False;
hResInfo:=FindResource(hMod,PChar(ResName),PChar(ResType));
if hResInfo=0 then Exit;
hGlobal:=LoadResource(hMod,hResInfo);
if hGlobal=0 then Exit;
pResData:=LockResource(hGlobal);
Len:=SizeOfResource(hMod,hResInfo);
GetMem(Data,Len);
Move(pResData^,Data^,Len);
UnlockResource(hGlobal);
FreeResource(hGlobal);
Result:=True;
end;

function ReadPEResource(szFileName:string;ResType:PChar;ResName:string;out Data:Pointer;out Len:Integer):Boolean;
var
hMod:THandle;
begin
hMod:=LoadLibrary(PChar(szFileName));
Result:=(hMod>0) and ReadPEResource(hMod,ResType,ResName,Data,Len);
if hMod>0 then
FreeLibrary(hMod);
end;

function WritePEResource(szFileName:string;ResType:PChar;ResName:string;Data:Pointer;Len:Integer):Boolean;
var
hUpdate:THandle;
begin
hUpdate:=BeginUpdateResource(PChar(szFileName),False);
Result:=(hUpdate<>0) and UpdateResource(hUpdate,ResType,PChar(ResName),MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),Data,Len);
if hUpdate<>0 then
EndUpdateResource(hUpdate,False);
end;

end.
 
“地质灾害”朋友,我对利用资源文件没入门,请问:如果我的资源文件为mymdb.res,数据库文件为mymdb.mdb,该如何设定参数呢?谢谢大侠。
 
真麻烦。没入门自己去入门 难道要我一脚踹进门。
 
先存成文件,再调用不可以了嘛?
 
多人接受答案了。
 
后退
顶部