在 InterBase 中创建数据库

Creating database in InterBase

我尝试使用 TIBDatabase 类型在 Delphi 上创建一个 InterBase 数据库。

ibdb:=TIBDatabase.Create(nil);
with ibdb do
  begin
    SQLDialect:=3;
    DatabaseName:=Self.name;
    Params.Clear;
    Params.Add('USER "SYSDBA"');
    Params.Add('PASSWORD "masterkey"');
    Params.Add('PAGE_SIZE 4096');
    LoginPrompt:=false;
    try
      CreateDatabase;
    except on E: Exception do
      ShowMessage('Can''t create database. '+E.Message);
    end;
  end;

Self.name 是类似于 'localhost:C:\db.ib' 的字符串。 代码工作没有错误。数据库文件创建。但 IBConsole 不会在 IB 服务器上显示此数据库。如何检查服务器上是否添加了数据库?

以下对我有用并且避免了你目前提到的所有问题:

1 开始一个新的 Delphi 项目

2 将 TIBDatabase 拖放到表格

3 将以下 CreateDatabase 过程添加到表单

procedure TForm1.CreateDatabase;
begin
  IBDatabase1.SQLDialect:=3;
  IBDatabase1.DatabaseName := 'D:\aaad7\interbase\newdb.gdb';  //edit for
    //  your system & check that you have file-creation rights in the 
    //  database folder you want to use.

  IBDatabase1.Params.Clear;
  IBDatabase1.Params.Add('USER ''SYSDBA''');  // Note that this line
  //  contains 5 single-quotes and no double quotes

  //  Also note that the omission of the usual '=' between the 
  //  parameter name and value for the USER and PASSWORD is deliberate, 
  // because it's evidently required by the IB api

  IBDatabase1.Params.Add('PASSWORD ''masterkey''');  // Ditto

  IBDatabase1.LoginPrompt:=false;

  try
    IBDatabase1.CreateDatabase;
  except on E: Exception do
    ShowMessage('Can''t create database. '+E.Message);
  end;
end;

4 添加一个 TButton 并设置其 OnClick 事件以调用 CreateDatabase.

5 编译 & 运行 然后点击 Button1.

使用 Delphi 7 和 Interbase XE7,此代码成功创建了 newdb.gdb 数据库,并且此数据库在 Delphi 应用程序终止后保留在磁盘上。然后我可以使用下面描述的过程在 IBConsole 中打开数据库。我无法通过 windows shell 删除数据库文件,而 IBConsole 是 运行ning,但我可以在关闭它后删除它。

您是否得到了相同的结果,如果是,是否解决了您的问题?如果不是,为什么不呢?

顺便说一句,我已经编写了 CreateDatabase 代码来避免使用 "with",因为它通常会产生比它避免的问题更多的问题,我讨厌它,并且 以避免动态创建 TIBDatabase 组件,因为这没有任何用处。

注释

  1. 一旦你用上面的代码创建了一个数据库,没有需要"attach"到IBConsole.Exe或者Interbase 服务器以便能够使用它。
    您可以设置一个 IBDatabase、IBTransaction 和 IBQuery 来连接它,并通过从 IBQuery 向它发出 "CREATE TABLE ..." SQL 语句来在其中创建表。

  2. 如果您希望数据库在 IBConsole 实用程序中列出,您可以

a) 使用下面上一个答案

中的过程手动添加

b) 在代码中将其添加到 IBConsole 配置文件 IBConsole.XML,您可以在 C:\users[您的用户名]\Appdata\Roaming\Embarcadero\Interbase 中找到该文件,使用 Delphi XML 访问您选择的图书馆。如果您使用下面的手动过程添加它,然后 close IBConsole.Exe 以便配置文件在磁盘上更新,您将能够检查 XML文件并在 Server/Databases 节点下找到数据库的节点。它看起来像

<key name="Newdb">
<value name="Accessed">A32BFE2475B3E440</value>
<value name="CaseSensitiveRole">0</value>
<value name="CharacterSet"/>
<value name="Created">7DB1327474B3E440</value>
<value name="DatabaseFiles">D:\aaad7\Interbase\NEWDB.GDB</value>
<value name="Encrypted">0</value>
<value name="EUA Enabled">0</value>
<value name="Password">096e6376786a78726d82</value>
<value name="Role"/>
<value name="Save DBAlias">1</value>
<value name="SEP"/>
<value name="Use DBAlias">0</value>
<value name="Username">SYSDBA</value>
<value name="UseSSL">0</value>
</key>

上一个回答

试试这个:

  • 在 IBConsole 中,单击 Local Server 节点和 select 其数据库节点

  • Right-click Databases 节点和 select Add

  • Add database and Connectpop-up中点击按钮到文件的RHS:字段

  • 从那里,您应该能够导航到 select 您的新数据库。

已使用 Interbase XE7 IBConsole 进行测试。

如果这对您不起作用,请问具体是哪一步失败了以及如何失败?

看来我找到了答案。代码创建数据库文件并在 InterBase 服务器上添加数据库。它可以通过 isql 实用程序进行检查。奇怪的是 IBConsole 和 IBExpert 没有显示当前服务器上的所有数据库,而是仅由我理解的相同工具创建。