Создание базы данных с использованием DBExpress в Delphi? - PullRequest
1 голос
/ 08 января 2009

Мне нужно создать базу данных Firebird программно, используя DBExpress. Я сделал это для SQL-сервера, сначала подключившись к Master, а затем передав запрос к скрипту Create, но с Firebird у меня возникла небольшая проблема с яйцами.

Ответы [ 2 ]

3 голосов
/ 08 января 2009

Я получил хороший совет от коллеги, который создал некоторый код для проекта 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, откуда взялся этот код:

Блок, содержащий функцию CreateDB

Единица, содержащая вызов API isc_dsql_execute_immediate

1 голос
/ 12 октября 2011

Запустить скрипт 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;
...