在 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 组件,因为这没有任何用处。
注释
一旦你用上面的代码创建了一个数据库,没有需要"attach"到IBConsole.Exe或者Interbase 服务器以便能够使用它。
您可以设置一个 IBDatabase、IBTransaction 和 IBQuery 来连接它,并通过从 IBQuery 向它发出 "CREATE TABLE ..." SQL 语句来在其中创建表。
如果您希望数据库在 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 Connect
pop-up中点击按钮到文件的RHS:字段
从那里,您应该能够导航到 select 您的新数据库。
已使用 Interbase XE7 IBConsole 进行测试。
如果这对您不起作用,请问具体是哪一步失败了以及如何失败?
看来我找到了答案。代码创建数据库文件并在 InterBase 服务器上添加数据库。它可以通过 isql 实用程序进行检查。奇怪的是 IBConsole 和 IBExpert 没有显示当前服务器上的所有数据库,而是仅由我理解的相同工具创建。
我尝试使用 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 组件,因为这没有任何用处。
注释
一旦你用上面的代码创建了一个数据库,没有需要"attach"到IBConsole.Exe或者Interbase 服务器以便能够使用它。
您可以设置一个 IBDatabase、IBTransaction 和 IBQuery 来连接它,并通过从 IBQuery 向它发出 "CREATE TABLE ..." SQL 语句来在其中创建表。如果您希望数据库在 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
节点和 selectAdd
在
Add database and Connect
pop-up中点击按钮到文件的RHS:字段从那里,您应该能够导航到 select 您的新数据库。
已使用 Interbase XE7 IBConsole 进行测试。
如果这对您不起作用,请问具体是哪一步失败了以及如何失败?
看来我找到了答案。代码创建数据库文件并在 InterBase 服务器上添加数据库。它可以通过 isql 实用程序进行检查。奇怪的是 IBConsole 和 IBExpert 没有显示当前服务器上的所有数据库,而是仅由我理解的相同工具创建。