Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Crear Base de Datos con DbExpress (https://www.clubdelphi.com/foros/showthread.php?t=44395)

JosepGA 05-06-2007 17:42:58

Crear Base de Datos con DbExpress
 
Hola a todos, es mi primer mensaje, pero espero que podais ayudarme,

trabajo con dbexpress y firebird 1.5, estoy creando una aplicación con un mantenimiento de empresas, y al crear una nueva empresa, necesito crear una base de datos del estilo GESTION-NºEMPRESA.FDB, lo he intentado con SQLConnection pero me devuelve el error "cannot prepare Create Database\Schema".

Me he quedado atascado, no se como crear la base de datos utilizando puramente dbexpress.

he buscado en los foros y no he encontrado una respuesta a algo similar.

Gracias a todos por la ayuda que me podais prestar.

rruz 06-06-2007 04:10:37

Estimado JosePGA necesitaria el codigo que utilizas para crear la bdd para ver que esta fallando.

Saludos

jachguate 06-06-2007 04:29:21

No utilizo DBeXpress... pero entiendo que el problema se da porque este motor está tratando de preparar el query antes de ejecutarlo, como si se tratase de una consulta. El error, por lo que puedo imaginar, no lo genera el propio DBX, sino ib/fb.

Es probable que haya un componente que no tenga este comportamiento, que haya una propiedad que lo condicione o bien que haya una forma distinta de invocar su ejecución (en otros motores puede ser ExecSQL, por ejemplo).

En fin, la idea es lanzar directamente la instrucción al motor, sin intentar prepararla.

Hasta luego.

;)

JosepGA 06-06-2007 15:45:33

Ejemplo de código
 
Gracias por vuestros comentarios, aqui os adjunto un ejemplo de como lo he intentado hacer ( tambien lo he realizado con parametros, pero me da el mismo mensaje de error ):

procedure CrearBaseDatos;
Var
SQLstmt : String;
Begin
SQLstmt := 'CREATE DATABASE ' + Chr( 39 ) + 'C:\BASE.FBD' + Chr( 39 );
SQLstmt := SQLstmt + ' PAGE_SIZE 8192';
SQLstmt := SQLstmt + ' USER ' + Chr( 39 ) + 'CODUSUARIO' + Chr( 39 );
SQLstmt := SQLstmt + ' PASSWORD ' + Chr( 39 ) + 'CLAVE' + Chr( 39 );
SQLstmt := SQLstmt + ' DEFAULT CHARACTER SET ISO8859_1';

SQLConexionGeneral.ExecuteDirect( SQLstmt );
End;

El problema es que no se como evitar que prepare el script, y no se como lo gestionan otros programadores que trabajan con dbexpress.

gracias por adelantado a vuestra colaboración

JosepGA 08-06-2007 10:38:44

Crear Base de Datos, alguien me puede ayudar ?
 
Cita:

Empezado por JosepGA
Gracias por vuestros comentarios, aqui os adjunto un ejemplo de como lo he intentado hacer ( tambien lo he realizado con parametros, pero me da el mismo mensaje de error ):

procedure CrearBaseDatos;
Var
SQLstmt : String;
Begin
SQLstmt := 'CREATE DATABASE ' + Chr( 39 ) + 'C:\BASE.FBD' + Chr( 39 );
SQLstmt := SQLstmt + ' PAGE_SIZE 8192';
SQLstmt := SQLstmt + ' USER ' + Chr( 39 ) + 'CODUSUARIO' + Chr( 39 );
SQLstmt := SQLstmt + ' PASSWORD ' + Chr( 39 ) + 'CLAVE' + Chr( 39 );
SQLstmt := SQLstmt + ' DEFAULT CHARACTER SET ISO8859_1';

SQLConexionGeneral.ExecuteDirect( SQLstmt );
End;

El problema es que no se como evitar que prepare el script, y no se como lo gestionan otros programadores que trabajan con dbexpress.

gracias por adelantado a vuestra colaboración


sigo atascado con el tema, nadie se ha encontrado con ese problema ?

rruz 09-06-2007 01:58:35

Dbexpress no es capaz de preparar el comando, es una falencia del driver pero puedes usar lo siguiente.

Código Delphi [-]

function isc_dsql_execute_immediate(pstatus: plongint; var db_handle:plongint;  var trans_handle: plongint; length: word; SQL: pchar; dialect:
word;  pxsqlda: pointer): longint; stdcall; external 'GDS32.DLL';

Function CreateDataBase:Boolean;
var
  StatusVector : TStatusVector;
  nDBHandle, nTRHandle : plongint;
  SQL : array[0..1024] of char;
  nResult : integer;
begin
  Result := False;
  nDBHandle := 0;
  nTRHandle := 0;
  StrPCopy(SQL, 'CREATE DATABASE "localhost:c:\database\test.gdb"' +
    'page_size 4096 user "SYSDBA" password "masterkey"');
  nResult := isc_dsql_execute_immediate(@StatusVector, nDBHandle, nTRHandle,
0, SQL, 1, nil);
  if nResult <> 0 then
  begin
    MessageDlg('Error al crear la base de datos', mtWarning, [mbOK], 0);
    exit;
  end;
  Result := true;
end;

Saludos

JosepGA 12-06-2007 12:10:13

Gracias por la ayuda
 
Hola, gracias a todos por la ayuda, aunque al final lo he solucionado de otra forma, que es la siguiente:

como no podia atarme a que solo fuera firebird/interbase, he creado una base de datos base, es decir, al crear una empresa la copio con el nombre mas el codigo de la empresa, aunque tambien me ha dado dolores de cabeza, pues al intentar copia me daba error de que no podia encontrar el archivo origen cuando este estaba en una ruta de red, me he repasado los hilos del foro pertinente, y no encontraba la solución, al final me he dado cuenta de que la ruta que se debe indicar es una ruta de red de windows diferente a la que se indica en las bases de datos, ejemplo:

Base de datos: Servidor:\Aplicacion\NombreArchivo.FBD
Ruta para copias: \\Servidor\Disco C(C)\Aplicacion\NombreArchivo.FBD

Espero que os sirva de ayuda

Un saludo a todos


La franja horaria es GMT +2. Ahora son las 12:38:59.

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