此文章是vip文章,如何查看?  

1,点击链接获取密钥 http://nicethemes.cn/product/view29882.html

2,在下方输入文章查看密钥即可立即查看当前vip文章


使用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

本文链接http://element-ui.cn/news/show-577296.aspx