如果程序启动的时候检测不到必要的数据库,就自动建立一个,代码应该怎样写??

解决方案 »

  1.   

    楼主给的分有点少了,所以没人回答吧。……——……
    1.DELPHI中操作ACCESS数据库(建立.mdb文件,压缩数据库)
    以下代码在WIN2K,D6,MDAC2.6下测试通过,
    编译好的程序在WIN98第二版无ACCESS环境下运行成功.
    //在之前uses ComObj,ActiveX
    //声明连接字符串
    Const
     SConnectionString       = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'
                                   +'Jet OLEDB:Database Password=%s;';//=============================================================================
    // Procedure: GetTempPathFileName
    // Author   : ysai
    // Date     : 2003-01-27
    // Arguments: (None)
    // Result   : string
    //=============================================================================
    function GetTempPathFileName():string;
    //取得临时文件名
    var
     SPath,SFile:array [0..254] of char;
    begin
     GetTempPath(254,SPath);
     GetTempFileName(SPath,'~SM',0,SFile);
     result:=SFile;
     DeleteFile(PChar(result));
    end;//=============================================================================
    // Procedure: CreateAccessFile
    // Author   : ysai
    // Date     : 2003-01-27
    // Arguments: FileName:String;PassWord:string=''
    // Result   : boolean
    //=============================================================================
    function CreateAccessFile(FileName:String;PassWord:string=''):boolean;
    //建立Access文件,如果文件存在则失败
    var
     STempFileName:string;
     vCatalog:OleVariant;
    begin
     STempFileName:=GetTempPathFileName;
     try
       vCatalog:=CreateOleObject('ADOX.Catalog');
       vCatalog.Create(format(SConnectionString,[STempFileName,PassWord]));
       result:=CopyFile(PChar(STempFileName),PChar(FileName),True);
       DeleteFile(STempFileName);
     except
       result:=false;
     end;
    end;//=============================================================================
    // Procedure: CompactDatabase
    // Author   : ysai
    // Date     : 2003-01-27
    // Arguments: AFileName,APassWord:string
    // Result   : boolean
    //=============================================================================
    function CompactDatabase(AFileName,APassWord:string):boolean;
    //压缩与修复数据库,覆盖源文件
    var
     STempFileName:string;
     vJE:OleVariant;
    begin
     STempFileName:=GetTempPathFileName;
     try
       vJE:=CreateOleObject('JRO.JetEngine');
       vJE.CompactDatabase(format(SConnectionString,[AFileName,APassWord]),
           format(SConnectionString,[STempFileName,APassWord]));
       result:=CopyFile(PChar(STempFileName),PChar(AFileName),false);
       DeleteFile(STempFileName);
     except
       result:=false;
     end;
    end;//=============================================================================
    // Procedure: ChangeDatabasePassword
    // Author   : ysai
    // Date     : 2003-01-27
    // Arguments: AFileName,AOldPassWord,ANewPassWord:string
    // Result   : boolean
    //=============================================================================
    function ChangeDatabasePassword(AFileName,AOldPassWord,ANewPassWord:string):boolean;
    //压缩数据库并修改ACCESS数据库密码
    var
     STempFileName:string;
     vJE:OleVariant;
    begin
     STempFileName:=GetTempPathFileName;
     try
       vJE:=CreateOleObject('JRO.JetEngine');
       vJE.CompactDatabase(format(SConnectionString,[AFileName,AOldPassWord]),
           format(SConnectionString,[STempFileName,ANewPassWord]));
       result:=CopyFile(PChar(STempFileName),PChar(AFileName),false);
       DeleteFile(STempFileName);
     except
       result:=false;
     end;
    end;