Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   CREATE DATABASE ¿Desde Delphi? (https://www.clubdelphi.com/foros/showthread.php?t=83861)

champy 07-08-2013 18:18:38

CREATE DATABASE ¿Desde Delphi?
 
Hola, muy buenas a tod@s, estoy un poco atascado en lo que será una pregunta tonta, pero es que no encuentro la forma de hacerlo ^_^

Habitualmente para mis aplicaciones sobre Firebird/Interbase, creo la base de datos desde ISQL, FlameRobin u otros gestores y despues la aplicación delphi solo tiene que conectarse con esa base de datos ya creada.

Pero en esta ocasión necesito poder lanzar el "create database" desde la misma aplicación y no tengo idea de como hacerlo.

¿Alguna recomendación?
un saludo a todos los foreros

ecfisa 07-08-2013 18:30:41

Hola champy.

Ejemplo:
Código Delphi [-]
procedure CreateIBDatabase(const DBName: string);
begin
  with TIBDatabase.Create(nil) do
  try
    DatabaseName := ChangeFileExt(DBName, '.FDB');
    Params.Add('USER ''SYSDBA''');
    Params.Add('PASSWORD ''masterkey''');
    Params.Add('PAGE_SIZE 4096');
    Params.Add('DEFAULT CHARACTER SET ISO8859_1');
    CreateDatabase;
  finally
    Free;
  end;
end;

Saludos :)

defcon1_es 07-08-2013 18:40:49

Hola, una posible opción es crearla con isql desde tu programa:

Código Delphi [-]
procedure CrearBD(const Ruta, PasswordSYSDBA:string);
var
    Log: TStrings;
begin
  Log := TStringList.Create;
  try
//Localizar la carpeta donde está instalado FireBird
    Aux := IncludeTrailingPathDelimiter(ExtractFilePath(GetIBServerDataBase));
    Log.Clear;
    Log.Append('SET SQL DIALECT 1;');
    Log.Append('');
    Log.Append('CREATE DATABASE ''' + Ruta +''' USER ''SYSDBA'' PASSWORD '''+ PasswordSYSDBA +''' PAGE_SIZE 16384 DEFAULT CHARACTER SET NONE;');
    Log.SaveToFile('CreacionBD.sql');
    ShellAPI.ShellExecute(Application.Handle, nil, PChar(Aux+'bin\isql.exe'), PChar('-q -i CreacionBD.sql'), PChar(Aux+'bin'), SW_HIDE);
  finally
    Log.Free;
  end;

EDITO: Mucho mejor la solución del compañero ecfisa

champy 07-08-2013 18:48:14

Muchísimas gracias por compartir vuestra sabiduría :)

Pondré en práctica ambas opciones a ver cual me gusta más.


La franja horaria es GMT +2. Ahora son las 12:35:48.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi