需要一个建库的程序,因为delphi中的那些数据操作控件都需要连接数据源,但是这些连接的都是已有的库,用create database的语句建库也不知道该用什么控件或接口来调用.

解决方案 »

  1.   

    我也面临同样的问题,我同样如果要建立一个ACCESS呢?是否当作创建新建文件一样呢?
      

  2.   

    用adoquery组件套用sql语句就可以实现动态的建库.
      

  3.   

    //参考如下代码~~
    uses ComObj;
    //...
    var
      CreateAccess: OLEVariant;
    begin
      CreateAccess := CreateOleObject('ADOX.Catalog');
      CreateAccess.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp\temp.mdb');
      CreateAccess := Unassigned;
    end;//参考如下代码~~
      ADOQuery1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp\temp.mdb';
      ADOQuery1.SQL.Text := 'CREATE TABLE Table1 (Field1 varchar(10), Field2 varchar(10))';
      ADOQuery1.ExecSQL;
      

  4.   

    建立access数据库经典代码:至于sql server,用个adoconnection连上,用adoconnection.execute('sql创建语句就可以了')
    access的:.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;
      

  5.   

    谢谢各位的帮忙,这些都是如何动态建立ACCESS库,但是SQL SERVER到底该怎么办?
      

  6.   

    建立access数据库经典代码:至于sql server,用个adoconnection连上,用adoconnection.execute('sql创建语句就可以了')解释:adoconnection.execute('sql创建语句就可以了')  sql语句:IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'数据库名')
    DROP DATABASE [数据库名]
    GO
    CREATE DATABASE [数据库名]  ON (NAME = N'数据库名, FILENAME = N'D:\数据库文件路径' , SIZE = 7, FILEGROWTH = 10%) LOG ON (NAME = N'dzyls2003_Log', FILENAME = N'D:\日志文件路径' , SIZE = 82, FILEGROWTH = 10%)
     COLLATE Chinese_PRC_CI_AS
    go
    exec sp_dboption N'数据库名', N'autoclose', N'false'
    GO
    ....相关参考一下你随便的一个数据库脚本(建表就不用我说了吧)
      

  7.   

    为什么都去研究大中型数据库的动态建立,你一个sqlserver的系统还指望一个傻瓜用户拿去setup了用吗?那天用户心血来潮又一次setup ---哭死你