【问题标题】:Creating a Database using DBExpress in Delphi?在 Delphi 中使用 DBExpress 创建数据库?
【发布时间】:2009-01-08 10:31:06
【问题描述】:

我需要使用 DBExpress 以编程方式创建一个 Firebird 数据库。我已经为 SQL 服务器做到了这一点,首先连接到 Master,然后将 Create 脚本传递给查询,但是使用 Firebird 我有一点鸡和蛋的问题。

【问题讨论】:

    标签: delphi firebird dbexpress


    【解决方案1】:

    我从一位为 Freepascal 项目创建了一些代码的同事那里得到了一个很好的提示。它不使用 DB express,但据他说,这是使用代码创建数据库的唯一方法。此代码基于 InterBase 手册,并使用来自 gdslib / fbclient dll 的调用:

    procedure TIBConnection.CreateDB;
    
    var ASQLDatabaseHandle,
        ASQLTransactionHandle : pointer;
        CreateSQL : String;
        pagesize : String;
    begin
      CheckDisConnected;
      {$IfDef LinkDynamically}
        InitialiseIBase60;
      {$EndIf}
      ASQLDatabaseHandle := nil;
      ASQLTransactionHandle := nil;
      CreateSQL := 'CREATE DATABASE ';
      if HostName <> '' then
        CreateSQL := CreateSQL + ''''+ HostName+':'+DatabaseName + ''''
      else
        CreateSQL := CreateSQL + '''' + DatabaseName + '''';
    
      if UserName <> '' then
        CreateSQL := CreateSQL + ' USER ''' + Username + '''';
      if Password <> '' then
        CreateSQL := CreateSQL + ' PASSWORD ''' + Password + '''';
      pagesize := params.Values['PAGE_SIZE'];
      if pagesize <> '' then
        CreateSQL := CreateSQL + ' PAGE_SIZE '+pagesize;
    
      if isc_dsql_execute_immediate(@FStatus[0],@ASQLDatabaseHandle,@ASQLTransactionHandle,length(CreateSQL),@CreateSQL[1],Dialect,nil) <> 0 then
        CheckError('CreateDB', FStatus);
    
      if isc_detach_database(@FStatus[0], @ASQLDatabaseHandle) <> 0 then
        CheckError('CreateDB', FStatus);
    
      {$IfDef LinkDynamically}
        ReleaseIBase60;
      {$EndIf}
    end;
    

    诀窍是 isc_dsql_execute_immediate 函数。我希望这段代码可以帮助你。以下是此代码来源的 Freepascal 源文件的链接:

    Unit containing CreateDB function

    Unit containing API call isc_dsql_execute_immediate

    【讨论】:

    • Firebird 的安装目录包含一些模型示例。检查计算机上的以下目录:C:\Program Files\Firebird\Firebird_2_5\examples\api 方法原型可以在目录中找到:C:\Program Files\Firebird\Firebird_2_5\include
    【解决方案2】:

    运行脚本 isql

    isql -i createDB.sql

    CreateDB.sql 文件包含创建数据库的命令,如下所示。

    SET SQL DIALECT 3;
    CREATE DATABASE 'C:\DATABASE\DB.FDB'
    USER 'SYSDBA' PASSWORD 'masterkey'
    PAGE_SIZE 4096
    DEFAULT CHARACTER SET WIN1252;
    QUIT;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多