Pregunta

Necesito crear una base de datos Firebird mediante programación utilizando DBExpress. He hecho esto para el servidor SQL, primero conectándome con Master, luego pasando el script para Crear a una consulta, pero con Firebird tengo un pequeño problema de gallina y huevo.

¿Fue útil?

Solución

Recibí un buen consejo de un colega que creó un código para el proyecto Freepascal. No utiliza DB Express, pero según él es la única forma de crear una base de datos con código. Este código se basa en el manual de InterBase y utiliza una llamada de la dll gdslib / fbclient:

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;

El truco es la función isc_dsql_execute_immediate. Espero que este código te ayude. Aquí están los enlaces a los archivos fuente de Freepascal de donde proviene este código:

Unidad que contiene la función CreateDB

Unidad que contiene la llamada a la API isc_dsql_execute_immediate

Otros consejos

Ejecuta un script isql

isql-i createDB.sql

CreateDB.sql el archivo incluye el comando para crear la base de datos como se muestra a continuación.

SET SQL DIALECT 3;
CREATE DATABASE 'C:\DATABASE\DB.FDB'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 4096
DEFAULT CHARACTER SET WIN1252;
QUIT;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top