使用DelphiXE10动态创建Firebird嵌入式数据库文件

使用DelphiXE10动态创建Firebird嵌入式数据库文件

最近在研究单机版数据库Firebird的嵌入式使用方法,想在程序中动态创建Firebird数据库。在网上搜了N遍,只找到一个不能正常使用的例子(本人DelphiXE10环境下测试的,其他版本没有测试),索性自己动手写了一个函数,闲话不多说,直接上源码:
unit U_Firebird;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IBX.IBHeader, IBX.IB;

  function  FB_CreateDatabase(VendorLib, FBDatabase, FBUsername, FBPassword: string): Boolean;

implementation

function  FB_CreateDatabase(VendorLib, FBDatabase, FBUsername, FBPassword: string): Boolean;
var   //创建Firebird数据库:动态库文件名,数据库名,登录名,密码
  dbCreateSql: AnsiString;
  FileName: string;
  StatusVector: TStatusVector;                                                  //引用 IBX.IB 单元
  DBHandle: PPointer;
  TRHandle: PPointer;
  GDS32Lib: THandle;
  errcode: integer;
  isc_dsql_execute_immediate: Tisc_dsql_execute_immediate;                      //引用 IBX.IBHeader 单元
begin
  Result := False;
  dbCreateSql := AnsiString(Format('CREATE DATABASE ''%s'' user ''%s'' PASSWORD ''%s'' PAGE_SIZE 8192 DEFAULT CHARACTER SET NONE',
      [FBDatabase, FBUsername, FBPassword]));
  FileName := FBDatabase;
  DeleteFile(FileName);
  DeleteFile(FBDatabase);

  DBHandle := nil;
  TRHandle := nil;
  FileName := VendorLib;
  if FileName = '' then FileName := '.\FB32Embed.dll';                          //在此设置默认动态连接库文件名
  GDS32Lib := LoadLibrary(PWideChar(FileName));
  try
    isc_dsql_execute_immediate := GetProcAddress(GDS32Lib, 'isc_dsql_execute_immediate');
    if not assigned(isc_dsql_execute_immediate) then raise exception.create('isc_dsql_execute_immediate = nil');

    errcode := isc_dsql_execute_immediate(@statusVector, @DBHandle, @TRHandle, 0, PByte(dbCreateSql), 3, nil);
    if errcode <> 0 then raise exception.create('isc_dsql_execute_immediate create database error. ' +  'error ' + inttostr(errcode));
    TRHandle := nil;
    DBHandle := nil;
    Result := True;
  finally
    FreeLibrary(GDS32Lib);
  end;
end;

end.

首次写博客,对这个博客编辑工具使用还不顺手,格式方面就这样吧!
如果转载请注明出处,如果有更好的可以进行交流:yangfeng_yu@163.com
2019.09.28

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值