我需要使用DBExpress以编程方式创建Firebird数据库。我已经为SQL服务器做了这个,首先连接到Master,然后将Create的脚本传递给查询,但是使用Firebird我有一点鸡和蛋的问题。
答案 0 :(得分:3)
我从一个为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源文件的链接:
答案 1 :(得分:1)
运行脚本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;