delphi - usar - gsec firebird
Crear una base de datos usando DBExpress en Delphi? (2)
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;
Necesito crear una base de datos Firebird programáticamente usando DBExpress. He hecho esto para el servidor SQL, primero conectándome a la Maestra, y luego paso la secuencia de comandos de Crear a una consulta, pero con Firebird tengo un pequeño problema de huevo y pollo.
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 del 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 Freepascal de los que proviene este código:
Unidad que contiene la función CreateDB
Unidad que contiene la llamada API isc_dsql_execute_immediate