如何将数据库作为资源添加到可执行文件我想把数据库和可执行文件整合在一个文件里

解决方案 »

  1.   

    应该不行吧,干脆将数据库导成txt文件,然后把这个TXT做进某个单元里,最后自己编个搜索函数吧
      

  2.   

    用流可以把数据库文件捆绑到Exe文件中,但你用时还是要解开
      

  3.   

    可以自己生成相关的文件啊,如果绑在了Exe里,那你的Exe是不是会太大了?
      

  4.   

    我的exe大没关系,“可以自己生成相关的文件啊”是什么意思?大家能说的仔细点吗?
      

  5.   

    可以把任意文件放入  
    下面我给你一个放入Exe文件的例子,任意都是一样的  
    RC文件中是  
    nestexe  exefile  "c:\nestexe.exe"    
    程序里面是  
    {$R  nestexe.res}  
     
    procedure  TForm1.btnStartClick(Sender:  TObject);  
    var  
       ResHandle  :  THandle;  
       MemHandle  :  THandle;  
       MemStream  :  TMemoryStream;  
       ResPtr  :  PByte;  
       ResSize  :  Longint;  
       F:  TFileStream;  
    begin  
       F  :=  TFileStream.Create('d:\aa.exe',fmCreate);  
       ResHandle  :=  FindResource(hInstance,  PChar('nestexe'),  'exefile');  
       MemHandle  :=  LoadResource(hInstance,  ResHandle);  
       ResPtr  :=  LockResource(MemHandle);  
       MemStream  :=  TMemoryStream.Create;  
       ResSize  :=  SizeOfResource(hInstance,  ResHandle);  
       MemStream.SetSize(ResSize);  
       MemStream.Write(ResPtr^,  ResSize);  
       FreeResource(MemHandle);  
       MemStream.Seek(0,  0);  
       F.CopyFrom(MemStream,MemStream.Size);  
       F.Free;  
       //  
       MemStream.Free;  
    end;  
      

  6.   

    可以,不过要是太大了就没有意义了。
    给你两个函数:
    合并函数:
    Function Cjt_AddtoFile(SourceFile,TargetFile:string):Boolean;
    var
    Target,Source:TFileStream;
    MyFileSize:integer;
    begin
    try
    Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareExclusive);
    Target:=TFileStream.Create(TargetFile,fmOpenWrite or fmShareExclusive);
    try
    Target.Seek(0,soFromEnd);//往尾部添加资源
    Target.CopyFrom(Source,0);
    MyFileSize:=Source.Size+Sizeof(MyFileSize);//计算资源大小,并写入辅程尾部
    Target.WriteBuffer(MyFileSize,sizeof(MyFileSize));
    finally
    Target.Free;
    Source.Free;
    end;
    except
    Result:=False;
    Exit;
    end;
    Result:=True;
    end;释放函数:
    Function Cjt_LoadFromFile(SourceFile,TargetFile :string):Boolean;
    var
    Source:TFileStream;
    Target:TMemoryStream;
    MyFileSize:integer;
    begin
    try
    Target:=TMemoryStream.Create;
    Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareDenyNone);
    try
    Source.Seek(-sizeof(MyFileSize),soFromEnd);
    Source.ReadBuffer(MyFileSize,sizeof(MyFileSize));//读出资源大小
    Source.Seek(-MyFileSize,soFromEnd);//定位到资源位置
    Target.CopyFrom(Source,MyFileSize-sizeof(MyFileSize));//取出资源
    Target.SaveToFile(TargetFile);//存放到文件
    finally
    Target.Free;
    Source.Free;
    end;
    except
    Result:=false;
    Exit;
    end;
    Result:=true;
    end;